?? update.txt
字號(hào):
uC/OS-II 在 AVR 上的移植
hotislandn@hotmail.com
www.mcuzone.com
IDE: PN
Compiler: AVR-GCC ( WinAVR 20050214 )
Target: ATmega16 @ 7.3728MHz
2005-07-28
V1.0
1. 由于ATmega16的RAM資源很少,所以在OS_CFG.H中關(guān)閉所有不必要的功能,同時(shí)優(yōu)化代碼,減少RAM占用
在os_core.c中,有兩個(gè)數(shù)組: INT8U const OSMapTbl[8]與 INT8U const OSUnMapTbl[256],雖然聲明為const類型,但是avr-gcc并不會(huì)將其放置在flash中,必須加以修改為INT8U const OSMapTbl[8] PROGMEM 與INT8U const OSUnMapTbl[256] PROGMEM ,同樣的,該文件中訪問這些數(shù)組的語句也必須做相應(yīng)的修改。這樣的結(jié)果是速度會(huì)受到影響,但是由于仍然是查表操作,任務(wù)切換的時(shí)間還是確定的。
2. 任務(wù)說明
系統(tǒng)中一共有5個(gè)用戶任務(wù):Task1-Task5,其優(yōu)先級(jí)依次為1,2,3,5,4。每個(gè)用戶任務(wù)的堆棧均為OS_USER_TASK_STK_SIZE(定義于os_cfg.h,目前為64字節(jié))。
系統(tǒng)中建立有一個(gè)信號(hào)量T2sem與一個(gè)郵箱Tmbox。
Task1完成了Timer0的初始化,并打開了定時(shí)器中斷,使得任務(wù)調(diào)度可以正常進(jìn)行。此后,該任務(wù)只隔一個(gè)很短的時(shí)間使得變量t1增加,同時(shí)取反PORTB.1。
Task2初始化了Timer2,并使能了Timer2中斷,然后任務(wù)掛起,等待信號(hào)量T2sem,如果等到且無錯(cuò)誤,則使得變量t2增加。
Task3使得PD2上出現(xiàn)一個(gè)脈沖,以觸發(fā)INT0,并使得變量t3增加。
Task4使得PD3上出現(xiàn)一個(gè)脈沖,以觸發(fā)INT1,并使得變量t4增加。
Task5使得該任務(wù)掛起等待郵箱中有一條消息,如果取得消息,就將t5的值更新。
3. 中斷系統(tǒng)
需要引用系統(tǒng)服務(wù)的中斷,其底層部分被定義于AVRect.S中,中斷的處理函數(shù)被定義于AVRisr.c中,例如例子中外部中斷0與外部中斷1的服務(wù)函數(shù)。
對(duì)于無需引用系統(tǒng)服務(wù)的中斷函數(shù),比如例子中的Timer2比較匹配中斷,可以全部定義于AVRisr.c中。
Timer2的中斷只是使得變量t6增加。
INT0的中斷向任務(wù)發(fā)出信號(hào)量。
INT1的中斷發(fā)送一個(gè)消息到信箱。
由于AVR的RAM有限,移植并未考慮中斷重入的問題。
2005-07-16
V0.9
1. OS版本為2.76
2. 使用Timer0的比較匹配中斷為系統(tǒng)定時(shí),頻率為100Hz
3. 三種臨界代碼保護(hù)方式均可以使用,在OS_CPU.h里直接設(shè)置即可
如果安裝了WinAVR20050214,則直接運(yùn)行start.bat,輸入make all即可開始編譯。
如果需要在AVRStudio仿真,運(yùn)行make extcoff后即可生成調(diào)試所需的cof文件。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -