ucosIII 任务创建与删除,任务挂起与恢复,时间片轮转调度
2015-12-18 07:10
309 查看
本文导读: 一共分为三部分: 第一部分:任务创建与删除。重点在于理解任务创建的各个参数即可。 第二部分:任务挂起和恢复。函数比较简单,看看即可。 第三部分:时间片调度 重点在于第三部分代码讲解 |
任务创建与删除 |
创建 |
切记:在没有使用时间片轮转的时候,任何任务的优先级不能相同
任务创建思路,在main中只创建一个start任务,然后在其中创建其他任务
//任务优先级 #define TASK2_TASK_PRIO 4 //任务堆栈大小 #define TASK2_STK_SIZE 128 //任务控制块 OS_TCB Task2_TaskTCB; //任务堆栈 CPU_STK TASK2_TASK_STK[TASK2_STK_SIZE]; //任务函数 void task2_task(void *p_arg); CPU_SR_ALLOC(); ... OS_CRITICAL_ENTER(); //进入临界区 //任务创建 OSTaskCreate((OS_TCB * )&StartTaskTCB, //任务控制块 (CPU_CHAR * )"start task", //任务名称 (OS_TASK_PTR )start_task, //任务函数 (void * )0, //任务函数的参数,一般不用,这里直接设置为0 (OS_PRIO )START_TASK_PRIO, //任务优先级 (CPU_STK * )&START_TASK_STK[0], //任务堆栈基址 (CPU_STK_SIZE)START_STK_SIZE/10, //任务堆栈的栈深 (CPU_STK_SIZE)START_STK_SIZE, //任务堆栈大小 (OS_MSG_QTY )0, //内建消息队列长度 (OS_TICK )0, //时间片长度(单位时钟节拍)。0:表示为默认值。为OS_CFG_TICK_RATE 200u/10.为20个节拍,也就是100ms (void * )0, //用户补充的存储区,用于扩展PCB,一般不用。 (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //选择检查和清除STK功能(SAVE_FP浮点处理的,不用管,移植的时候已经处理) (OS_ERR * )&err); //错误信息 OS_CRITICAL_EXIT(); //退出临界区
记得在创建任务的时候要进入临界区。并且进入临界区之前,要调用CPU_SR_ALLOC();
OSTimeDlyHMSM(1h, 1m, 1s, 1ms)//括号内为参数的实际含义
删除 |
void OSTaskDel (OS_TCB *p_tcb, //需要删除的PCB OS_ERR *p_err) //错误信息
一般不在系统运行时删除:比如a,b使用信号量,删除了a之后,会影响到b任务
任务挂起与恢复 |
挂起 |
void OSTaskSuspend (OS_TCB *p_tcb, OS_ERR *p_err)
可能的err值
OS_ERR_SCHED_LOCKED //you can't suspend the current task is the scheduler is locked //(ISR中断服务函数) OS_ERR_TASK_SUSPEND_ISR //if you called this function from an ISR OS_ERR_TASK_SUSPEND_IDLE //if you attempted to suspend the idle task which is not allowed. OS_ERR_TASK_SUSPEND_INT_HANDLER //if you attempted to suspend the idle task which is not
恢复 |
void OSTaskResume (OS_TCB *p_tcb, OS_ERR *p_err)
挂起和恢复比较简单。随便写写代码即可。
时间片轮转 |
时间片调度初步 |
该函数由OSTimeTick或者OS_IntQTask()调用的
配置 |
步骤二:调用OSSchedRoundRobinCfg 进行配置
void OSSchedRoundRobinCfg (CPU_BOOLEAN en, //两个之间多少时钟节拍,0:为默认的OS_CFG_TICK_RATE/10 OS_TICK dflt_time_quanta, OS_ERR *p_err);
放弃时间片 |
void OSSchedRoundRobinYield (OS_ERR *p_err)
相关文章推荐
- 在团队协作中,该如何提交一份干净、可靠的代码给队友?
- Jmeter+maven+Jenkins构建云性能测试平台(一)
- EF+MVC+Bootstrap 项目实践 Day9
- Android M (API 23) 记录
- CPP-static members
- photoshop学习入门:选择和处理
- Bayes classifier
- photoshop学习入门:选择和处理
- [leetcode] 5. Longest Palindromic Substring 解题报告
- 《Software Testing》 exercise 3 : 安装并使用PICT
- 【jQuery】使用getJSON()方法异步加载JSON格式数据
- [#1]Least square and Nearest neighbors
- 【jQuery】使用load()方法异步请求数据
- 【jQuery】调用delay()方法延时执行动画效果
- [leetcode] 30. Substring with Concatenation of All Words 解题报告
- 【jQuery】调用stop()方法停止当前所有动画效果
- 【jQuery】调用animate()方法制作移动位置的动画
- 【jQuery】调用animate()方法制作简单的动画效果
- Vba Json
- 【jQuery】使用fadeTo()方法设置淡入淡出效果的不透明度