<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ucos-ii學(xué)習(xí)筆記——s12移植成功main函數(shù)

          ucos-ii學(xué)習(xí)筆記——s12移植成功main函數(shù)

          作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
          Createdon:2012-10-9

          Author:zhangbin

          本文引用地址:http://www.ex-cimer.com/article/201611/322854.htm

          學(xué)習(xí)筆記

          forucos-iiMC9S12XS128

          redesignedbyzhangbin

          2012-10-9

          versions:V-0.1

          AllRightsReserved

          #include"includes.h"

          #include"pll.h"

          #include"string.h"

          #defineTASK_STK_SIZE128//定義任務(wù)堆棧長(zhǎng)度

          #defineTASK_START_PRIO5//此版本的uC/OS-II最多支持256個(gè)用戶定義任務(wù)。優(yōu)先級(jí)號(hào)越低,任務(wù)的優(yōu)先級(jí)別就越高

          #defineTASK_1_PRIO10

          #defineTASK_2_PRIO12

          #defineTASK_3_PRIO8

          #defineTASK_4_PRIO16

          #defineTASK_5_PRIO18

          #defineTASK_6_PRIO20

          #defineTASK_7_PRIO22

          #defineTASK_8_PRIO24

          #defineTASK_9_PRIO26

          #defineTASK_A_PRIO28

          #defineTASK_B_PRIO30

          #defineTASK_C_PRIO32

          #defineTASK_D_PRIO34

          #defineTASK_E_PRIO36

          #defineTASK_F_PRIO38

          #defineMUTEX_PIP_18

          #defineMUTEX_PIP_29

          #defineEVENT_Q_1_SIZE10

          #defineEVENT_Q_2_SIZE20

          #defineMEM_BLKS_110

          #defineMEM_BLK_SIZE_18

          #defineMEM_BLKS_28

          #defineMEM_BLK_SIZE_212

          OS_STKled_task_1_stk[TASK_STK_SIZE];//定義任務(wù)堆棧

          OS_STKled_task_2_stk[TASK_STK_SIZE];

          OS_STKAppStartTaskStk[TASK_STK_SIZE];//創(chuàng)建任務(wù)堆棧OS_STK創(chuàng)建任務(wù)參數(shù)指針TASKDATA,調(diào)用函數(shù)創(chuàng)建任務(wù)

          OS_STKAppTask1Stk[TASK_STK_SIZE];

          OS_STKAppTask2Stk[TASK_STK_SIZE];

          OS_STKAppTask3Stk[TASK_STK_SIZE];

          OS_STKAppTask4Stk[TASK_STK_SIZE];

          OS_STKAppTask5Stk[TASK_STK_SIZE];

          OS_STKAppTask6Stk[TASK_STK_SIZE];

          OS_STKAppTask7Stk[TASK_STK_SIZE];

          OS_STKAppTask8Stk[TASK_STK_SIZE];

          OS_STKAppTask9Stk[TASK_STK_SIZE];

          OS_STKAppTaskAStk[TASK_STK_SIZE];

          OS_STKAppTaskBStk[TASK_STK_SIZE];

          OS_STKAppTaskCStk[TASK_STK_SIZE];

          OS_STKAppTaskDStk[TASK_STK_SIZE];

          OS_STKAppTaskEStk[TASK_STK_SIZE];

          OS_STKAppTaskFStk[TASK_STK_SIZE];

          INT16UAppTask1Ctr;

          INT16UAppTask2Ctr;

          INT16UAppTask3Ctr;

          INT16UAppTask4Ctr;

          INT16UAppTask5Ctr;

          INT16UAppTask6Ctr;

          INT16UAppTask7Ctr;

          INT16UAppTask8Ctr;

          INT16UAppTask9Ctr;

          INT16UAppTaskACtr;

          INT16UAppTaskBCtr;

          INT16UAppTaskCCtr;

          INT16UAppTaskDCtr;

          INT16UAppTaskECtr;

          INT16UAppTaskFCtr;

          INT8Usensor=0;//定義8路傳感器采集變量

          INT8Utest_value;//定義第八路傳感器故障時(shí)的變量

          #ifOS_SEM_EN>0

          OS_EVENT*EventSem1;

          OS_EVENT*EventSem2;

          #endif

          #ifOS_MBOX_EN>0

          OS_EVENT*EventMbox1;

          OS_EVENT*EventMbox2;

          #endif

          #ifOS_Q_EN>0

          OS_EVENT*EventQ1;

          OS_EVENT*EventQ2;

          void*EventQTbl1[EVENT_Q_1_SIZE];

          void*EventQTbl2[EVENT_Q_2_SIZE];

          #endif

          #ifOS_MUTEX_EN>0

          OS_EVENT*EventMutex1;

          OS_EVENT*EventMutex2;

          #endif

          #ifOS_FLAG_EN>0

          OS_FLAG_GRP*FlagGrp1;

          OS_FLAG_GRP*FlagGrp2;

          #endif

          #ifOS_MEM_EN>0

          OS_MEM*MemPart1;

          OS_MEM*MemPart2;

          INT8UMemPart1Tbl[MEM_BLKS_1][MEM_BLK_SIZE_1];

          INT8UMemPart2Tbl[MEM_BLKS_2][MEM_BLK_SIZE_2];

          #endif

          //任務(wù)的函數(shù)聲明

          staticvoidAppStartTask(void*pdata);

          staticvoidAppTaskCreate(void);

          staticvoidAppEventCreate(void);

          staticvoidAppTask1(void*pdata);

          staticvoidAppTask2(void*pdata);

          staticvoidAppTask3(void*pdata);

          staticvoidAppTask4(void*pdata);

          staticvoidAppTask5(void*pdata);

          staticvoidAppTask6(void*pdata);

          staticvoidAppTask7(void*pdata);

          staticvoidAppTask8(void*pdata);

          staticvoidAppTask9(void*pdata);

          staticvoidAppTaskA(void*pdata);

          staticvoidAppTaskB(void*pdata);

          staticvoidAppTaskC(void*pdata);

          staticvoidAppTaskD(void*pdata);

          staticvoidAppTaskE(void*pdata);

          staticvoidAppTaskF(void*pdata);

          staticvoidAppTickInit(void);

          staticvoidled_task_1(void*pdata);

          staticvoidled_task_2(void*pdata);

          //led的初始化函數(shù)

          voidled_init()

          {

          DDRB=0xff;//B口設(shè)為輸出

          PORTB=0xff;//設(shè)為高電平,滅燈

          }

          voidmain(void)

          {//因?yàn)闆](méi)有外設(shè),所以不存在硬件初始化函數(shù)

          INT8Uerr;

          INT16UStartdata=0x1234;//開始執(zhí)行的位置另一種定義方式:TASKDATA.myPPAGE=0x1234,為結(jié)構(gòu)體變量的初始化

          pllbus_init16m();//時(shí)鐘初始化為16M

          //LcdInit();//LCD初始化

          led_init();//led初始化

          OSInit();

          //創(chuàng)建起始任務(wù),作用:初始化時(shí)鐘滴答,為操作系統(tǒng)提供時(shí)鐘。初始化統(tǒng)計(jì)任務(wù),創(chuàng)建應(yīng)用任務(wù),建立事件

          OSTaskCreateExt(AppStartTask,//創(chuàng)建開始任務(wù)處于休眠態(tài)的任務(wù)經(jīng)過(guò)這個(gè)函數(shù)處理后轉(zhuǎn)為就緒態(tài)

          (void*)&Startdata,

          (OS_STK*)&AppStartTaskStk[TASK_STK_SIZE-1],

          TASK_START_PRIO,//優(yōu)先級(jí)為5

          TASK_START_PRIO,

          (OS_STK*)&AppStartTaskStk[0],

          TASK_STK_SIZE,

          (void*)0,

          OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);

          OSTaskNameSet(TASK_START_PRIO,"StartTask",&err);//設(shè)置任務(wù)的名稱作用??

          OSTaskNameSet(OS_TASK_IDLE_PRIO,"uC/OS-IIIdle",&err);//空閑任務(wù)

          OSTaskNameSet(OS_TASK_STAT_PRIO,"uC/OS-IIStat",&err);//統(tǒng)計(jì)任務(wù)

          //#defineOS_TASK_STAT_EN1u//Enable(1)orDisable(0)thestatisticstask

          //因?yàn)樵诒鞠到y(tǒng)中os_cfg_r.h文件中把OS_TASK_STAT_EN設(shè)為了1(如上),所以系統(tǒng)的統(tǒng)計(jì)任務(wù)會(huì)建立

          //統(tǒng)計(jì)任務(wù)的建立是在OSInit()中被創(chuàng)建的,代碼如下:

          OSStart();

          }

          staticvoidAppStartTask(void*pdata)

          {

          pdata=pdata;//pdata沒(méi)有用到,這樣的目的是防止編譯器提出warning

          AppTickInit();//初始化時(shí)鐘滴答,為操作系統(tǒng)提供時(shí)鐘

          OSStatInit();//初始化統(tǒng)計(jì)任務(wù)

          AppTaskCreate();//創(chuàng)建應(yīng)用任務(wù)

          //AppEventCreate();//建立事件

          while(TRUE)//任務(wù)一般都是一個(gè)無(wú)限循環(huán)的結(jié)構(gòu)

          {

          OSTimeDlyHMSM(0,0,1,0);//等待1s,交出cpu,由于while無(wú)限循環(huán)中只有這一條語(yǔ)句,所以

          //該起始任務(wù)第一次運(yùn)行以后,就一直處于掛起等待狀態(tài)

          }

          }

          staticvoidAppTaskCreate(void)//使1-f的任務(wù)處于就緒態(tài),一旦OSstart(),優(yōu)先級(jí)最高的任務(wù)獲得CPU的使用權(quán)

          {

          //INT8Uerr;

          OSTaskCreate(led_task_1,(void*)0,&led_task_1_stk[TASK_STK_SIZE-1],6);//創(chuàng)建任務(wù)led_task_1,優(yōu)先級(jí)為6

          OSTaskCreate(led_task_2,(void*)0,&led_task_2_stk[TASK_STK_SIZE-1],7);

          }

          staticvoidAppEventCreate(void)

          {

          INT8Uerr;

          #ifOS_SEM_EN>0

          EventSem1=OSSemCreate(1);

          OSEventNameSet(EventSem1,"Sem.#1",&err);

          EventSem2=OSSemCreate(1);

          OSEventNameSet(EventSem2,"Sem.#2",&err);

          #endif

          #ifOS_MBOX_EN>0

          EventMbox1=OSMboxCreate((void*)1);

          OSEventNameSet(EventMbox1,"Mailbox#1",&err);

          EventMbox2=OSMboxCreate((void*)1);

          OSEventNameSet(EventMbox2,"Mailbox#2",&err);

          #endif

          #ifOS_Q_EN>0

          EventQ1=OSQCreate(&EventQTbl1[0],EVENT_Q_1_SIZE);

          OSEventNameSet(EventQ1,"Queue#1",&err);

          EventQ2=OSQCreate(&EventQTbl2[0],EVENT_Q_2_SIZE);

          OSEventNameSet(EventQ2,"Queue#2",&err);

          #endif

          #ifOS_MUTEX_EN>0

          EventMutex1=OSMutexCreate(MUTEX_PIP_1,&err);

          OSEventNameSet(EventMutex1,"Mutex#1",&err);

          EventMutex2=OSMutexCreate(MUTEX_PIP_2,&err);

          OSEventNameSet(EventMutex2,"Mutex#2",&err);

          #endif

          #ifOS_FLAG_EN>0

          FlagGrp1=OSFlagCreate(0x00FF,&err);

          OSFlagNameSet(FlagGrp1,"Flag#1",&err);

          FlagGrp2=OSFlagCreate(0xFF00,&err);

          OSFlagNameSet(FlagGrp2,"Flag#2",&err);

          #endif

          #ifOS_MEM_EN>0

          MemPart1=OSMemCreate(&MemPart1Tbl[0],MEM_BLKS_1,MEM_BLK_SIZE_1,&err);

          OSMemNameSet(MemPart1,"Partition#1",&err);

          MemPart2=OSMemCreate(&MemPart2Tbl[0],MEM_BLKS_2,MEM_BLK_SIZE_2,&err);

          OSMemNameSet(MemPart2,"Partition#2",&err);

          #endif

          }

          staticvoidled_task_1(void*pdata)//任務(wù)led_task_1的函數(shù)代碼

          {

          pdata=pdata;//pdata沒(méi)有用到,這樣的目的是防止編譯器提出warning

          for(;;)

          {

          PORTB=0xf0;

          OSTimeDlyHMSM(0,0,0,500);//等待1s,交出cpu,任務(wù)調(diào)度一次

          }

          }

          staticvoidled_task_2(void*pdata)

          {

          pdata=pdata;//pdata沒(méi)有用到,這樣的目的是防止編譯器提出warning

          for(;;)

          {

          PORTB=0x0f;

          OSTimeDlyHMSM(0,0,1,0);//等待2s交出cpu

          }

          }

          staticvoidAppTask1(void*pdata)

          {

          pdata=pdata;

          for(;;)

          {

          Flash_Led(7,1);

          OSTimeDlyHMSM(0,0,1,0);

          }

          }

          staticvoidAppTask2(void*pdata)

          {

          pdata=pdata;

          LcdClear();

          for(;;)

          {

          LcdWriteStr(0,0,"illworkhard");

          OSTimeDlyHMSM(0,0,1,0);

          LcdClear();

          LcdWriteStr(0,0,"ificangetthechance");

          LcdWriteStr(1,0,"ipromisetoyou");

          OSTimeDlyHMSM(0,0,1,0);

          LcdClear();

          }

          }

          staticvoidAppTask3(void*pdata)

          {

          pdata=pdata;

          PWM_Init();//pwm初始化,將23通道級(jí)聯(lián)

          LcdClear();

          DDRT=0x00;//將PORTT設(shè)置為輸入

          for(;;)

          {

          LcdWriteStr(0,0,"welcometeacher!");

          PWM_Init();

          PWMDuo_Dutycycle(100);

          OSTimeDlyHMSM(0,0,1,0);

          Close_PWM();

          LcdClear();

          OSTimeDlyHMSM(0,0,0,500);

          }

          }

          staticvoidAppTask4(void*pdata)

          {

          INT8Uerr;

          }

          staticvoidAppTask5(void*pdata)

          {

          INT8Uerr;

          DDRB_DDRB3=1;

          pdata=pdata;

          while(TRUE){

          AppTask5Ctr++;

          #ifOS_Q_EN>0

          OSQPost(EventQ1,(void*)"Msg#3toQ1");

          OSTimeDly(20);

          OSQPost(EventQ2,(void*)"Msg#4toQ2");

          #endif

          OSTimeDly(40);

          PORTB_PB3=~PORTB_PB3;

          }

          }

          staticvoidAppTask6(void*pdata)

          {

          INT8Uerr;

          char*pmsg;

          chars[30];

          pdata=pdata;

          while(TRUE){

          AppTask6Ctr++;

          #ifOS_Q_EN>0

          pmsg=(char*)OSQPend(EventQ1,0,&err);

          strcpy(s,pmsg);

          #endif

          OSTimeDly(1);

          }

          }

          staticvoidAppTask7(void*pdata)

          {

          INT8Uerr;

          char*pmsg;

          chars[30];

          pdata=pdata;

          while(TRUE){

          AppTask7Ctr++;

          #ifOS_Q_EN>0

          pmsg=(char*)OSQPend(EventQ2,0,&err);

          strcpy(s,pmsg);

          #endif

          OSTimeDly(1);

          }

          }

          staticvoidAppTask8(void*pdata)

          {

          INT8Uerr;

          pdata=pdata;

          while(TRUE){

          AppTask8Ctr++;

          #ifOS_FLAG_EN>0

          OSFlagPost(FlagGrp1,0x000F,OS_FLAG_SET,&err);

          OSTimeDly(100);

          OSFlagPost(FlagGrp1,0x00F0,OS_FLAG_SET,&err);

          OSTimeDly(100);

          OSFlagPost(FlagGrp1,0x0F00,OS_FLAG_SET,&err);

          OSTimeDly(100);

          OSFlagPost(FlagGrp1,0xF000,OS_FLAG_SET,&err);

          OSTimeDly(100);

          #endif

          OSTimeDly(1);

          }

          }

          staticvoidAppTask9(void*pdata)

          {

          INT8Uerr;

          pdata=pdata;

          while(TRUE){

          AppTask9Ctr++;

          #ifOS_FLAG_EN>0

          OSFlagPend(FlagGrp1,0x00FF,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,100,&err);

          #endif

          OSTimeDly(100);

          }

          }

          staticvoidAppTaskA(void*pdata)

          {

          INT8Uerr;

          pdata=pdata;

          while(TRUE){

          AppTaskACtr++;

          #ifOS_FLAG_EN>0

          OSFlagPend(FlagGrp1,0xFF00,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,100,&err);

          #endif

          OSTimeDly(100);

          }

          }

          staticvoidAppTaskB(void*pdata)

          {

          INT8Uerr;

          pdata=pdata;

          while(TRUE){

          AppTaskBCtr++;

          #ifOS_FLAG_EN>0

          OSFlagPend(FlagGrp1,0x0FF0,OS_FLAG_WAIT_SET_ALL+OS_FLAG_CONSUME,100,&err);

          #endif

          OSTimeDly(100);

          }

          }

          staticvoidAppTaskC(void*pdata)

          {

          INT8Uerr;

          pdata=pdata;

          while(TRUE){

          AppTaskCCtr++;

          #ifOS_MUTEX_EN>0

          OSMutexPend(EventMutex1,0,&err);

          OSTimeDly(100);

          OSMutexPost(EventMutex1);

          #endif

          OSTimeDly(1);

          }

          }

          staticvoidAppTaskD(void*pdata)

          {

          INT8Uerr;

          pdata=pdata;

          while(TRUE){

          AppTaskDCtr++;

          #ifOS_MUTEX_EN>0

          OSMutexPend(EventMutex1,0,&err);

          OSTimeDly(100);

          OSMutexPost(EventMutex1);

          #endif

          OSTimeDly(1);

          }

          }

          staticvoidAppTaskE(void*pdata)

          {

          INT8Uerr;

          pdata=pdata;

          while(TRUE){

          AppTaskECtr++;

          #ifOS_MBOX_EN>0

          OSMboxPost(EventMbox1,(void*)"Msg#1");

          OSTimeDly(100);

          OSMboxPost(EventMbox1,(void*)"Msg#2");

          OSTimeDly(100);

          OSMboxPost(EventMbox1,(void*)"Msg#3");

          OSTimeDly(100);

          #endif

          OSTimeDly(1);

          }

          }

          staticvoidAppTaskF(void*pdata)

          {

          INT8Uerr;

          char*pmsg;

          chars[30];

          pdata=pdata;

          while(TRUE){

          AppTaskFCtr++;

          #ifOS_MBOX_EN>0

          pmsg=(char*)OSMboxPend(EventMbox1,0,&err);

          strcpy(s,pmsg);

          #endif

          OSTimeDly(1);

          }

          }

          staticvoidAppTickInit(void)

          {

          TSCR1=0x80;

          #ifOS_TICK_OC==0

          TIOS|=0x01;

          TC0=TCNT+OS_TICK_OC_CNTS;

          TCTL2|=0x01;

          TIE|=0x01;

          #endif

          #ifOS_TICK_OC==1

          TIOS|=0x02;

          TC1=TCNT+OS_TICK_OC_CNTS;

          TCTL2|=0x04;

          TIE|=0x02;

          #endif

          #ifOS_TICK_OC==2

          TIOS|=0x04;

          TC2=TCNT+OS_TICK_OC_CNTS;

          TCTL2|=0x10;

          TIE|=0x04;

          #endif

          #ifOS_TICK_OC==3

          TIOS|=0x08;

          TC3=TCNT+OS_TICK_OC_CNTS;

          TCTL2|=0x40;

          TIE|=0x08;

          #endif

          #ifOS_TICK_OC==4

          TIOS|=0x10;

          TC4=TCNT+OS_TICK_OC_CNTS;

          TCTL1|=0x01;

          TIE|=0x10;

          #endif

          #ifOS_TICK_OC==5

          TIOS|=0x20;

          TC5=TCNT+OS_TICK_OC_CNTS;

          TCTL1|=0x04;

          TIE|=0x20;

          #endif

          #ifOS_TICK_OC==6

          TIOS|=0x40;

          TC6=TCNT+OS_TICK_OC_CNTS;

          TCTL1|=0x10;

          TIE|=0x40;

          #endif

          #ifOS_TICK_OC==7

          TIOS|=0x80;

          TC7=TCNT+OS_TICK_OC_CNTS;

          TCTL1|=0x40;

          TIE|=0x80;

          #endif

          }



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();