UCOS操作系统堆栈浅谈
ne TASK_13_PRIO 13
#define TASK_14_PRIO 14
#define TASK_15_PRIO 15
/*see task stacks*/
OS_STK TaskStartStk[TASK_START_STK_SIZE];
OS_STK BuzzerStk[BUZZER_STK_SIZE];
OS_STK CtrlmsgStk[CTRLMSG_STK_SIZE];
OS_STK StorDevStk[STORDEV_MOUNT_STK_SIZE];
OS_STK ModeSwitchStk[MODE_SWITCH_STK_SIZE];
OS_STK ModeExeStk[MODE_EXE_STK_SIZE];
static void TaskStart(void *p_arg); //函数声明
static void TaskStartCreateTasks(void);
void InitStackMark(void);
//************************************************************************************
//* 函数名 :main
//* 返回值 :N/A
//* 参数 :N/A
//* 函数说明:主函数
//* 作 者:啊呆
//***********************************************************************************
void main(void)
{
INT8U err;
// initialize uC/OS-II
OSInit();
// install uC/OS-IIs context switch vector
IRQSetVect(uCOS, OSCtxSw);
OSTaskCreateExt(TaskStart,
(void *)0,
&TaskStartStk[TASK_START_STK_SIZE - 1],
TASK_START_PRIO,
TASK_START_ID,
&TaskStartStk[0],
TASK_START_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CLR + OS_TASK_OPT_STK_CHK);
OSTaskNameSet(TASK_START_PRIO, "Start Task", &err);
// start multitasking
OSStart();
}
//*********************************************************************************
//* 函数名 :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
UCOS操作系统堆 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)