1. 程式人生 > >UcosII移植之Stm32f107

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中,建立相應任務,如下