本期教程開始帶領大家了解一下STemWin的基本知識,其實確切的講應該叫emWin基礎知識,由於教程使用的開發板是ST的微控制器,所以就把名字統一命名成STemWin(為什么叫STemWin,在下面會有詳細的講解)。
1.1 STemWin,emWin,μCGUI之間的關系
1.2 SEGGER公司介紹
1.3 STemWin介紹
1.4 STM32F103和407跑STemWin性能測試
1.5 STemWin論壇
1.6 總結
1.1 STemWin,emWin,μCGUI之間的關系
這個放在最開頭進行說明,因為很多的初學者比較的迷惑。
對於一些剛學GUI的用戶來說,知道μCGUI的比較多,而不知道所謂的emWin或者STemWin。這個並不奇怪,主要是因為大部分人只知道SEGGER公司的做的JLINK,而不知道他們還有RTOS和相關的中間件(中間件的意思就是基於RTOS的文件系統,GUI,USB主機和設備協議棧等)。
1.1.1 μCGUI在國內比較火的原因
μCGUI在國內前幾年比較火的原因有三點:
l 一個是μCOS-II在國內的推廣,自從Micrum公司出的那本《嵌入式實時操作系統μCOS-II》發布之后,國內關於μCOS-II的資料就是普天蓋起,再加上各種培訓機構和開發板的推廣,μCOS-II就在國內火起來了。μCOS-II火的同時,它配套的中間件,特別是μCGUI就跟着在國內火了起來。
l 前幾年國內有一個μCGUI的論壇,這個論壇在國內的μCGUI方面應該算是做得最好的,特別是那個站長在μCGUI方面的研究,這位站長對於μCGUI在國內的發展功不可沒。
l 還有一個原因就是μCGUI是帶有源碼的,很多時候可以通過修改部分的源碼實現一些特殊的功能,現在網上流傳的μCGUI的源碼已經不知道經過多少人的手被修改過,最原始的的代碼已經在官網上面找不到了。
1.1.2 emWin和μCGUI的關系
首先要明白,這兩個GUI是一個東西。最初這個GUI就是SEGGER公司的,然后以什么的方式授權給μCGUI就不清楚了。現在SEGGER公司是這個GUI的主要推動者,已經將其授權給了多個芯片生產廠家。
1.1.3 STemWin和emWin的關系
STemWin是SEGGER公司授權給ST(意法半導體)的。使用ST芯片的用戶可以免費使用STemWin。其實不光授權給了ST,還有NXP,Energy Micro等。凡是使用這些芯片廠商生產的處理器都可以免費的使用emWin。但是出於一定的保護措施,使用STemWin的庫是不能用在其它芯片廠商的處理器上面的。因為在工程初始化STemWin前要使能CRC校驗。如果沒有使能,STemWin是啟動不起來的。KEIL MDK的安裝目錄里面也帶有emWin軟件包,這個軟件包也不是可以直接使用的,用戶需要給KEIL MDK注冊RL-ARM才可以使用。
這里STemWin還針對ST的微控制器做了專門的優化,比如在使用ST的F4XX微控制器帶FPU的芯片時,STemWin在需要浮點處理的地方專門做了優化。
1.1.4 emWin5.xx版本和以前版本的不同
emWin發展到5.0版本以后已經產生了很大的更新,特別是底層驅動方面。emWin5.xx版本向下完全的兼容低版本,當然包括μCGUI5.xx以下的版本,也就說如果用戶有在μCGUI5.xx以下版本建立的工程,完全可以用在高版本上面(條件是沒有修改過源碼)。這里不建議初學者修改源代碼,修改過后會破壞現有的機制。在以后的使用中會養成不好的習慣,只要某些功能無法實現就去修改源碼,隨着修改的增多會嚴重的破壞現有的機制。
emWin5.xx以后的版本只有庫,沒有源碼。對於一些想研究源碼的,可以看早期的版本,了解一下通訊機制。不過對於大多數從應用角度出發的,完全沒有必要學習源碼,源碼內容太多。對於一些無法實現的功能,在emWin5.xx上面得到了很大的改善,基本不需要修改源碼。如果通過各種方法實在無法實現,完全可以使用emWin支持的用戶控件設計方法做一個符合要求的。
1.2 SEGGER公司介紹
SEGGER公司應該算是一家老牌的調試工具以及RTOS及中間件的生產商。SEGGER公司成立於1997年,到現在的2014年,有差不多17年的歷史了,這家公司主要有兩個office,一個是在德國的Hilden,另個在美國的 Massachusetts。官網還有一個他們工作地方的照片,看着很不錯,我這里也把這個照片貼上。
SEGGER公司的產品主要有三個方向,分別如下:
1.2.1 RTOS及其中間件
SEGGER公司的RTOS是embOS,在國內知道的人可能比較少。SEGGER做的embOS和中間件都是以庫的形式供用戶下載的,除非購買了使用權。產品主要如下:
l embOS (Real Time Operating System)
l embOS/IP (TCP/IP Stack)
l emWin (Graphic Software & GUI)
l emFile (File System)
l emUSB Device (USB Device Stack)
l emUSB Host (USB Host Stack)
l emModbus(Modbus Stack)
emModbus是今年(2014年)剛剛發布的。
1.2.2 J-Link 調試工具
J-Link應該大家都不陌生,它是有SEGGER公司設計的。具體的J-Link產品有好幾款,具體如下:
l J - Link PRO
l J - Link ULTRA+
l J - Link PLUS
l J - Link
l J - Trace Cortex-M3
l J - Trace ARM
1.2.3 Production Programmers
這個工具在國內用的比較少,主要如下幾款產品:
l Flasher ARM
l Flasher RX
l Flasher STM8
l Flasher ST7
l Flasher 5
l Flasher 5 PRO
上面說的這三項應該算是SEGGER公司的主營產品,更詳細的可以上面他們的官網www.segger.com
進行了解。
1.3 STemWin介紹
emWin5.xx版本設計出來的界面還是非常漂亮的,先貼幾個相關的設計圖片,讓大家有一些感官的認識。
1.3.1 STemWin設計界面
l 第一幅是官方設計的圖片
整體來說,這些圖片還是非常漂亮的,不過這些界面不是用專門的控件顯示出來的,使用的2D繪圖配合內存設備管理實現的。
l 下面的是在STM32-V5開發板上面實現的界面
總的來說這些界面還是非常漂亮的,關於STM32-V5開發板更詳細的資料可以看如下兩個地址:
http://bbs.armfly.com/read.php?tid=1285
http://bbs.armfly.com/read.php?tid=1139
1.3.2 目標系統(硬件)
目標系統必須具有:
l 一個CPU(8/16/32/64位)
l 一個具有最小內存的RAM和ROM
l 一個完整圖形顯示器 (任何類型和任何分辨率)
存儲器要求取決於使用的是軟件的哪部分以及目標編譯器的效率。因此不可能指定精確的值,但是以下值適用於典型的系統。
小系統 (無窗口管理器)
l RAM:100字節
l 堆棧:600字節
l ROM:10-25 kb(取決於所使用的功能)
大系統 (包含窗口管理器和小工具)
l RAM:2-6 kb(取決於所需的窗口數)
l 堆棧:1200-1800字節 (取決於所使用的功能)
l ROM:30-60 kb(取決於所使用的功能)
請注意,如果應用程序使用了很多字體,則對ROM的要求會提高。上述所有值都是粗略估算值,不保證能正常使用。
1.3.3 特性
emWin設計用於提供高效且獨立於處理器和顯示控制器的圖形用戶界面,用於任何使用圖形顯示進行操作的應用。它與單任務和多任務環境、專用操作系統或具有任何商業RTOS兼容,emWin的發貨形式為C語言源代碼。它可適用於任何尺寸的、具有任何顯示控制器和CPU的物理和虛擬顯示器。其特性包括:
一般特性
l 支持使用任何控制器的任何 (單色、灰度或彩色)顯示器 (如果有正確的驅動)。
l 在較小顯示器上無顯示控制器也可運行。
l 使用配置宏可支持任何接口。
l 顯示尺寸可配置。
l 可在顯示器上的任何點 (而不僅僅是在偶數位字節地址)上寫入字符和位圖。
l 已針對尺寸和速度優化了各種例程。
l 利用編譯時間切換可進行不同優化。
l 對於較慢的顯示控制器,可在存儲器中緩存顯示,將存取操作減到最少,從而獲得非常高的速度。
l 結構清晰。
l 支持虛擬顯示;虛擬顯示可大於實際顯示。
圖形庫
l 支持不同色深的位圖。
l 可使用位圖轉換器。
l 絕對無浮點使用。
l 快速線/點繪制 (不使用浮點)。
l 圓形/多邊形繪制非常快速。
l 不同的繪圖模式。
字體
l 基本軟件配備多種不同的字體:4*6、6*8、6*9、8*8、8*9、8*16、8*17、8*18、24*32以及像素高度為8、10、13、16的比例字體。
l 可以定義新的字體並只需簡單鏈接。
l 只有應用程序使用的字體才實際鏈接到生成的可執行程序,從而使ROM使用最小。
l 字體可分別在X和Y方向完全縮放。
l 可使用字體轉換器;主機系統 (即Microsoft Windows)上有的任何字體都可以轉換。
字符串/值輸出例程
l 例程可以十進制、二進制、十六進制、任何字體形式顯示值。
l 例程可以十進制、二進制、十六進制、任何字體形式編輯值。
窗口管理器(WM)
l 完整的窗口管理操作,包括裁剪。窗口的客戶區以外的區域不可能被覆蓋。
l 窗口可以移動和調整大小。
l 支持回調例程 (可選擇是否使用)。
l WM使用最小的RAM(每個窗口大約50字節)。
PC界面外觀的可選小工具
l 提供各種小工具 (窗口對象,也稱為控件)。它們通常自動操作並且簡單易用。
支持觸摸屏和鼠標
l 對於按鈕小工具等窗口對象,emWin提供觸摸屏和鼠標支持。
PC工具
l 模擬脈沖查看器。
l 位圖轉換器。
l 字體轉換器。
1.3.4 RTOS對STemWin多任務的支持
基本常見的RTOS都支持STemWin的多任務,移植起來也比較的簡單,下面這些是官方提供好的移植。
1.3.5 STemWin基本的內存需要
|
|
Example |
Hello world |
Window application |
| ROM |
GUI core |
5.9 kB |
43 kB |
|
|
Fonts |
1.8 kB |
12.5 kB |
|
|
Application |
38 B |
2.7 kB |
|
|
Startup code |
300 B |
300 B |
|
|
Library |
0.1 kB |
1.5 kB |
|
|
Total |
8.1 kB |
60 kB |
| ROM |
GUI core |
62 B |
5.2 kB |
|
|
Application |
- |
40 B |
|
|
Stack |
272 B |
1.4 kB |
|
|
Total |
334 B |
6.6 kB |
這個只是官方提供的基本數據,僅供大家參考。具體還要看實際應用。
1.3.6 STemWin當前支持的控件
由於emWin在不斷的更新當中,這里是當前支持的大部分控件,但不是全部。
1.4 STM32F103和407跑STemWin性能測試
以前論壇上以及群里面的一些客戶對STM32F103和407跑STemWin持懷疑態度,覺得跑不起來,或者說實時性不行,刷屏比較慢,這里我專門的做了一些測試。
1.4.1 刷色塊
l 測試F4驅動RA8875的7寸800*480分辨率的屏。
優化底層的情況下,刷整個屏
沒有優化底層的情況下,刷整個屏
通過上面的測試,有沒有看到差距,底層沒有經過優化的要620ms,而優化以后的刷整個屏只要25ms,
620 / 25 = 24.8倍,能差出這么多來,可見經過優化和沒有優化的差距之大。由於RA8875有刷色塊的指令,這里再用3.0寸的測試一下(3.0寸的沒有專門的刷色塊指令)。
l 測試F4驅動SPFD5420的3寸400*240分辨率的屏。
優化底層的情況下,刷整個屏
沒有優化底層的情況下,刷這個屏
有沒有看到差距,這里差出10倍來。
1.4.2 刷控件
l 測試F4驅動RA8875的7寸800*480分辨率的屏。
這里刷一個如下圖所示樣子的控件,大小800*480
優化底層的情況下,刷整個控件
沒有優化底層的情況下,刷整個控件
有沒有看到差距。
l 測試F4驅動SPFD5420的3寸400*240分辨率的屏。
現在用3.0的屏刷控件,優化底層的情況下,刷整個控件
沒有優化底層的情況下,刷整個控件
通過上面的比較,大家有沒有看到差距,是否還對用F1,F4跑emWin界面存在疑慮?對於刷圖片,本身STM32F1,STM32F4刷圖片的效果就比較差,這里就不做測試了。通過這個測試也說明了很重要的一點,那就是優化底層驅動的重要性。
1.5 STemWin論壇
自從國內的uCGUI論壇關閉以后,這方面比較好的論壇就很少了,論壇對於STemWin的發展也很重要。針對STemWin,我們自己建立的論壇:http://bbs.armfly.com/thread.php?fid=12。有興趣的可以在論壇跟大家探討相關的應用。
SEGGER官方也有自己的emWin論壇,地址是:http://forum.segger.com/。
1.6 總結
關於STemWin的介紹就跟大家說這么多,更詳細的可以上我們的論壇進一步討論。還有一點要說明的就是SEGGER公司的所有軟件都是收費的,收費標准看這里:http://www.segger.com/pricing.html。



















