中國電子科技集團第41研究所,蚌埠依愛消防電子有限公司 盧志強
某型號產(chǎn)品使用的主控MCU為8051單片機,為增大程序空間使用了復雜的BANK技術(shù),基本滿足了現(xiàn)有程序需求。然而,隨著用戶的使用,對產(chǎn)品功能不斷提出新的要求,有些功能比較耗費程序空間,殘余的一點程序空間就又捉襟見肘了。因此需要考慮進一步優(yōu)化程序空間,而又有一些用戶提出原有的漢字庫太小,希望增大字庫,起碼包括一級字庫的內(nèi)容。通過研究,決定將存放在程序空間中的字庫移到存放編程數(shù)據(jù)的芯片空余扇區(qū)中,將舊字庫與一級字庫融合。
在完成此方案的過程中遇到了幾個問題,將問題和解決方案總結(jié)如下:
因為舊字庫是經(jīng)過了用戶長期使用而積累下的常用字,既包含了大量的一級字庫,也根據(jù)實際應用情況,包含了部分一級字庫以外的漢字,而要在字庫中挑選這些漢字又比較繁瑣,因此設計了一款計算機軟件,通過自動讀取原字庫和一級字庫,自動生成所需全部漢字庫索引(按區(qū)位碼排序)和漢字點陣數(shù)據(jù)數(shù)組。
因為使用keil靜態(tài)數(shù)組編譯生成字庫需要較大程序空間(大于64K),整體編譯不能通過,只能另辟蹊徑,采用將字庫分成多個數(shù)組,并分割成兩個工程,分別編譯,然后用superpro燒錄工具拼接的方法生成字庫燒錄文件。
因為需要切換外部74HC373地址來讀取另一片存儲芯片中某一頁的字庫數(shù)據(jù),在讀取漢字和漢字區(qū)位碼(幫助菜單中)時發(fā)現(xiàn)液晶屏顯示漢字時速度較慢,在優(yōu)化算法后顯示速度已與改動前一致。下文將對此方法進行詳細論述。
本產(chǎn)品的字庫查找主要是通過簡單的區(qū)位碼索引,對輸入的漢字區(qū)位碼以二分法進行折半查找對應的漢字庫點陣數(shù)組地址,然后到對應地址中讀取漢字點陣數(shù)據(jù),送給液晶驅(qū)動程序控制漢字顯示。
在2.3中提到,字庫遷移后顯示漢字時速度較慢,這是從內(nèi)部存取改為外部存取的硬件設計變化引起的,需要通過算法對軟件代碼進行優(yōu)化,重點是優(yōu)化漢字庫查找和存取的過程。
優(yōu)化前的代碼流程圖,見圖1。
圖1
對應的C語言核心代碼:
優(yōu)化后的代碼流程圖,見圖2。
圖2
通過優(yōu)化,刷新一屏漢字(以100字進行測試)所需的時間約提高了2倍,顯示流暢,與字庫遷移前的速度基本一致,完全不影響用戶體驗。
通過以上方案的實施,成功將字庫和字庫索引遷移到外部flash空間中,最終增加到3773個漢字(原字庫為1285個漢字),并且顯示速度與字庫放在程序空間中時基本一致,完全不影響用戶體驗。與原程序相比,直接節(jié)省了空間約25K,新字庫加索引共約73K,相當于在滿足新字庫的要求下節(jié)省程序空間約73K。