钻石会员
主题
帖子
积分11939
阅读权限50
注册时间2012-3-2
最后登录1970-1-1
在线时间 小时
|
本帖最后由 cdhigh 于 2022-7-16 18:19 编辑
我比较懒,工具能做的我就不会手工去做~
这个工具是我在中文化M328V6/M328V7过程中为了方便而随手写的,方便代码修改后重新生成字库,可以一键生成单片机汉字字库。
功能(点击按钮自动按顺序完成这三个步骤):
1. 自动提取中文字符串
2. 自动取模
3. 自动生成字库文件(包括纵向取模和横向取模字库)
有了这个工具,每次修改代码后如果有中文字符串变化,只需要再点击一次按钮,然后就可以重新编译了,根本不需要重复繁琐的取模过程。
当然,因为其定制化很高,所以不能直接拿来就用,我也不想再费精力将其写成更通用的工具。
现在开源出来,有单片机开发中文显示的需求可以看看,稍作修改就可以应用到其他项目,如果有心人将其完善成比较通用的工具,也欢迎,修改后能发我一份就更好,不发也不会抱怨。
当然,要修改这个工具需要你有一些python基础
话说为何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文件
|
|