移植ucosii其實並不難,現在網上的資料又那麼多。但是要弄懂要花上不少時間。現在來說說移植需要注意的幾個問題吧。
**參考文件 <>**
>pendsv:主要應用於系統任務切換 nvic:負責晶元的中斷管理
##準備
micrium\software\ucos-ii可以參考我上篇的建立工程,在上篇的工程結構基礎上我新建了乙個ucosii資料夾。該資料夾下又分為三個子資料夾。source,port,config
儲存ucosii原始碼的資料夾。micrium\software\ucos-ii目錄下的檔案都copy到這裡來。各檔案的功能不介紹,光名字就比較直觀。
把 micrium\software\ucos-ii\ports\arm-cortex-m3\generic\realview下的檔案拷貝至該檔案下。這個資料夾下的檔案後面基本上都要修改
***usocii-config
micrium\software\evalboards\st\stm3210b-eval\rvmdk\os-probe\os_cfg.h拷貝到該檔案下。
這裡兩個函式乙個是tick中斷處理,因為ucosii沒有時間片選,只能通過中斷來實現任務管理,在os_cpu_c.c中定義,注意下函式名需要與圖中設定的一樣。還有os_cpu_pendsvhandler,這是任務切換管理函式。在os_cpu_a.asm中定義,一定要注意名字要一樣哦。另外注意如果參考的是<>,他用的是 stm32f10x_it.c 裡面的systick_handler(),所以沒有替換startup_stm32fl0x_md的systick_handler為os_cpu_systick_handler。
看下下圖是否有,沒有也需要加上
這裡你可以控制不需要的功能,比如debug功能,自定義的鉤子
至此已經全部移植完畢,可以新建的main檔案然後編譯測試了。
main.c
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
#include "ucos_ii.h"
#define task_stk_size 64 //定義堆疊長度
os_stk led0_task_stk[task_stk_size];
os_stk led1_task_stk[task_stk_size]; /*定義兩個任務的堆疊陣列*/
#define on 0
#define off 1
#define led0(a) if (a) \
gpio_setbits(gpioa,gpio_pin_0);\
else \
gpio_resetbits(gpioa,gpio_pin_0)
#define led1(a) if (a) \
gpio_setbits(gpioa,gpio_pin_1);\
else \
gpio_resetbits(gpioa,gpio_pin_1) /*巨集定義兩個選擇函式*/
void gpio_configuration(void) //配置i/o口
void bsp_init(void) //硬體配置
void systick_init(void) /* systick_init 配置systick定時器 */
void task_led0(void *p_arg)
}void task_led1(void *p_arg)
}int main(void)
參考文件: UCOSII移植問題 IAR
一 sprintf浮點數問題 最近遇到了乙個問題,就是ucosii中浮點數呼叫printf顯示不正常,但是裸機上對浮點數支援正常,以下是詳細情況。pragma data alignment 在ucos中呼叫printf除錯浮點數的時候,在記憶體中表示正確,但是列印資料就都為0.00,其他整形資料表示...
uCOS II 移植及遇到的問題
一 ucos 移植主要有三步 1.修改檔案 os cpu c.c ostasktkinit 函式是針對cpu壓棧的函式,需要模仿cpu初始化後的暫存器狀況。2.修改檔案os cpu.h 3.修改檔案os cpu a.asm 二 ucos移植中遇到的問題 1.任務不能進行有效切換 原因 以前任務只要t...
Ucos II 的移植之一
ucos ii 的移植之一要使 c os 正常執行,處理器必須滿足以下要求 1.處理器的c編譯器能產生可重入 2.用c語言就可以開啟和關閉中斷。3.處理器支援中斷,並且能產生定時中斷 通常在10至 100hz之間 4.處理器支援能夠容納一定量資料 可能是幾千位元組 的硬體堆疊 5.處理器有將堆疊指標...