新聞中心

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

        UCOS操作系統堆棧淺談

        作者: 時間:2016-12-01 來源:網絡 收藏
        //*********************************************************************************
        //* 函數名 :TaskStart
        //* 返回值 :N/A
        //* 參數 :void *p_arg
        //* 函數說明:創建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);
        }
        }
        //*******************************************************************************
        //* 函數名 :TaskStartCreateTasks
        //* 返回值 :N/A
        //* 參數 :N/A
        //* 函數說明:創建任務
        //* 作 者:啊呆
        //******************************************************************************
        static void TaskStartCreateTasks(void)
        {
        //初始化,創建每個任務對應需要的信號量
        init_buzzer_proc();
        init_ModeEXE_proc();
        init_ctrlmsg_get_proc();
        init_twoChRec_proc();
        InitStackMark();
        //創建任務
        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);
        }
        //**************************************************************************
        //* 函數名 :InitStackMark
        //* 返回值 :N/A
        //* 參數 :N/A
        //* 函數說明:初始化堆棧棧頂
        //* 作 者:啊呆
        //**************************************************************************
        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;
        }
        //*****************************************************************************
        //* 函數名 : CheckStkOverFlow
        //* 返回值 :BOOLEAN
        //* 參數 :INT8U TaskName
        //* 函數說明:初檢測堆棧溢出
        //* 作 者:啊呆
        //******************************************************************************
        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 下一頁

        關鍵詞: UCOS操作系統堆

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 建平县| 稻城县| 肥西县| 白河县| 桦川县| 云霄县| 新疆| 隆林| 昂仁县| 沙湾县| 响水县| 萝北县| 平顶山市| 墨玉县| 石狮市| 黄陵县| 双辽市| 安福县| 玉林市| 于都县| 嘉荫县| 唐海县| 西安市| 合山市| 兖州市| 涿鹿县| 甘泉县| 信阳市| 靖宇县| 辰溪县| 大安市| 米林县| 珲春市| 廉江市| 黄陵县| 宝坻区| 德清县| 玉溪市| 霍州市| 建德市| 神农架林区|