關于使用(yong)stm32cubemx生成代(dai)碼后移(yi)植Ucos—III的方法
時間:2018-09-21 來源:未知(zhi)
介紹一下Ucos—iii的(de)優(you)點(dian):相(xiang)比(bi)于(yu)Ucos—ii,UCOS-II主要(yao)針對(dui)8位(wei)、16位(wei)機以(yi)及低(di)端32位(wei)機,UCOS-III主要(yao)針對(dui)高端32位(wei)處理器(qi)和64位(wei)處理器(qi),在性能上有了很大的(de)提升,有了不少的(de)提升,例(li)如任(ren)(ren)務(wu)數(shu)沒(mei)有顯(xian)示,不同(tong)的(de)任(ren)(ren)務(wu)可以(yi)擁有相(xiang)同(tong)的(de)優(you)先級,相(xiang)同(tong)優(you)先級的(de)任(ren)(ren)務(wu)調(diao)度采(cai)用(yong)時(shi)間片輪(lun)轉法。對(dui)一些內(nei)核對(dui)象(xiang),例(li)如信(xin)號量,可以(yi)在運行過程(cheng)中創建和刪除,不用(yong)像ucos-ii那樣必須在編譯時(shi)分(fen)配好。內(nei)核對(dui)象(xiang)數(shu)也沒(mei)有限制(zhi)。
Ps:不過如果(guo)芯片(pian)處理能力有限的(de)話,建(jian)議還是量力而(er)為,選擇ucos—ii足夠就沒必要(yao)選擇ucos—iii,ucos-iii顯然適用于更加復雜的(de)系統應用,本身(shen)占(zhan)用的(de)內存空(kong)間也較大,而(er)且代碼顯得比較累贅(zhui)。例如創建(jian)一個(ge)任務,就要(yao)這樣的(de)麻煩
void OSTaskCreate (OS_TCB *p_tcb,
CPU_CHAR *p_name,
OS_TASK_PTR p_task,
void *p_arg,
OS_PRIO prio,
CPU_STK *p_stk_base,
CPU_STK_SIZE stk_limit,
CPU_STK_SIZE stk_size,
OS_MSG_QTY q_size,
OS_TICK time_quanta,
void *p_ext,
OS_OPT opt,
OS_ERR *p_err);
這么多的(de)參數,如果(guo)初學(xue)的(de)話(hua),一個個去弄(nong)懂(dong)也沒必要,但(dan)是如果(guo)不(bu)弄(nong)懂(dong)又學(xue)不(bu)會,所(suo)(suo)以如果(guo)入門(men)ucos操作系統(tong)的(de)話(hua),本人(ren)介(jie)意先學(xue)ucos—ii,學(xue)了(le)(le)ucos—ii在去開(kai)ucos—iii,你(ni)會發現系統(tong)時基,任務創建和調度(du)原理其實是一樣的(de),只(zhi)不(bu)過部(bu)分(fen)功能做(zuo)了(le)(le)優化,通俗點講就是更加(jia)嚴謹了(le)(le),好(hao)了(le)(le),理論只(zhi)是幫助實際應用的(de)東(dong)西,太過于執著(zhu)于理論就鉆了(le)(le)牛(niu)角(jiao)尖了(le)(le),本人(ren)并非老師,只(zhi)是一個普通的(de)研發人(ren)員,所(suo)(suo)以以實際產品(pin)應用為(wei)主,所(suo)(suo)以就說一下實際應用吧。
首(shou)先我們要到網(wang)上下(xia)載ucos—iii的源碼,官網(wang)是://micrium.com/打開看到

點擊紅色框部分,就(jiu)會進(jin)入下載界面




然后就可以下載(zai)了

咱們下載的是(shi)下面這(zhe)個,
下(xia)好(hao)以后,打開相(xiang)關文件夾,將源碼復制到(dao)工(gong)程目錄下(xia)

然后(hou)打開keil5工(gong)程,在(zai)工(gong)程目(mu)錄里添加源碼(ma),目(mu)錄結構如下:

好(hao)了(le)(le),上面只(zhi)是(shi)(shi)基礎的(de)準備工(gong)(gong)作(zuo),熟(shu)了(le)(le)以后大家可以根據(ju)自己喜好(hao)去(qu)創建工(gong)(gong)程目錄結構,目前來說(shuo)先按作(zuo)者的(de)來就可以了(le)(le),這(zhe)些其實是(shi)(shi)無關緊(jin)要的(de)事情,大家目的(de)是(shi)(shi)為了(le)(le)學習原理并把(ba)它應(ying)用(yong)到實際工(gong)(gong)作(zuo)中嘛。
下面我(wo)們就開始真(zhen)正(zheng)的將這(zhe)個系統(tong)和cpu關聯起(qi)來了,相(xiang)信(xin)大家(jia)熟悉操(cao)(cao)作系統(tong)的都知道(dao)時(shi)(shi)基(ji)(ji)這(zhe)個概(gai)念,ucos操(cao)(cao)作系統(tong)同(tong)樣需要一個時(shi)(shi)基(ji)(ji),正(zheng)好我(wo)們的stm32芯(xin)片都有一個系統(tong)滴答計(ji)時(shi)(shi)器,這(zhe)里我(wo)們將它作為ucos操(cao)(cao)作系統(tong)的時(shi)(shi)基(ji)(ji)剛好,那么(me)怎么(me)做呢(ni),其實是有兩個方法,
大(da)致原理(li)是一(yi)樣的,我們打(da)開startup_stm32f407xx.s文件,看到這里有(you)棧空間申請的代碼

下面(mian)有相關函(han)數(shu)調用(yong)的聲明:

那么(me)這兩個(ge)函數是(shi)做什么(me)的呢?
一(yi)個(ge)是(shi)任務調度函(han)數(shu),一(yi)個(ge)是(shi)systick中(zhong)斷服務函(han)數(shu),我們打(da)開os_cpu_a.asm和os_cpu_c.c,可(ke)以看到源碼



只要相(xiang)(xiang)關(guan)名(ming)字對應(ying)就(jiu)可以了,我這里(li)是(shi)改(gai)(gai)的(de)startup_stm32f407xx.s啟動(dong)文件的(de)相(xiang)(xiang)關(guan)聯部分,不(bu)(bu)希(xi)望修(xiu)改(gai)(gai)ucos—iii源(yuan)碼,但有的(de)人是(shi)不(bu)(bu)希(xi)望修(xiu)改(gai)(gai)stm32cubemx生成的(de)源(yuan)碼,而去修(xiu)改(gai)(gai)ucos—iii的(de)相(xiang)(xiang)應(ying)部分,都可以,只要函數名(ming)一(yi)致就(jiu)可。
Ps:stm32cubemx生成代碼的systick定時器為1ms一(yi)次中斷(duan),如果需要調節,可以再(zai)時鐘配置(zhi)函(han)數里去修改。

