嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元微信扫码支付:2 元
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
STM32F446R UCOSIII移植模板,使用寄存器的方式移植,编译无错误,可参考或直接作为模板使用
#define START_TASK_PRIO 20 //任务优先级
#define START_STK_SIZE 256 //任务堆栈大小
OS_TCB StartTaskTCB; //任务控制块
CPU_STK StartTaskSTK[START_STK_SIZE]; //任务堆栈
void StartTask(void *p_arg); //任务函数
#define MAIN_TASK_PRIO 10 //任务优先级
#define MAIN_STK_SIZE 256 //任务堆栈大小
OS_TCB MainTaskTCB; //任务控制块
CPU_STK MainTaskSTK[MAIN_STK_SIZE]; //任务堆栈
//void Main_task(void *pdata);
//CPU_STK *mainTaskSTK; //任务堆栈
#define LED_TASK_PRIO 13 //任务优先级
#define LED_STK_SIZE 512 //任务堆栈大小
OS_TCB LedTaskTCB; //任务控制块
__align(8) CPU_STK LedTaskSTK[LED_STK_SIZE]; //任务堆栈
void Demo_Start(void)
{
OS_ERR err;
// CPU_SR_ALLOC(); ////进入临界区 声明函数
OSInit(&err); //初始化UCOSIII
//创建开始任务
OSTaskCreate((OS_TCB * )&StartTaskTCB, //任务控制块
(CPU_CHAR * )"Start task", //任务名字
(OS_TASK_PTR )StartTask, //任务函数
(void * )0, //传递给任务函数的参数
(OS_PRIO )START_TASK_PRIO, //任务优先级
(CPU_STK * )&StartTaskSTK[0],//任务堆栈基地址
(CPU_STK_SIZE)START_STK_SIZE/10,//任务堆栈深度限位 确保任务不溢出
(CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小
(OS_MSG_QTY )0, //任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息
(OS_TICK )0, //当使能时间片轮转时的时间片长度,为0时为默认长度,
(void * )0, //用户补充的存储区
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR|OS_OPT_TASK_SAVE_FP, //任务选项,为了保险起见,所有任务都保存浮点寄存器的值
(OS_ERR * )&err); //错误时的返回值
OSStart(&err); //开启UCOSIII
while(1)
{ /* 不会进入这里 */
}
}
//开始任务函数
void StartTask(void *p_arg)
{
OS_ERR err;
CPU_Init();
#if OS_CFG_STAT_TASK_EN > 0u
OSStatTaskCPUUsageInit(&err); //统计任务
#endif
#ifdef CPU_CFG_INT_DIS_MEAS_EN //如果使能了测量中断关闭时间
CPU_IntDisMeasMaxCurReset();
#endif
// #if OS_CFG_SCHED_ROUND_ROBIN_EN //当使用时间片轮转的时候
// //使能时间片轮转调度功能,设置默认的时间片长度s
// OSSchedRoundRobinCfg(DEF_ENABLED,10,&err);
// #endif
//创建主任务
OSTaskCreate(&MainTaskTCB,"main_task",main_task,0,MAIN_TASK_PRIO,&MainTaskSTK[0],MAIN_STK_SIZE/10,MAIN_STK_SIZE,0,0,0,
OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR|OS_OPT_TASK_SAVE_FP,&err);
//创建LED任务
OSTaskCreate(&LedTaskTCB,"led_task",led_task,0,LED_TASK_PRIO,&LedTaskSTK[0],LED_STK_SIZE/10,LED_STK_SIZE,0,0,0,
OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR|OS_OPT_TASK_SAVE_FP,&err);
OSTaskDel((OS_TCB *)&StartTaskTCB, &err); /* 删除Start Task */
}