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