一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1631|回复: 23
收起左侧

[其他综合] 开源一个单片机自动化中文取模小工具

[复制链接]
发表于 2022-7-12 10:14 | 显示全部楼层 |阅读模式
本帖最后由 cdhigh 于 2022-7-16 18:19 编辑

我比较懒,工具能做的我就不会手工去做~
这个工具是我在中文化M328V6/M328V7过程中为了方便而随手写的,方便代码修改后重新生成字库,可以一键生成单片机汉字字库

功能(点击按钮自动按顺序完成这三个步骤):
1. 自动提取中文字符串
2. 自动取模
3. 自动生成字库文件(包括纵向取模和横向取模字库)

有了这个工具,每次修改代码后如果有中文字符串变化,只需要再点击一次按钮,然后就可以重新编译了,根本不需要重复繁琐的取模过程。
当然,因为其定制化很高,所以不能直接拿来就用,我也不想再费精力将其写成更通用的工具。
现在开源出来,有单片机开发中文显示的需求可以看看,稍作修改就可以应用到其他项目,如果有心人将其完善成比较通用的工具,也欢迎,修改后能发我一份就更好,不发也不会抱怨。
当然,要修改这个工具需要你有一些python基础
zhtools.png

话说为何m328v6/m328v7为何那么方便的汉化就是因为AVR gcc编译器的一个限制:其FLASH字符串必须额外定义,否则会占有内存空间
对比如下:
字符串输出函数定义,两个编译器函数声明都一样,实现有一点点区别(gcc需要使用 pgm_read_byte()):
void drawText(const char* txt) {
    ....
}


ICCAVR编译器环境下的调用(常量字符串自动被当成FLASH字符串,不会占用内存空间):
drawText("我是FLASH字符串");

AVR GCC编译器环境下的调用:
drawText("我是RAM字符串");  //这个字符串会被放到内存,占有内存空间

const char r_txt[] PROGMEM = "我是FLASH字符串";
drawText(r_txt);      //这个字符串才被当作FLASH字符串,不会占用内存空间

之前开始用的时候还觉得比较麻烦,但在中文化时发现好爽啊,就只需要翻译一个文件里面的字符串就行了,而且编译时很方便就能切换编译哪个语种版本
要实现运行时切换语种也不需要费多大事,但是为了运行效率和空间效率,就不做运行时切换了。
==============================================

压缩包内已经包含了新宋体14x14字体和特制宋体8x8字体的bdf文件
游客,如果您要查看本帖隐藏内容请回复








发表于 2022-7-12 19:36 | 显示全部楼层
谢谢分享,收藏备用。
发表于 2022-7-12 21:21 | 显示全部楼层
谢谢分享,收藏备用。
发表于 2022-7-14 09:16 | 显示全部楼层
谢谢分享,收藏备用。
发表于 2022-7-14 14:42 | 显示全部楼层
谢谢分享!!

发表于 2022-7-14 21:43 | 显示全部楼层

谢谢分享,收藏备用。
发表于 2022-7-14 22:04 | 显示全部楼层

谢谢分享,谢谢分享。
发表于 2022-7-15 01:01 | 显示全部楼层
哇!
這在古早PC台式機上自己寫個QBASIC擷取程序自動產生庫
再讓單片機去讀
要RUN單片機跟座機軟件一趟
可麻煩多了
還好當年單片機51已有64KB 版本還擠得下

現在方便多了
发表于 2022-7-15 13:51 | 显示全部楼层
谢谢分享,收藏备用。
发表于 2022-7-16 02:22 | 显示全部楼层
好工具  谢谢分享

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-24 23:04 , Processed in 0.070475 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表