新闻中心

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操作系统堆

评论


技术专区