來自:
詳解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優缺點都有,它實現了乙個輕量級的基於事件觸發的執行緒模型,特別適用於走台階似的一級一級的往下走問題處理,你到了某個台階上,不走了,去了一趟廁所,回來後可以從這個台階上繼續往前走,不...