ucosii在stm32上的移植詳解5

2021-06-13 18:19:29 字數 1731 閱讀 9545

來自:

詳解1-4把移植過程都已經介紹了。接下來的工作是驗證移植是否ok以及如何基於移植好的ucosii開

發應用程式。前乙個問題可以說是後乙個問題的特殊情況,一般我們會建立兩個簡單的任務,看看任務切

換是否成功來驗證移植是否ok,因為任務切換可以說是ucosii最核心的功能。

任務**(main.c):

static void task1(void *p_arg)}

static void task2(void *p_arg)}

在startup_task()建立任務:

err = ostaskcreate(task1, (void *)0,

&task1_stk[task1_stk_size-1], task1_prio);     

err = ostaskcreate(task2, (void *)0,

&task2_stk[task2_stk_size-1], task2_prio);

如何基於移植好的ucosii開發應用程式呢?

開發應用程式大部分都是為了處理或控制乙個真實的物理系統,而真實的物理系統往往都是模擬系統

,為了方便計算機處理,首先需要對系統做離散化處理。針對ucosii,離散化過程是通過系統「心跳」

(systick)來實現的。一般應用程式都有多個任務(不多工誰用ucosii啊),任務可以分為週期任務

和非週期任務。週期任務是週期性迴圈地處理事情的任務,而非週期任務一般是某個條件觸發才執行的任

務。這裡有乙個問題,systick的時間是多少合適。systick的時間一般取週期性任務中週期最短的時間值

。譬如說,系統裡有3個週期性任務:系統主任務(如處理pid等,任務週期4ms),鍵盤掃瞄任務(任務

週期16ms),通訊任務(任務週期128ms),systick時間就取4ms。當然在systick時間較小時,要注意系統負荷問題,這時最好測一下cpu使用率及各個任務的時間等。

週期性任務的開發套路是怎麼樣的呢?看看定時器任務的做法就知道了,**在os_tmr.c。首先在

ostmr_init()中初始化ostmrsemsignal,然後ostmr_task()任務會一直等待ostmrsemsignal,等到

ostmrsemsignal後去處理各個定時器。那麼誰在釋放ostmrsemsignal呢?ostmrsignal(),這個函式要求

放在一定頻率的時鐘中斷裡,預設是在systick中斷中(如果使能os_time_tick_hook_en)。好了,現在

我們可以總結總結週期性任務的一般套路了。

首先在任務初始化函式中初始化乙個訊號量(一般會用訊號量),偽**如下:

void task_init(void)

在任務中等待訊號量

void task (void *p_arg)}

週期性的釋放訊號量 

ossempost(task_sem);

對於上面所說系統主任務,ossempost(task_sem)可以放在systick_handler()中。所以一般來說

os_cpu_systickhandler()改動的可能性是非常大的。

非週期任務的開發套路又是怎樣的呢?其實和週期性任務是差不多的,只是訊號量不是周期性地釋放

,而是按需釋放。

其他核心功能就不多介紹了,大家按需使用,不是很難。

本文**:

該移植**在我自己開發的乙個小玩意上已得到一段時間的驗證,未發現問題。但由於水平所限,並不敢保證該移植是沒有任何問題的,殷切希望大家批評指正。

stm32移植ucosII成功

osstarthang b osstarthang should never get here 現在做開發真的離不開internet啊 不然我也不可能2.5小時內搞定ucosii的移植。我的硬體版本是 stm32f103c8t6,ucos版本是ucosiiv2.86 另外給大家推薦一本學習ucosi...

uCOS II移植到STM32上的詳細步驟

前言 說點廢話,網上有很多關於ucos ii移植的文章,好多都是千篇一律,理論性很強,分析了一大堆虛頭巴腦的東西,實操性嚴重欠缺,這方面我也走了很多彎路,下面就將自己的移植過程一步步的記錄下來,也給大家做做參考。首先,簡單總結一下移植的大概過程 3 本案例需要將uc os ii移植到stm32f10...

ProtoThread在STM32上實現跑馬燈

protothread相關介紹,原始碼獲取等請到我的另乙個博文閱讀 protothread的介紹 protothread優缺點都有,它實現了乙個輕量級的基於事件觸發的執行緒模型,特別適用於走台階似的一級一級的往下走問題處理,你到了某個台階上,不走了,去了一趟廁所,回來後可以從這個台階上繼續往前走,不...