UCOS操作系統(tǒng)堆棧淺談
//*********************************************************************************
//* 函數(shù)名 :TaskStart
//* 返回值 :N/A
//* 參數(shù) :void *p_arg
//* 函數(shù)說明:創(chuàng)建TaskStart任務(wù)
//* 作 者:啊呆
//********************************************************************************
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)建任務(wù)
//* 作 者:啊呆
//******************************************************************************
static void TaskStartCreateTasks(void)
{
//初始化,創(chuàng)建每個任務(wù)對應(yīng)需要的信號量
init_buzzer_proc();
init_ModeEXE_proc();
init_ctrlmsg_get_proc();
init_twoChRec_proc();
InitStackMark();
//創(chuàng)建任務(wù)
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;
關(guān)鍵詞:
UCOS操作系統(tǒng)堆
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號放大器
評論