uCGUI 按鍵窗口切換機制(更新篇)


在之前文章中,講述了一個低內存使用量的的窗口切換機制。有人會問,低內存使用量是多低呢,我這里舉個例子。我有一個項目中使用到本切換機制,128*64的單色屏,初步計算有105個窗口(后面還會增加),總內存使用量(包括任務棧)=105*3*4(窗口樹) + 1024(公共buff) + 512(任務棧) + 1024*3(uCGUI動態內存) = 6k左右。從這個數字可以看出內存算是使用比較少的了。畢竟有100多個窗口,我在設計時也就只做了10多個窗口,這100多個窗口就是由10多個窗口大量復用組合得到的。

         當然本切換機制只是給讀者提供一個靈感,不一定就按筆者的框架來做項目,可以只使用這種思想打造更優秀的架構。畢竟項目千差萬別,本架構更適合使用按鍵來切換窗口的用戶,低內存的用戶,窗口深度級深及多的用戶。

         在前一篇文章中有讀者留言,問了很多問題,之前的窗口確實有很多不完善的地方。這里我直把以前的工程進行升級,主要完善原工程中缺失部分。更新內容主要如下:

1,增加高級窗口(突發事件窗口)切換代碼。

2,增加多語言支持接口。

3,接口變更,去除之前繁瑣的外部調用接口。

 

         這里還要講點本機制的特點,本切換機制只進行在一個任務中,也就類似一個大while(1)循環,這樣的操作有他特有的優點,第1可以共有一個大公共buff而不用擔心內存互斥問題。這時一定會有朋友會問,外部任務調用時如何操作呢?這里我把供外部調用的接口統稱為“外部調用接口”。“外部調用接口”我之前的處理方式是,外部任務調用gui內部函數時,把gui內部的函數指針及參數部分同時存入隊列中,直到gui運行到讀隊列時,運行這些函數。這樣就可以很好解決互斥問題。后來我發現,這種方式過於繁瑣,以至於有大量的函數需要進行注冊。現在做了一定修改,只把要傳遞的參數保存在中間變量中,gui運行時查詢是否有參數變更,如果有運行變更部分的代碼。這樣大大簡化了程序復雜度,也更容易理解。

         有人可能會擔心這窗口機制的移植性問題。這里我要說下,本窗口我在vc,linux,ucos-ii,ucgui-iii等平台都進行過使用,表現都非常良好,做到了一套代碼多平台使用。

         中文顯示,我只做了簡單演示,只把三個窗口使用了中文。

   工程鏈接:

    http://pan.baidu.com/s/1hqoZgAo

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM