freertos操作系统——任务调度

一. 任务创建
目的:

  1. 应用程序中如何给各任务分配处理时间;

  2. 任意时刻,os如何使任务投入运行;

  3. 优先级如何影响系统行为;

  4. 任务状态;

  5. 如何实现任务;

  6. 创建一个或多个任务的实例;

  7. 任务参数的使用 right

  8. 改变任务优先级

  9. 删除任务

  10. 周期性处理

  11. 空闲任务何时运行,可以用来干什么;

解决:

  1. 任务实现—任务函数—void ATaskFunction(void* para);为
  2. 任务删除—vTaskDelete(NULL); 表示删除当前任务;但是任务删除时存在两部分的内存需要被释放:1. 内核为任务分配的内存在任务删除时被回收,2. 任务本身,比如代码之类的需要用户自己释放。
  3. 任务创建—xTaskCreate(函数名,描述性名字,堆栈深度,传入任务函数的参数,任务优先级,函数句柄);
  4. 任务开始调度—vTaskStartScheduler ();
  5. 任务优先级设置函数:vTaskPrioritySet(函数句柄,优先级数字);相关文件FreeRTOSConfig.h
    获取优先级:vTaskPrioriityGeet(任务句柄)
  6. 任务参数的设置,
  7. 任务状态,详见Freertos内核开发手册p21——1;
  8. 周期性处理:使用API函数——vTaskDelay()函数实现;延时过程中任务将被阻塞,延时结束后,任务进入就绪,延时时间是相对于API被调度的时间的。vTaskDelayUntil(当前时间,时间增量),精准延时。
  9. 空闲任务:在调度器启动时,自行创建的一个任务idle。程序员可以通过空闲钩子函数设置系统默认执行的状态。详见例子1。
    疑问:
  10. 为什么一个任务函数可以创建多个任务;
    解答:参考内核开发手册p15,只有一个任务函数,,但是可以使用多次Create()API函数。
  11. freeRTOS 调度器什么时侯启动调度;
    解答: 每一个任务有一个时间片的概念,为了完成调度,在每个时间片的结束后,调度器运行自身——心跳中断的周期性中断完成调度,在中断执行完成后,cpu自行切换到下一个任务进行调度。在FreeRTOSConfig.h中配置常量configTICK_PATH_HZ设置频率。PortTICK_PATH_MS将以心跳为单位的时间值转化为以毫秒为单位的时间值。
    补充:
    Freertos任务调度方式: 抢占式、时间片式
    抢占式:任务会一直运行到被高优先级的任务抢占或者被阻塞式函数所阻挡,没有时间片的概念,饿死现象
    时间片式子:每个任务的优先级相同,任务会运行到固定时间片或者被阻塞,才会执行同优先级
    调度方式的设置:在配置文件FreeRTOSConfig.h中禁止时间片调度,系统默认的方式是时间片的调度。
    C语言volatille关键字:
    多任务时,该标志可以作为进程共享变量的标志。
    扩展“非运行态”:
    对于高优先级人任务,我们需要在设置一个任务驱动事件,只有在该事件执行以后,高优先级的任务才可以顺利的进行,否则执行低优先级不需要驱动事件的任务文档中使用了API函数vTaskDelay()和vTaskDelayUntil()作为驱动事件。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值