中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > UCOS操作系統(tǒng)堆棧淺談

        UCOS操作系統(tǒng)堆棧淺談

        作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏
        //*********************************************************************************
        //* 函數(shù)名 :TaskStart
        //* 返回值 :N/A
        //* 參數(shù) :void *p_arg
        //* 函數(shù)說明:創(chuàng)建TaskStart任務
        //* 作 者:啊呆
        //********************************************************************************
        static void TaskStart(void *p_arg)
        {
        #if OS_CRITICAL_METHOD == 3
        OS_CPU_SR cpu_sr;
        #endif
        // prevent compiler warning
        p_arg = p_arg;
        // install uC/OS-IIs clock tick ISR
        OS_ENTER_CRITICAL();
        IRQSetVect(TMR1_VEC, OSTickISR);
        OSSetTickRate(lc_clk_get_freq(CLK_SYS_SEL), OS_TICKS_PER_SEC);
        OS_EXIT_CRITICAL();
        // initialize uC/OS-IIs statistics
        OSStatInit();
        TaskStartCreateTasks();
        for (;;)
        {
        // clear the context switch counter
        OSCtxSwCtr = 0;
        // wait one second
        OSTimeDly(OS_TICKS_PER_SEC);
        }
        }
        //*******************************************************************************
        //* 函數(shù)名 :TaskStartCreateTasks
        //* 返回值 :N/A
        //* 參數(shù) :N/A
        //* 函數(shù)說明:創(chuàng)建任務
        //* 作 者:啊呆
        //******************************************************************************
        static void TaskStartCreateTasks(void)
        {
        //初始化,創(chuàng)建每個任務對應需要的信號量
        init_buzzer_proc();
        init_ModeEXE_proc();
        init_ctrlmsg_get_proc();
        init_twoChRec_proc();
        InitStackMark();
        //創(chuàng)建任務
        OSTaskCreate(buzzer_proc, (void *)0, &BuzzerStk[BUZZER_STK_SIZE-1], TASK_3_PRIO);
        OSTaskCreate(ctrlmsg_get_proc, (void *)0, &CtrlmsgStk[CTRLMSG_STK_SIZE-1], TASK_5_PRIO);
        OSTaskCreate(stordev_mount_proc, (void *)0, &StorDevStk[STORDEV_MOUNT_STK_SIZE-1], TASK_6_PRIO);
        OSTaskCreate(mode_switch_proc, (void *)0, &ModeSwitchStk[MODE_SWITCH_STK_SIZE-1], TASK_7_PRIO);
        OSTaskCreate(ModeEXE_proc, (void *)0, &ModeExeStk[MODE_EXE_STK_SIZE-1], TASK_11_PRIO);
        }
        //**************************************************************************
        //* 函數(shù)名 :InitStackMark
        //* 返回值 :N/A
        //* 參數(shù) :N/A
        //* 函數(shù)說明:初始化堆棧棧頂
        //* 作 者:啊呆
        //**************************************************************************
        void InitStackMark(void)
        {
        //初始化每個堆棧棧頂
        BuzzerStk[0]=0x5153;
        BuzzerStk[1]=0xAA55;
        CtrlmsgStk[0]=0x5153;
        CtrlmsgStk[1]=0xAA55;
        StorDevStk[0]=0x5153;
        StorDevStk[1]=0xAA55;
        ModeSwitchStk[0]=0x5153;
        ModeSwitchStk[1]=0xAA55;
        ModeExeStk[0]=0x5153;
        ModeExeStk[1]=0xAA55;
        }
        //*****************************************************************************
        //* 函數(shù)名 : CheckStkOverFlow
        //* 返回值 :BOOLEAN
        //* 參數(shù) :INT8U TaskName
        //* 函數(shù)說明:初檢測堆棧溢出
        //* 作 者:啊呆
        //******************************************************************************
        BOOLEAN CheckStkOverFlow(INT8U TaskName)
        {
        //判斷是否堆棧溢出
        if(TaskName==buzzer)
        {
        if(BuzzerStk[0]==0x5153 && BuzzerStk[1]==0xAA55)
        return FALSE;
        }
        else if(TaskName==ctrlmsg)
        {
        if(CtrlmsgStk[0]==0x5153 && CtrlmsgStk[1]==0xAA55)
        return FALSE;
        }
        else if(TaskName==stordev_mount)
        {
        if(StorDevStk[0]==0x5153 && StorDevStk[1]==0xAA55)
        return FALSE;
        }
        else if(TaskName==mode_switch)
        {
        if(ModeSwitchStk[0]==0x5153 && ModeSwitchStk[1]==0xAA55)
        return FALSE;
        }
        else if(TaskName==ModeEXE)
        {
        if(ModeExeStk[0]==0x5153 && ModeExeStk[1]==0xAA55)
        return FALSE;
        }
        return TRUE;
        }
        上一頁 1 2 下一頁

        評論


        技術專區(qū)

        關閉