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