找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1789|回复: 5
打印 上一主题 下一主题
收起左侧

容易忽略!用KEIL编码汉字也会有BUG

[复制链接]
跳转到指定楼层
楼主
有时你以为不会有错,但是错误往往出现在意料之外。
那天,用MCU的串口向触摸屏发送汉字字符串,但是在发送某个字符串的时候想要显示的东西总是不能在触屏上正常显示,发送另外的字符串却能正常显示,这就奇了怪了,那么问题在哪里呢?
故事是这样的:
原本计划在触摸屏上的文本控件上显示压力的报警信息。当传感器检查到压力异常时用串口向触屏发送字符串:压力过高,于是用KEIL编了一句指令代码:”sendstring(“t9.txt=\”压力过高\””);”
不过,酒醉的故事开始了。载入程序测试时,在触屏上死活不能正常显示“压力过高”这个字符串,干脆直接就没有反应。于是就纳闷了,代码检查了又检查,并且与其他类似的代码比对,没错误啊!几分钟后,于是决定试试改变一下字符串的内容,改为:“sendstring(“t9.txt=\”已选双发\””);”,surprise,这个代码居然能在触摸屏上的t9文本控件上正常显示“已选双发”这个字符。
同样的代码,只是里面的字符串内容不同,就有那么大的差异,这可就真的见了鬼了。
于是打开串口助手,倒要看看哪里见了鬼。


经分析,原来在用KEIL进行程序编码的时候,对汉字字符串的处理出现了BUG,对某些汉字不能正常编码。经过实践,对ASCII码的字符串(英文、数字、符号等)KEIL基本能够正确处理,但是对于汉字或者其他字符却不能保证每次都正确,这点需要开发者注意,在使用的时候避开可能会导致乱码的汉字字符,另外串口助手是个调试的好东西。
如果你觉得有帮助,点赞、转发、赞赏都是非常好的鼓励,如果有控制器、电路板、仪器、软件开发需要可联系图上的方式。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:108573 发表于 2021-1-1 08:23 | 只看该作者
这怎么解决?是不是只能换个名词了
回复

使用道具 举报

板凳
ID:143584 发表于 2021-1-1 09:15 | 只看该作者
安装一个补丁就行,或在不支持的汉字前面加斜杠,是正斜杠还是反斜杠,忘了
回复

使用道具 举报

地板
ID:390416 发表于 2021-1-1 09:52 | 只看该作者
keil软件不能正常编译某些汉字。比如0xC8FD的“三”、0xC9FD的“升”。导致LCD12864不能正常显示。凡是ASCII值的低字节是0xFD的汉字都不能正常编译。
解决办法是:汉字后面跟一个转义字符 \xfd。例如Buffer[12]= {"一二三\xfd四五};
以下71个字,都需要加\xfd:
褒饼昌除待谍洱俘庚过糊积箭烬君魁例笼慢谬凝琵讫驱三升数她听妄锡淆旋妖引育札正铸佚冽邶
埤荦蔟摭啐帻猃恺泯潺妪纨琮椠辇挲臊忑睚铨稞瘕颀螨簖酏觚鳊鼾
GB2312的地址范围是0xA1A0~0xF7FF,
大家有需要可以参考我在51hei发的贴子
LCD12864中文资料包 http://www.51hei.com/bbs/dpj-200462-1.html
回复

使用道具 举报

5#
ID:390416 发表于 2021-1-1 09:53 | 只看该作者
神出没 发表于 2021-1-1 08:23
这怎么解决?是不是只能换个名词了

看我的这个贴子,LCD12864手册里面提过这个问题的 LCD12864中文资料包 http://www.51hei.com/bbs/dpj-200462-1.html
回复

使用道具 举报

6#
ID:16255 发表于 2021-1-2 12:33 | 只看该作者
打一个补丁就解决问题了。
http://www.51hei.com/ziliao/file/0xfd.rar
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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