鷹空獨(dú)舞
          邁著慵懶的步子,走在成長(zhǎng)路上..... Dead
          posts - 4,comments - 1,trackbacks - 0
               摘要: 在STM32的固件庫(kù)和提供的例程中,到處都可以見(jiàn)到assert_param()的使用。如果打開(kāi)任何一個(gè)例程中的stm32f10x_conf.h文件,就可以看到實(shí)際上assert_param是一個(gè)宏定義;  閱讀全文
          posted @ 2012-05-31 16:53 鷹空獨(dú)舞 閱讀(23930) | 評(píng)論 (1)編輯 收藏

          OSTaskCreate()
          函數(shù)原型:INT8U OSTaskCreate(void(*task)(void *pd),void *pdata,OS_STK *ptos,INT8U prio)
          調(diào)用者:任務(wù)或者是初始化代碼。
          作用:建立一個(gè)新任務(wù),任務(wù)的建立可以在多個(gè)任務(wù)環(huán)境啟動(dòng)之前,也可以在正在運(yùn)行的任務(wù)中建立,中斷處理程序中不能建立任務(wù),一個(gè)任務(wù)必須為無(wú)限循環(huán)結(jié)構(gòu),且不能有返回點(diǎn)。無(wú)論用戶(hù)程序中是否產(chǎn)生中斷,在初始化任務(wù)堆棧時(shí),堆棧的結(jié)構(gòu)必須與處理器中斷后寄存器入棧的順序結(jié)構(gòu)相同。

          該函數(shù)返回一個(gè)8位的整形數(shù),調(diào)用該函數(shù)需要四個(gè)參數(shù):
          a 第一個(gè)參數(shù):task是一個(gè)指向任務(wù)代碼的指針,也就是用戶(hù)代碼的首地址,平常使用中我們把自己創(chuàng)建的任務(wù)的名字作為這個(gè)參數(shù)即可。
          b 第二個(gè)參數(shù):pdata指向一個(gè)數(shù)據(jù)結(jié)構(gòu),該結(jié)構(gòu)用來(lái)在建立任務(wù)時(shí)向任務(wù)傳遞參數(shù)。
          c 第三個(gè)參數(shù):ptos是指向任務(wù)堆棧棧頂?shù)闹羔槪话惆褎?chuàng)建的任務(wù)的堆棧數(shù)組首地址賦給它。
          任務(wù)堆棧用來(lái)保存局部變量,函數(shù)參數(shù),返回地址以及任務(wù)被中斷時(shí)處理器寄存器的內(nèi)容,任務(wù)堆棧的大小決定于任務(wù)的需要以及預(yù)計(jì)的中斷嵌套層數(shù)。計(jì)算堆棧的大小需要知道任務(wù)的局部變量所占的空間,可能產(chǎn)生嵌套調(diào)用的函數(shù),及中斷嵌套所需的空間,如果初始化常量OS_STK_GROWTH設(shè)為1,堆棧被設(shè)為從內(nèi)存高地址向低地址增長(zhǎng),此時(shí)ptos應(yīng)該指向任務(wù)堆??臻g的最高地址,反之,如果OS_STK_GROWTH設(shè)為0,堆棧將從內(nèi)存的低地址向高地址增長(zhǎng)。
          d 第四個(gè)參數(shù):prio是任務(wù)的優(yōu)先級(jí)。每個(gè)任務(wù)必須有一個(gè)唯一的優(yōu)先級(jí)作為標(biāo)識(shí),數(shù)字越小,優(yōu)先級(jí)越高。

          返回值:
          OSTaskCreate()的返回值為下述之一:
          # OS_NO_ERR: 函數(shù)調(diào)用成功。
          # OS_PRIO_EXIST:具有該優(yōu)先級(jí)的任務(wù)已經(jīng)存在。
          # OS_PRIO_INVALID: 參數(shù)指定的優(yōu)先級(jí)大于OS_LOWEST_PRIO
          # OS_NO_MORE_TCB: 系統(tǒng)中沒(méi)有OS_TCB可以分配給任務(wù)了。

          注意:
          1 任何堆棧必須聲明為OS_STK類(lèi)型。
          2 在任務(wù)中必須調(diào)用uCOS提供的下述過(guò)程之一:延時(shí)等待,任務(wù)掛起,等待事件發(fā)生(等待信號(hào)量,消息郵箱,消息隊(duì)列),以便其他任務(wù)能得到cpu。
          3 程序中不能使用優(yōu)先級(jí)0,1,2,3,以及OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,OS_LOWEST_PRIO-1,

          OS_LOWEST_PRIO,這些優(yōu)先級(jí)系統(tǒng)保留,其余的56個(gè)優(yōu)先級(jí)提供給應(yīng)用程序。

          范例:
          本例中,傳遞給任務(wù)Task1()的參數(shù)pdata不使用,所以指針pdata被設(shè)為NULLL,注意到程序中設(shè)定堆棧向低地址增長(zhǎng),傳遞的棧頂指針為高地址&Task1[1023],如果在你的程序中設(shè)定堆棧向高地址增長(zhǎng),則傳遞的棧頂指針應(yīng)該為&Task1Stk[0]。
          OS_STK Task1Stk[1024];
          void main(void)
          {
          NT8U err;
             ...
          OSInit();//初始化uCOS-II
          ....
          OSTaskCreate(Task1,(void *)0,&Task1Stk[1023],25);
          ...
          OSStart();//啟動(dòng)多任務(wù)環(huán)境
          }

          void Task1(void *pdata)
          {
          pdata=pdata;
          for(;;)
          {
          ......   //任務(wù)代碼
          }

          }

          posted @ 2012-05-31 16:23 鷹空獨(dú)舞 閱讀(502) | 評(píng)論 (0)編輯 收藏
          主站蜘蛛池模板: 台江县| 靖州| 瑞安市| 庆城县| 莒南县| 满洲里市| 青岛市| 富宁县| 剑阁县| 花莲县| 莱西市| 庆云县| 红安县| 来凤县| 诏安县| 铁岭市| 牙克石市| 太谷县| 靖远县| 新乐市| 万宁市| 杭州市| 台东市| 清远市| 康保县| 正宁县| 龙泉市| 乐亭县| 南川市| 鄂温| 南康市| 乐至县| 石景山区| 利川市| 呼图壁县| 富裕县| 丹阳市| 安庆市| 兰溪市| 丰顺县| 乐山市|