基于μC/OS-Ⅱ農田信息采集系統的研究與設計
3 農田信息采集系統軟件設計實(shí)現
3.1 μC/OS-Ⅱ嵌入式操作系統在S3CA4B0X芯片上的移植
在嵌入式操作系統應用中,每個(gè)任務(wù)都是相互獨立的,而且會(huì )發(fā)生頻繁的任務(wù)轉換,為了使轉換的任務(wù)能夠返回到原來(lái)的斷點(diǎn),所以必須得把與轉換的任務(wù)運行環(huán)境密切相關(guān)的各種寄存器和變量全部保存起來(lái)。這就是定義構造一個(gè)用戶(hù)任務(wù)堆棧結構,來(lái)保證多任務(wù)嵌入式操作系統的正常運行,這種堆棧結構保存了與各個(gè)轉換的任務(wù)運行環(huán)境密切相關(guān)的所有寄存器變量,而且所有任務(wù)的堆棧結構必須完全一致,這樣才能用統一的任務(wù)切換程序在任務(wù)之間作頻繁的任務(wù)轉換,而且還要求不會(huì )破壞各個(gè)任務(wù)的實(shí)時(shí)運行環(huán)境。因此在建立每一個(gè)新任務(wù)的同時(shí),必須為該任務(wù)分配一定的系統資源,包括一個(gè)任務(wù)棧、一個(gè)任務(wù)控制塊,并將與該任務(wù)密切相關(guān)的各個(gè)變量,比如任務(wù)優(yōu)先級別、堆棧大小等變量保存到任務(wù)控制塊中,同時(shí)還得完全按照任務(wù)堆棧初始化結構那樣初始化該任務(wù)的任務(wù)堆棧,然后將任務(wù)堆棧的棧頂指針保存到該任務(wù)控制塊的相應位置。
移植工作主要是改寫(xiě)OS_CPU.H,OS_CPUA.ASM,OS_CPU.C,OS_CFGH,INCLUDES.H,其中與處理器相關(guān)的文件為:OS_CPU.H,OS_CP U.C,OS_CPU_.A.ASM。μC/OS-Ⅱ嵌入式操作系統硬件和軟件體系結構如圖2所示。本文引用地址:http://dyxdggzs.com/article/194066.htm
在數據類(lèi)型定義中,S3C44B0X芯片是32位處理器,但是,μC/OS-Ⅱ嵌入式操作系統所處理的仍然是INT16U。用戶(hù)必須將任務(wù)堆棧的數據類(lèi)型告訴給μC/OS-Ⅱ嵌入式操作系統。這個(gè)過(guò)程是通過(guò)為OS_STK聲明正確的C數據類(lèi)型來(lái)完成的。S3C44B0X芯片的堆棧成員是16位的,所以將OS_TsK聲明為無(wú)符號整形數據類(lèi)型,定義如下:
tyPedefunsignedlong OS_STK;
堆棧增長(cháng)方向OS_STK_GROWTH定義如下:
#defin OS_STK_GROWTH左堆棧增長(cháng)方向為從上往下增長(cháng)
#define STACKSIZE256/μC/OS-Ⅱ嵌入式操作系統需要先禁止中斷訪(fǎng)問(wèn)代碼的臨界區,并且在訪(fǎng)問(wèn)完畢后重新允許中斷。
與所有的實(shí)時(shí)內核一樣,μC/OS-Ⅱ嵌入式操作系統需要先禁止中斷再訪(fǎng)問(wèn)代碼的臨界區,并且在訪(fǎng)問(wèn)完畢后重新允許中斷。這就使得μC/OS-Ⅱ嵌入式操作系統能夠保護臨界區代碼免受多任務(wù)或中斷服務(wù)例程的破壞。在S3CA4B0X芯片上是通過(guò)兩個(gè)函數(OS_ENTER_CRITICAL()和OS_EXIT_RITICAL())實(shí)現開(kāi)關(guān)中斷的。
評論