ucosIII 任务创建与删除,任务挂起与恢复,时间片轮转调度
来源:互联网 发布:电脑软件专科学校 编辑:程序博客网 时间:2024/06/05 16:24
本文导读:
一共分为三部分:
第一部分:任务创建与删除。重点在于理解任务创建的各个参数即可。
第二部分:任务挂起和恢复。函数比较简单,看看即可。
第三部分:时间片调度
重点在于第三部分代码讲解
任务创建与删除
创建
- 步骤1:先调用OSTaskCreate创建任务 步骤2:使用OSStart(&err)开启任务
- 切记:在没有使用时间片轮转的时候,任何任务的优先级不能相同
- 任务创建思路,在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 ISROS_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)
- 挂起和恢复比较简单。随便写写代码即可。
时间片轮转
时间片调度是ucosIII才有的,ucosII是没有的。
时间片调度初步
时间片调度是通过OS_SchedRoundRobin()进行的。
该函数由OSTimeTick或者OS_IntQTask()调用的
配置
步骤一:OS_CFG_SCHED_ROUND_ROBIN_EN 宏置为一
步骤二:调用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)
1 0
- ucosIII 任务创建与删除,任务挂起与恢复,时间片轮转调度
- μC/OS调度器及任务创建、挂起、恢复、删除、初始化函数的使用
- ucos 任务的挂起与恢复
- FreeRTOS学习1--任务挂起与恢复
- uC/OS-II 学习笔记之:任务挂起与恢复,调度器上锁与解锁!
- UCOSII任务挂起,删除,恢复
- ucosIII(1)---任务调度
- 第三篇:uCOS-II 任务的创建,挂起,恢复,删除
- 嵌入式系统学习——STM32之UCOS-III任务基础API、时间片轮转调度和系统任务
- 时间片轮转调度算法
- 时间片轮转调度算法
- 时间片轮转调度算法
- 时间片轮转调度算法
- 07-时间片轮转调度
- VxWorks时间片轮转调度
- 时间片轮转 / 多任务 多线程解释 /抢占、非抢占
- 时间片轮转 / 多任务 多线程解释 /抢占、非抢占
- uc/os-ii任务的挂起与恢复
- CPP-static members
- Android M (API 23) 记录
- Jmeter+maven+Jenkins构建云性能测试平台(一)
- 在团队协作中,该如何提交一份干净、可靠的代码给队友?
- ES6学习——新的语法:let
- ucosIII 任务创建与删除,任务挂起与恢复,时间片轮转调度
- 是原创
- 逆向笔记之汇编(1)
- NSSArray总结
- 编程机制探析之运行栈与内存寻址
- 百度基础地图API- java.lang.UnsatisfiedLinkError、地图无法正确显示
- 内容提供者、内容解析者和内容观察者
- jmeter定时调度,持续并发,使用简介
- 使用JMeter进行负载测试——终极指南