stm32f105vc移植FreeRTOS小型操作系統(tǒng)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
一、建立必要的stm32開(kāi)發(fā)工程
1、FreeRTOS文件夾下存放的是整個(gè)FreeRTOS系統(tǒng)的 source文件夾。
FreeRTOS已經(jīng)存放在云盤(pán)了。也可以通過(guò)官網(wǎng)下載。
二、添加相應(yīng)的文件
1、list.c queue.c task.c位于source根目錄下;
2、Port.c和portmacro.c是硬件接口層,位于FreeRTOSSourceportableRVDSARM_CM3文件夾下;
3、heap4.c為內(nèi)存管理文件,位于FreeRTOS/Source/portable/MemMang下;
三、添加頭文件路徑
1、...FreeRTOSSourceportableRVDSARM_CM3
2、…FreeRTOSSourceinclude
3、…FreeRTOSSource
四、編寫(xiě)FreeRTOSConfig.h文件
從FreeRTOS自帶的Demo文件夾下拷貝一份FreeRTOSConfig文件,并將該文件添加到工程中去。
此時(shí),如果不是自己編寫(xiě)的代碼出錯(cuò),應(yīng)該可以全部編譯通過(guò)。
五、掛接中斷
在Cortex-M3硬件下,F(xiàn)reeRTOS使用SysTick作為系統(tǒng)節(jié)拍時(shí)鐘,使用SVC和PendSVC進(jìn)行上下文切換。異常中斷服務(wù)代碼位于port.c文件中,F(xiàn)reeRTOS的作者已經(jīng)為各種架構(gòu)的CPU寫(xiě)好了這些代碼,可以直接拿來(lái)用,需要用戶做的,僅僅是將這些異常中斷入口地址掛接到啟動(dòng)代碼中。
在startup.s中,使用IMPORT關(guān)鍵字聲明要掛接的異常中斷服務(wù)函數(shù)名,然后將:
DCD SVC_Handler 換成: DCD vPortSVCHandler
DCD PendSV_Handler 換成: DCD xPortPendSVHandler
DCD SysTick_Handler 換成: DCD xPortSysTickHandler
六、設(shè)置節(jié)拍時(shí)鐘
這里我們使用SysTick定時(shí)器作為系統(tǒng)的節(jié)拍時(shí)鐘,設(shè)定每隔10ms產(chǎn)生一次節(jié)拍中斷。由于FreeRTOS對(duì)移植做了非常多的工作,以至于我們只需要在FreeRTOSConfig.h中配置好以下兩個(gè)宏定義即可:
configCPU_CLOCK_HZ ()
configTICK_RATE_HZ ((portTickType)100)
第一個(gè)宏定義CPU系統(tǒng)時(shí)鐘,也就是CPU執(zhí)行時(shí)的頻率。第二個(gè)宏定義FreeRTOS的時(shí)間片頻率,這里定義為100,表明RTOS一秒鐘可以切換100次任務(wù),也就是每個(gè)時(shí)間片為10ms。
在prot.c中,函數(shù)vPortSetupTimerInterrupt()設(shè)置節(jié)拍時(shí)鐘。該函數(shù)根據(jù)上面的兩個(gè)宏定義的參數(shù),計(jì)算SysTick定時(shí)器的重裝載數(shù)值寄存器,然后設(shè)置SysTick定時(shí)器的控制及狀態(tài)寄存器,設(shè)置如下:使用內(nèi)核時(shí)鐘源、使能中斷、使能SysTick定時(shí)器。另外,函數(shù)vPortSetupTimerInterrupt()由函數(shù)vTaskStartScheduler()調(diào)用,這個(gè)函數(shù)用于啟動(dòng)調(diào)度器。
七、配置其他宏
八、編寫(xiě)程序
九、代碼下載
http://pan.baidu.com/disk/home?fr=ibaidu&errno=0&errmsg=Auth Login Sucess&&bduss=&ssnerror=0#list/path=/&vmode=list