當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 關(guān)于使用stm32cubemx生成代碼后移植Ucos—III的方法
介紹一下Ucos—iii的優(yōu)點(diǎn):相比于Ucos—ii,UCOS-II主要針對(duì)8位、16位機(jī)以及低端32位機(jī),UCOS-III主要針對(duì)高端32位處理器和64位處理器,在性能上有了很大的提升,有了不少的提升,例如任務(wù)數(shù)沒(méi)有顯示,不同的任務(wù)可以擁有相同的優(yōu)先級(jí),相同優(yōu)先級(jí)的任務(wù)調(diào)度采用時(shí)間片輪轉(zhuǎn)法。對(duì)一些內(nèi)核對(duì)象,例如信號(hào)量,可以在運(yùn)行過(guò)程中創(chuàng)建和刪除,不用像ucos-ii那樣必須在編譯時(shí)分配好。內(nèi)核對(duì)象數(shù)也沒(méi)有限制。
Ps:不過(guò)如果芯片處理能力有限的話,建議還是量力而為,選擇ucos—ii足夠就沒(méi)必要選擇ucos—iii,ucos-iii顯然適用于更加復(fù)雜的系統(tǒng)應(yīng)用,本身占用的內(nèi)存空間也較大,而且代碼顯得比較累贅。例如創(chuàng)建一個(gè)任務(wù),就要這樣的麻煩
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);
這么多的參數(shù),如果初學(xué)的話,一個(gè)個(gè)去弄懂也沒(méi)必要,但是如果不弄懂又學(xué)不會(huì),所以如果入門(mén)ucos操作系統(tǒng)的話,本人介意先學(xué)ucos—ii,學(xué)了ucos—ii在去開(kāi)ucos—iii,你會(huì)發(fā)現(xiàn)系統(tǒng)時(shí)基,任務(wù)創(chuàng)建和調(diào)度原理其實(shí)是一樣的,只不過(guò)部分功能做了優(yōu)化,通俗點(diǎn)講就是更加嚴(yán)謹(jǐn)了,好了,理論只是幫助實(shí)際應(yīng)用的東西,太過(guò)于執(zhí)著于理論就鉆了牛角尖了,本人并非老師,只是一個(gè)普通的研發(fā)人員,所以以實(shí)際產(chǎn)品應(yīng)用為主,所以就說(shuō)一下實(shí)際應(yīng)用吧。
首先我們要到網(wǎng)上下載ucos—iii的源碼,官網(wǎng)是://micrium.com/打開(kāi)看到
點(diǎn)擊紅色框部分,就會(huì)進(jìn)入下載界面
然后就可以下載了
咱們下載的是下面這個(gè),
下好以后,打開(kāi)相關(guān)文件夾,將源碼復(fù)制到工程目錄下
然后打開(kāi)keil5工程,在工程目錄里添加源碼,目錄結(jié)構(gòu)如下:
好了,上面只是基礎(chǔ)的準(zhǔn)備工作,熟了以后大家可以根據(jù)自己喜好去創(chuàng)建工程目錄結(jié)構(gòu),目前來(lái)說(shuō)先按作者的來(lái)就可以了,這些其實(shí)是無(wú)關(guān)緊要的事情,大家目的是為了學(xué)習(xí)原理并把它應(yīng)用到實(shí)際工作中嘛。
下面我們就開(kāi)始真正的將這個(gè)系統(tǒng)和cpu關(guān)聯(lián)起來(lái)了,相信大家熟悉操作系統(tǒng)的都知道時(shí)基這個(gè)概念,ucos操作系統(tǒng)同樣需要一個(gè)時(shí)基,正好我們的stm32芯片都有一個(gè)系統(tǒng)滴答計(jì)時(shí)器,這里我們將它作為ucos操作系統(tǒng)的時(shí)基剛好,那么怎么做呢,其實(shí)是有兩個(gè)方法,
大致原理是一樣的,我們打開(kāi)startup_stm32f407xx.s文件,看到這里有棧空間申請(qǐng)的代碼
下面有相關(guān)函數(shù)調(diào)用的聲明:
那么這兩個(gè)函數(shù)是做什么的呢?
一個(gè)是任務(wù)調(diào)度函數(shù),一個(gè)是systick中斷服務(wù)函數(shù),我們打開(kāi)os_cpu_a.asm和os_cpu_c.c,可以看到源碼
只要相關(guān)名字對(duì)應(yīng)就可以了,我這里是改的startup_stm32f407xx.s啟動(dòng)文件的相關(guān)聯(lián)部分,不希望修改ucos—iii源碼,但有的人是不希望修改stm32cubemx生成的源碼,而去修改ucos—iii的相應(yīng)部分,都可以,只要函數(shù)名一致就可。
Ps:stm32cubemx生成代碼的systick定時(shí)器為1ms一次中斷,如果需要調(diào)節(jié),可以再時(shí)鐘配置函數(shù)里去修改。