微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > UCOS操作系统堆栈浅谈

UCOS操作系统堆栈浅谈

时间:12-01 来源:互联网 点击:

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top