主頁(http://www.by236.com):基于ARM嵌入式的遠程監控系統設計(2)
OSIntCtxSw()在退出中斷服務函數 OSIntExit()中調用,實現中斷級任務切換.由于是在中斷里調用,所以處理器的寄 存器入棧工作已經做完,就不用作這部分工作了。具體完成的任務;調整棧指針(因為調用 函數會使任務棧結構與系統任務切換時堆棧標準結構不一致),保存當前任務 SP,載入就緒 最高優先級任務的 SP,恢復就緒最高優先級任務的環境變量,中斷返回。這樣就完成了中斷 級任務切換。OSTickISR()系統時鐘節拍中斷服務函數,這是一個周期性中斷,為內核提供時鐘節拍。頻率越高系統負荷越重。其周期的大小決定了內核所能給應用系統提供的最小時 間間隔服務。一般只限于 ms 級(跟 MCU 有關),對于要求更加苛刻的任務需要用戶自己建立中 斷來解決.該函數具體內容:保存寄存器(如果硬件自動完成就可以省略),調 OSIntEnter(), 調用 OSTimeTick(),調用 OSIntExit(),恢復寄存器,中斷返回。 c) OS_CPU_C.C 該文件中共定義了 6 個函數,但是最重要的是 OSTaskStkInit().其他都是對系統內核的擴展時用的.OSTaskStkInit()是在用戶建立任務時系統內部自己調用的,對用戶任務的堆棧 進行初始化。使建立好的進入就緒態任務的堆棧與系統發生中斷并且將環境變量保存完畢時 的棧結構一致。這樣就可以用中斷返回指令使就緒的任務運行起來。 3.2.2與應用相關的代碼 這部分包括兩個文件:OS_CFG.H, INCLUDES.H。 用戶根據自己的應用系統來定制合適 的內核服務功能。OS_CFG.H 來配置內核,用戶根據需要對內核進行定制,留下需要的部 分,去掉不需要的部分,設置系統的基本情況。比如系統可提供的最大任務數量,是否定制 郵箱服務,是否需要系統提供任務掛起功能,是否提供任務優先級動態改變功能等等。 INCLUDES.H 系統頭文件,整個實時系統程序所需要的文件,包括了內核和用戶的頭文件。 3.3用戶圖形接口 雖然 μC/OS-II 操作系統具有很高的實時性,但不像 WINCE、uCLinux 等操作系統那樣 有良好的圖形界面支持。所以,在使用液晶和觸摸屏的情況下需要移植用戶圖形接口程序。這里使用的是 μC/GUI。μC/GUI 是一個軟件模塊集合,通過該模塊可以在我們的嵌入式產品 中加入用戶圖形接口(GUI)。μC/GUI 具有很高的執行效率,并且與處理器和 LCD 控制器相 獨立。該模塊可以工作在單任務或者多任務環境,可以支持不同大小的顯示方式。 通過 μC/GUI 我們可以很方便的在液晶屏繪制圖形和界面。如果需要多種字體支持,必 須自己將相應的字體字庫加入到 μC/GUI 中。為了避免出現亂碼,盡量使用 GB2312 國標字庫。 3.4關于字庫的兼容性問題 我們國內通常使用的漢字字庫是 GB 碼,但國際上使用的是 UNICODE 碼 ,所以如果數據終端使用的是手機、PDA 等移動通信設備,那么在數據發送前必須進行字碼轉換,即 GB 碼 轉換為 UNICODE 碼或者 UNICODE 碼轉換為 GB 碼。由于 GB 碼與 UNICODE 碼在排列組合上沒有任何規律,所以通常字碼轉換的方法就是 查表法。 4結束語 基于 arm9 嵌入式系統的遠程監控系統與以往的監控系統不同,高性能的處理器芯片大 大提高了系統的性能。使監控系統能夠工作在比較惡劣的環境中。并且在設計上充分考慮到 了系統的可擴展性和兼容性問題,實現了本系統與其他系統的無縫連接。以滿足不同工作環 境的需要。
(中國集群通信網 | 責任編輯:陳曉亮) |