UcosII移植之Stm32f107
一 新建工程
這裡我的板子是F107互聯型的,啟動檔案按照下圖選擇cl.s。
二 工程配置
Output的設定,要勾選creatHEX File
C/C++選項設定如圖
或者
配置完畢後連接出現如下錯誤
問題分析:
按照報錯定位到os_cpu_c.c,如下
這裡報錯App_TaskDelHook沒有定義,可看成OS_APP_HOOKS_EN巨集大於0u執行該鉤子函式,於是在os_cfg.h中,將該巨集設為0,不讓改函式執行,如下
編譯連線成功。
其實這裡鉤子函式我們一般不使用,將其註釋掉也可以,或者另外找個c檔案,將其定義為空函式也應該是可以的。
報錯如下時
同樣的道理解決,如下
三 初始化滴答
四 滴答中斷配置
五 系統裁剪
5.1 配置os_cfg.h
(1)最低優先順序
(2)系統每秒滴答數
與系統延時OSTimeDly關係比較重要,OS_TICKS_PER_SEC等於100,呼叫OSTimeDly(100),相當於延時100個滴答,即延時1秒
(3)任務堆疊
如果RAM資源有限,任務堆疊的大小最好根據任務評估一下,資源有限時不要太大,也不能小於程式正常執行。
5.2 配置os_cpu.h
(1)OS資料型別
這是為系統定義相關的資料型別,這裡不修改
(2)臨界區
預設使用臨界區第三種模式,這主要與os_cpu_SR_Save()函式有關,這裡不修改
(3)函式宣告
5.3 配置os_cpu_a.asm
(1) 全域性宣告
extern宣告的是外部(其他原始檔)定義的變數和函式,Export宣告的是本檔案定義的函式,供其他原始檔使用。
這裡修改如上,主要是為了相容ST標準外設庫啟動程式碼(startup_stm32f10x_cl.s)。如下圖,這裡是啟動程式碼中的中斷向量表
(2)PendSV_Handle
PendSV_Handler中斷函式定義這塊,將OS_CPU_PendSVHandler改為PendSV_Handler,跟上面一樣是為了相容ST標準外設庫的啟動程式碼。
5.4 配置os_cpu_c.c
(1) 系統滴答
在app_cfg.c中配置系統滴答,下圖定同於註釋掉
這些都是SysTick系統滴答的巨集定義和函式體,我們使用M3標準(ST庫)的SysTick系統滴答函式介面,因此遮蔽掉裡面Systick的相關定義。
5.5 配置app_cfg.h與app_cfg.c
(1)任務優先順序和堆疊
app_cfg.c位於App下面,主要用於系統應用的配置。
在app_cfg.h中,建立任務需要對任務優先順序和堆疊進行一個定義
(2)系統滴答
在app_cfg.c中
在Core_cm3.h中是SysTick_config定義,其中ticks 代表的是初值。例如系統時鐘是72Mhz 那麼要產生1ms的時基,那麼我們可以這樣去寫。
SysTick_Config(SystemCoreClock/1000); 當然也可以寫成:SysTick_Config(72000);
六 建立任務
這裡是應用提供一個函式介面(AppTask1,AppTask2),一旦啟動了系統,相應函式就會逐步執行。
在app_task.c中,建立相應任務,如下