新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ucos-ii學習筆記——s12移植成功main函數

        ucos-ii學習筆記——s12移植成功main函數

        作者: 時間:2016-11-28 來源:網絡 收藏
        Createdon:2012-10-9

        Author:zhangbin

        本文引用地址:http://www.104case.com/article/201611/322854.htm

        學習筆記

        forucos-iiMC9S12XS128

        redesignedbyzhangbin

        2012-10-9

        versions:V-0.1

        AllRightsReserved

        #include"includes.h"

        #include"pll.h"

        #include"string.h"

        #defineTASK_STK_SIZE128//定義任務堆棧長度

        #defineTASK_START_PRIO5//此版本的uC/OS-II最多支持256個用戶定義任務。優先級號越低,任務的優先級別就越高

        #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];//定義任務堆棧

        OS_STKled_task_2_stk[TASK_STK_SIZE];

        OS_STKAppStartTaskStk[TASK_STK_SIZE];//創建任務堆棧OS_STK創建任務參數指針TASKDATA,調用函數創建任務

        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;//定義第八路傳感器故障時的變量

        #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

        //任務的函數聲明

        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的初始化函數

        voidled_init()

        {

        DDRB=0xff;//B口設為輸出

        PORTB=0xff;//設為高電平,滅燈

        }

        voidmain(void)

        {//因為沒有外設,所以不存在硬件初始化函數

        INT8Uerr;

        INT16UStartdata=0x1234;//開始執行的位置另一種定義方式:TASKDATA.myPPAGE=0x1234,為結構體變量的初始化

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

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

        led_init();//led初始化

        OSInit();

        //創建起始任務,作用:初始化時鐘滴答,為操作系統提供時鐘。初始化統計任務,創建應用任務,建立事件

        OSTaskCreateExt(AppStartTask,//創建開始任務處于休眠態的任務經過這個函數處理后轉為就緒態

        (void*)&Startdata,

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

        TASK_START_PRIO,//優先級為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);//設置任務的名稱作用??

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

        OSTaskNameSet(OS_TASK_STAT_PRIO,"uC/OS-IIStat",&err);//統計任務

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

        //因為在本系統中os_cfg_r.h文件中把OS_TASK_STAT_EN設為了1(如上),所以系統的統計任務會建立

        //統計任務的建立是在OSInit()中被創建的,代碼如下:

        OSStart();

        }

        staticvoidAppStartTask(void*pdata)

        {

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

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

        OSStatInit();//初始化統計任務

        AppTaskCreate();//創建應用任務

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

        while(TRUE)//任務一般都是一個無限循環的結構

        {

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

        //該起始任務第一次運行以后,就一直處于掛起等待狀態

        }

        }

        staticvoidAppTaskCreate(void)//使1-f的任務處于就緒態,一旦OSstart(),優先級最高的任務獲得CPU的使用權

        {

        //INT8Uerr;

        OSTaskCreate(led_task_1,(void*)0,&led_task_1_stk[TASK_STK_SIZE-1],6);//創建任務led_task_1,優先級為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)//任務led_task_1的函數代碼

        {

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

        for(;;)

        {

        PORTB=0xf0;

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

        }

        }

        staticvoidled_task_2(void*pdata)

        {

        pdata=pdata;//pdata沒有用到,這樣的目的是防止編譯器提出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通道級聯

        LcdClear();

        DDRT=0x00;//將PORTT設置為輸入

        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

        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新干县| 扎兰屯市| 阳原县| 茂名市| 横峰县| 延津县| 大名县| 宁都县| 通渭县| 栾川县| 叶城县| 洪洞县| 云梦县| 渝北区| 海南省| 吴旗县| 英吉沙县| 皋兰县| 呼图壁县| 秦皇岛市| 柯坪县| 垦利县| 开封市| 宁明县| 兴国县| 抚松县| 泾源县| 大理市| 孟州市| 平定县| 昌宁县| 灌南县| 额敏县| 苍南县| 墨竹工卡县| 英吉沙县| 孟连| 河北省| 宁都县| 修水县| 乐平市|