《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
1.1、任务的创建
UCOSIII 中要想使用任务,第一件事就是创建一个任务,创建任务使用函数 OSTaskCreate()
void OSTaskCreate (OS_TCB *p_tcb,
CPU_CHAR *p_name,
OS_TASK_PTR p_task,
void *p_arg,
OS_PRIO prio,
CPU_STK *p_stk_base,
CPU_STK_SIZE stk_limit,
CPU_STK_SIZE stk_size,
OS_MSG_QTY q_size,
OS_TICK time_quanta,
void *p_ext,
OS_OPT opt,
OS_ERR *p_err)
任务控制块
OSTaskCreate((OS_TCB * )&StartTaskTCB,
任务名字
(CPU_CHAR * )“start task”,
任务函数:(OS_TASK_PTR )start_task,
//开始任务任务函数
void start_task(void *p_arg)
{
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg;
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 //当使用时间片轮转的时候
//使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5ms
OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);
#endif
OS_CRITICAL_ENTER(); //进入临界区
//创建TASK1任务
OSTaskCreate((OS_TCB * )&Task1_TaskTCB,
(CPU_CHAR * )“Task1 task”,
(OS_TASK_PTR )task1_task,
(void * )0,
(OS_PRIO )TASK1_TASK_PRIO,
(CPU_STK * )&TASK1_TASK_STK[0],
(CPU_STK_SIZE)TASK1_STK_SIZE/10,
(CPU_STK_SIZE)TASK1_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void * )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR * )&err);
//创建TASK2任务
OSTaskCreate((OS_TCB * )&Task2_TaskTCB,
(CPU_CHAR * )“task2 task”,
(OS_TASK_PTR )task2_task,
(void * )0,
(OS_PRIO )TASK2_TASK_PRIO,
(CPU_STK * )&TASK2_TASK_STK[0],
(CPU_STK_SIZE)TASK2_STK_SIZE/10,
(CPU_STK_SIZE)TASK2_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void * )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR * )&err);
OS_CRITICAL_EXIT(); //退出临界区
OSTaskDel((OS_TCB*)0,&err); //删除start_task任务自身
}
传递给任务函数的参数:void *p_arg,
(void * )0,
任务优先级:OS_PRIO prio,
(OS_PRIO )START_TASK_PRIO,
任务堆栈的基地址:CPU_STK *p_stk_base,
(CPU_STK * )&START_TASK_STK[0],
任务堆栈深度限位:CPU_STK_SIZE stk_limit,
(CPU_STK_SIZE)START_STK_SIZE/10,
任务堆栈大小:CPU_STK_SIZE stk_size,
(CPU_STK_SIZE)START_STK_SIZE,
任务内部消息队列能够接收的最大消息数目,为0时禁止接收消息:OS_MSG_QTY q_size,
(OS_MSG_QTY )0,
当使能时间片轮转时的时间片长度,为0时为默认长度:OS_TICK time_quanta,
(OS_TICK )0,
用户补充的存储区:void *p_ext,
(void * )0,
读者福利
由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴
更多笔记分享
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
长,就不展示所有面试题了,感兴趣的小伙伴**
[外链图片转存中…(img-3yfU1I8S-1714681734008)]
[外链图片转存中…(img-agKEBb3a-1714681734008)]
[外链图片转存中…(img-RXDXjmUK-1714681734008)]
更多笔记分享
[外链图片转存中…(img-MdFbADdq-1714681734009)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!