【STM32F429】第24章 ThreadX GUIX波形控制元件Line Chart
最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429
第24章 ThreadX GUIX波形控制元件Line Chart
本章節為大家講解GUIX波形控制元件Line Chart的使用,可以方便的用來顯示感測器波形資料。
24.1初學者重要提示
24.2 GUIX Studio波形控制元件Line Chart每個引數的含義
24.3 GUIX Studio設定視窗回撥事件
24.4 GUIX回撥事件處理
24.5 實驗例程設計框架
24.6 實驗例程
24.7 總結
24.1 初學者重要提示
- 務必看第11章學習GUIX Studio的使用方法和第12章學習GUIX Studio生成的程式碼移植到硬體平臺的方法。
- ThreadX GUIX的Line Chart波形速度較快,有需要快速波形展示的場合也適用。
- 如果Line Chart控制元件波形資料寬度設定較大,會非常耗系統性能,從而導致波形重新整理較慢。
- GUIX Studio上沒法展示波形重新整理,需要在模擬器或者板子上實際執行檢視。
- Line Chart控制元件可以顯示座標軸,但不支援座標軸值,大家可以自己繪製新增。
24.2 GUIX Studio控制元件每個引數的含義
GUIX Studio中複選框控制元件的引數如下:
- Widget Type
控制元件型別。
- Windget Name
控制元件名。
- Widget Id
控制元件ID
- User Data
控制元件使用者資料,通過巨集定義GX_WIDGET_USER_DATA使能。
只是個簡單的int型變數。
- Left
- Top
視窗左上角位置。
- Width
- Height
視窗的寬和高。
- Border
邊界效果
- Transparent
設定透明。
對應建立標誌GX_STYLE_TRANSPARENT。
- Draw Selected
預設顯示選中狀態。
對應建立標誌GX_STYLE_DRAW_SELECTED。
- Enabled
使能視窗,允許控制元件接收使用者輸入事件和產生輸出訊號。
對應建立標誌GX_STYLE_ENABLED。
- Accepts Focus
使能聚焦,對應標誌GX_STATUS_ACCEPTS_FOCUS。
- Runtime Allocate
使能執行時動態申請和釋放記憶體。
- Normal fill
正常狀態填充色
- Seclected fill
選中狀態填充色
- Disable fill
禁止狀態填充色
- Draw Function
重繪函式
- Event Functiong
事件處理函式
- Event Functiong
事件處理函式
- Wallpaper
設定背景圖
- Title Wallpaper
視窗將平鋪所有分配的背景圖到視窗客戶端。
對應巨集定義GX_STYLE_TILE_WALLPAPER。
- Data Min Value
設定波形繪製的最小值
- Data Max Value
設定波形繪製的最大值
- Left Margin
波形區在Line Chart控制元件裡面距左邊界距離,單位畫素。
- Top Margin
波形區在Line Chart控制元件裡面距上邊界距離,單位畫素。
- Right Margin
波形區在Line Chart控制元件裡面距右邊界距離,單位畫素。
- Buttom Margin
波形區在Line Chart控制元件裡面距底邊界距離,單位畫素。
- Num Data Points
資料點數。
- Axis Line Width
數軸線寬度。
- Data Line Width
波形線寬度。
- Axis Color
數軸顏色。
- Data Line Color
波形線顏色。
24.3 GUIX Studio設定視窗回撥事件
GUIX Studio的設定方法與第11章一樣,我們這裡把控制元件的位置和大小做了調整,併為window視窗建立一個回撥函式。
新調整的介面效果如下:
24.3.1 視窗事件回撥設定
下面我們為視窗控制元件設定一個Event Function,此功能是視窗的事件回撥函式。在這個回撥函式裡面,大家可以處理各種事件。
這裡為Event Function設定的回撥函式名為_cbEventWindow,然後就可以使用GUIX Studio生成新的程式碼。生成的程式碼移植到硬體平臺的方法看第12章即可。
24.3.2 Line Chart控制元件ID設定
注意Line Chart的ID設定GUIX_ID_Checkbox0,後面要用到:
24.3.3 Line Chart控制元件基礎設定
主要是Line Chart控制元件的波形區,數軸寬度和波形寬度設定:
這幾個配置最常用,具體含義在本章26.2小節已經有說明。注意這裡的Axis Line Width數軸寬度設定為0的話,將不展示數軸,如果Data Line Width資料寬度大小設定為0,也將不展示資料波形。
另外資料寬度設定較大,會非常耗系統性能,導致波形重新整理較慢。
24.4 GUIX回撥事件處理
在GUIX Studio上設定好事件回撥函式名後,剩下就是在程式裡面實現事件回撥的處理,這裡把實現方法為大家做個說明。
24.4.1 視窗事件回撥建立定時器並週期性更新控制元件
視窗的Event Function事件回撥函式實現控制元件週期性更新的框架如下:
UINT _cbEventWindow(GX_WINDOW *widget, GX_EVENT *event_ptr) { int i; switch (event_ptr->gx_event_type) { /* 控制元件顯示事件 */ case GX_EVENT_SHOW: /* 啟動一個GUIX定時器 */ gx_system_timer_start((GX_WIDGET *)widget, GUI_ID_Timer0, 1, 20); /* 預設事件處理 */ gx_window_event_process(widget, event_ptr); break; /* 定時器時間溢位事件*/ case GX_EVENT_TIMER: if (event_ptr->gx_event_payload.gx_event_timer_id == GUI_ID_Timer0) { 使用者可以在這裡呼叫控制元件的API來更新控制元件 } break; default: return gx_window_event_process(widget, event_ptr); } return 0; }
這個框架基本是固定的,大家直接呼叫即可,下面舉一個例項來說明使用。
24.4.2 窗口裡面更新Line Chart控制元件例項
例項程式碼如下,本章教程配套例子也是用的這個程式碼:
/* ********************************************************************************************************* * 函 數 名: _cbEventWindow * 功能說明: 視窗window的事件回撥函式 * 形 參: widget 視窗控制代碼 * event_ptr 事件指標 * 返 回 值: 返回0表示成功 ********************************************************************************************************* */ UINT _cbEventWindow(GX_WINDOW *widget, GX_EVENT *event_ptr) { int i; switch (event_ptr->gx_event_type) { /* 控制元件顯示事件 */ case GX_EVENT_SHOW: /* 啟動一個GUIX定時器 */ gx_system_timer_start((GX_WIDGET *)widget, GUI_ID_Timer0, 1, 20); /* 預設事件處理 */ gx_window_event_process(widget, event_ptr); break; /* 定時器時間溢位事件*/ case GX_EVENT_TIMER: if (event_ptr->gx_event_payload.gx_event_timer_id == GUI_ID_Timer0) { for(i = 0; i<400; i++) { chart_data[i] = rand()%100; } /* 更新Line Chart控制元件 */ gx_line_chart_update(&(window.window_GUIX_ID_LineChart0), chart_data, 400); } break; default: return gx_window_event_process(widget, event_ptr); } return 0; }
- gx_system_timer_start
啟動一個週期為20ms的定時器。
- gx_line_chart_update
更新Line Char控制元件。
24.5 實驗例程設計框架
本章例程的重點是GUIX定時器更新波形控制元件Line Chart的實現,任務中專門為視窗設定了一個Event Function事件回撥函式。
24.6 實驗例程
(注,如果是電阻屏,需要做觸控校準,校準方法看本教程附件章節A)
配套例子:
本章節配套了如下兩個例子供大家移植參考:
- V6-2031_GUIX Line Chart
GUIX Studio生成的程式碼在硬體平臺實際執行的工程,含有GCC,IAR,MDK AC5和AC6四個版本工程。
- V6-2032_GUIX Studio Line Chart
GUIX Studio工程模板,設計介面後,生成的檔案可直接新增到MDK,IAR和GCC軟體平臺使用。
實驗目的:
- 本章主要學習Line Chart波形控制元件。
實驗內容:
- 共建立瞭如下幾個任務,通過按下按鍵K1可以通過串列埠列印任務堆疊使用情況
App Task Start任務 :啟動任務,這裡用作BSP驅動包處理。
App Task MspPro任務 :訊息處理,這裡用作LED閃爍。
App Task UserIF任務 :按鍵訊息處理。
App Task GUI任務 :GUI應用任務。
App Task STAT任務 :統計任務。
App Task IDLE任務 :空閒任務。
GUIX System Thread :GUI系統任務。
System Timer Thread任務:系統定時器任務。
實驗效果:
GUIX Studio的介面設計如下:
串列埠列印任務執行情況:
IAR,MDK AC5和AC6工程可以串列埠列印任務執行情況:按開發板的按鍵K1可以列印,波特率 115200,資料位 8,奇偶校驗位無,停止位 1:
Embedded Studio(GCC)平臺的串列埠列印是通過其除錯元件SEGGER RTT做的串列埠列印,速度也非常快,列印效果如下:
展示裡面有亂碼是因為Embedded Studio不支援中文。
24.7 總結
本章節主要為大家講解了Line Chart波形控制元件的繪製方法,大家可以嘗試自己也建立一個波形效果展示。