項目流程 弄清需求(需要完成什麼) 設計框架(怎麼實現需求) 編寫代碼(怎麼通過代碼設計) 測試 弄清需求 (1)上電,LCD顯示一副圖片 (2)根據配置文件,決定停留當前界面還是自動顯示下一張 (3)點擊一下,出現一個對話框(手動顯示,自動顯示) (4)上放大,下縮小,左右滑動切換圖片 (5)左右 ...
項目流程
- 弄清需求(需要完成什麼)
- 設計框架(怎麼實現需求)
- 編寫代碼(怎麼通過代碼設計)
- 測試
弄清需求
(1)上電,LCD顯示一副圖片
(2)根據配置文件,決定停留當前界面還是自動顯示下一張
(3)點擊一下,出現一個對話框(手動顯示,自動顯示)
(4)上放大,下縮小,左右滑動切換圖片
(5)左右滑動很快時,切換上上/下下一張
設計框架
通過兩部分來完成:
1)輸入進程(如下圖所示)
創建3個線程:觸摸線程、按鍵線程、主控線程
-觸摸線程:不停調用tslib,當有數據後,封裝成事件,上報給主控線程
-按鍵線程:沒按下時休眠,按下時便產生中斷,封裝好上報給主控線程
-主控線程:收到數據後,用socket發送給顯示進程
2)顯示進程(如下圖所示)
創建7個線程
-socket接收線程:
用來接收socket,比如收到左劃的數據,便通知事件到主控線程
-主控線程:
根據得到的事件,然後調用驅動通過DMA將準備好的數據(位於某個記憶體上)放到顯存地址framebuffer上.
-其它5個進程(當前,左,右,上,下):
比如當主控顯示完一個圖片後,則開始準備好(解壓上幅圖片/下幅圖片,放大,縮小等數據),方便主控線程直接調用,從而提高速度.
圖片數據是通過應用程式用庫libjpeg解壓(將jpeg格式轉換為LCD顯示格式),使用mmap()函數傳到某個記憶體上.
當前線程的意義:
之前我們說過,當點擊一下,會出現一個對話框,若退出對話框後, 便會通知當前線程,從而顯示當前圖片。
對話框:
按鈕以及邊框直接做成一個個圖片,調用對話框時,直接覆蓋LCD顯存上即可
總結:
使用多線程好處在於:每個模塊獨立起來,方便以後修改,而且全局變數在多線程里可以共用.
未完待續,接下來下章來使LCD顯示字元與漢字