標題: 容易忽略!用KEIL編碼漢字也會有BUG [打印本頁]
作者: yonko 時間: 2020-12-31 20:28
標題: 容易忽略!用KEIL編碼漢字也會有BUG
有時你以為不會有錯,但是錯誤往往出現(xiàn)在意料之外。
那天,用MCU的串口向觸摸屏發(fā)送漢字字符串,但是在發(fā)送某個字符串的時候想要顯示的東西總是不能在觸屏上正常顯示,發(fā)送另外的字符串卻能正常顯示,這就奇了怪了,那么問題在哪里呢?
故事是這樣的:
原本計劃在觸摸屏上的文本控件上顯示壓力的報警信息。當傳感器檢查到壓力異常時用串口向觸屏發(fā)送字符串:壓力過高,于是用KEIL編了一句指令代碼:”sendstring(“t9.txt=\”壓力過高\””);”
不過,酒醉的故事開始了。載入程序測試時,在觸屏上死活不能正常顯示“壓力過高”這個字符串,干脆直接就沒有反應。于是就納悶了,代碼檢查了又檢查,并且與其他類似的代碼比對,沒錯誤。追昼姾,于是決定試試改變一下字符串的內容,改為:“sendstring(“t9.txt=\”已選雙發(fā)\””);”,surprise,這個代碼居然能在觸摸屏上的t9文本控件上正常顯示“已選雙發(fā)”這個字符。
同樣的代碼,只是里面的字符串內容不同,就有那么大的差異,這可就真的見了鬼了。
于是打開串口助手,倒要看看哪里見了鬼。
1.png (416.82 KB, 下載次數(shù): 43)
下載附件
2020-12-31 20:27 上傳
2.png (466.96 KB, 下載次數(shù): 44)
下載附件
2020-12-31 20:28 上傳
經(jīng)分析,原來在用KEIL進行程序編碼的時候,對漢字字符串的處理出現(xiàn)了BUG,對某些漢字不能正常編碼。經(jīng)過實踐,對ASCII碼的字符串(英文、數(shù)字、符號等)KEIL基本能夠正確處理,但是對于漢字或者其他字符卻不能保證每次都正確,這點需要開發(fā)者注意,在使用的時候避開可能會導致亂碼的漢字字符,另外串口助手是個調試的好東西。
如果你覺得有幫助,點贊、轉發(fā)、贊賞都是非常好的鼓勵,如果有控制器、電路板、儀器、軟件開發(fā)需要可聯(lián)系圖上的方式。
作者: 神出沒 時間: 2021-1-1 08:23
這怎么解決?是不是只能換個名詞了
作者: lwhmgp 時間: 2021-1-1 09:15
安裝一個補丁就行,或在不支持的漢字前面加斜杠,是正斜杠還是反斜杠,忘了
作者: 人人學會單片機 時間: 2021-1-1 09:52
keil軟件不能正常編譯某些漢字。比如0xC8FD的“三”、0xC9FD的“升”。導致LCD12864不能正常顯示。凡是ASCII值的低字節(jié)是0xFD的漢字都不能正常編譯。
解決辦法是:漢字后面跟一個轉義字符 \xfd。例如Buffer[12]= {"一二三\xfd四五};
以下71個字,都需要加\xfd:
褒餅昌除待諜洱俘庚過糊積箭燼君魁例籠慢謬凝琵訖驅三升數(shù)她聽妄錫淆旋妖引育札正鑄佚冽邶
埤犖蔟摭啐幘獫愷泯潺嫗紈琮槧輦挲臊忑睚銓稞瘕頎螨籪酏觚鳊鼾
GB2312的地址范圍是0xA1A0~0xF7FF,
大家有需要可以參考我在51hei發(fā)的貼子
LCD12864中文資料包 http://www.torrancerestoration.com/bbs/dpj-200462-1.html
作者: 人人學會單片機 時間: 2021-1-1 09:53
看我的這個貼子,LCD12864手冊里面提過這個問題的 LCD12864中文資料包 http://www.torrancerestoration.com/bbs/dpj-200462-1.html
作者: mengsiu 時間: 2021-1-2 12:33
打一個補丁就解決問題了。
http://www.torrancerestoration.com/ziliao/file/0xfd.rar
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |