用html做家谱网站代码,wordpress 短标签,自定义网站主页设计,做t恤网站 一件也可以做接着上一讲奔腾的心#xff1a;FreeRTOS 从入门到精通5--详解任务管理上zhuanlan.zhihu.com在这一讲中我将要介绍任务的运行模式#xff0c;同时与可编程控制器#xff08;PLC#xff09;以及安卓系统的运行模式进行比较。我在德国读书时专业是嵌入式开发#xff0c;工作…接着上一讲奔腾的心FreeRTOS 从入门到精通5--详解任务管理上zhuanlan.zhihu.com在这一讲中我将要介绍任务的运行模式同时与可编程控制器PLC以及安卓系统的运行模式进行比较。我在德国读书时专业是嵌入式开发工作后从事的是西门子PCS7过程系统的编程业余学习了安卓开发。在学习的过程中我逐渐意识到单片机PLC和智能手机本质上上都是一类控制器很多对于系统开发的理念都是相近互通的基于此便产生一种想法想在介绍FreeRTOS的任务管理时同时对比下PLC和安卓的任务管理机制。首先我们先看一下FreeRTOS的任务状态的转化图FreeRTOS的任务状态转化图其中每个状态的含义如下阻塞状态Blocked当任务等待某个事件或信号的时候处于此状态挂起状态Suspended当任务被vTaskSuspend()函数禁止运行的时候处于此状态就绪状态Ready当任务没有被阻塞或者挂起等待运行的时候处于此状态运行状态Running当任务被内核调度执行的时候处于此状态在系统初始化所有任务被创建的时候任务一开始都处于就绪状态Ready然后内核调度器开始调度首先选择执行优先级最高的任务此时被执行的任务处于运行状态Running。当任务执行延时命令或者等待某个同步事件的时候便交出了自己的运行权此时将处于阻塞状态Blocked。在任务运行的时候它可以通过vTaskSuspend()函数将其他任务或者自身挂起进入挂起状态Suspended。被挂起的任务只有通过vTaskResume()函数恢复成就绪状态Ready。接下来让我们看看程序在可编程逻辑器PLC中的运行机制。PLC程序的运行机制在PLC中一般任务都是写好后顺序执行的。在读取输入阶段PLC扫描所有输入端子并将各输入端的通/断状态存入相对应的输入映像寄存器中刷新输入映像寄存器的值。CPU对用户程序按顺序进行扫描逐条执行程序指令。在用户程序执行完毕后PLC将输出映像寄存器中的通/断状态送到输出锁存器中通过输出端子驱动用户输出设备或带动负载。在这里可以把PLC中运行的任务看作是优先级相同的任务任务之间不会互相抢占运行的权利内核调度器类似合作式调度Co-operative Scheduling- 按照预设的顺序先后执行控制任务。因为PLC程序的运行都是可预测的所以PLC更适合对稳定性实时性要求更高的工业领域。最后让我们看看安卓系统中任务的运行模式有个专有名词叫生命周期。在安卓编程中每个活动Activity包含一个画面和对应的程序这里可以类比成一个任务。活动通过OnCreate()函数创建通过OnStart()函数启动当被其他活动抢占之后会通过onPause()函数暂停并通过onStop()函数停止此时活动将在手机屏幕上消失。被停止的活动通过OnRestart()函数重新运行或者通过onDestroy()函数被销毁。活动的生命周期FreeRTOS中任务的运行状态机制和安卓编程中活动的生命周期比较相似。FreeRTOS通过xTaskCreate()函数创建任务相当于安卓的onCreate()函数FreeRTOS通过vTaskSuspend()函数挂起任务相当于安卓的onPause()函数FreeRTOS通过vTaskResume()函数恢复任务到就绪状态相当于安卓的onResume()函数FreeRTOS通过vTaskDelete()函数删除任务相当于安卓的onDestroy()函数。通过这些相似之处可以看到学好FreeRTOS对于安卓开发也有裨益而玩转了嵌入式和安卓编程融会贯通硬件和软件开发你将立于紫禁城之巅成为每个产品经理最缺的那个程序员大神。FreeRTOS的调度算法及配置抢占式时间片调度Prioritized Pre-emptive Scheduling with Time Slicing这是比较通用的调度方式上一篇提到的温度检测系统采用的就是这种方式。内核调度器在每个时间片结束的时候执行一次选择处于就绪状态的任务中优先级最高的任务置于下一个时间片执行。如果优先级相同的话则交替执行。此时FreeRTOSConfig.h头文件的设置如下configUSE_PREEMPTION允许抢占 1configUSE_TIME_SLICING采用时间片 1抢占式无时间片调度Prioritized Pre-emptive Scheduling without Time Slicing在这种调度方式下因为没有采取时间片所以调度器的执行开销会比较小。如果两个任务的优先级相同的话在抢占式时间片调度下两个任务会交替运行然而在抢占式无时间片调度下当前运行的任务会一直运行直到它进入阻塞或者挂起状态另一个相同优先级的任务才会运行。高优先级的任务会抢占低优先任务。此时FreeRTOSConfig.h头文件的设置如下configUSE_PREEMPTION允许抢占 1configUSE_TIME_SLICING采用时间片 0合作式调度Co-operative Scheduling这种调度模式下当前执行任务将会一直运行同时高优先级的任务不会抢占低优先级任务。内核调度只会在当前执行任务进入阻塞状态的时候才会执行选择处于就绪状态的任务中优先级最高的任务进行执行。此时FreeRTOSConfig.h头文件的设置如下configUSE_PREEMPTION允许抢占 0configUSE_TIME_SLICING采用时间片 任意在下一讲中我将介绍FreeRTOS中队列管理的知识。队列管理Queue Management提供了任务之间任务和中断之间的通讯机制。奔腾的心FreeRTOS 从入门到精通7--队列管理zhuanlan.zhihu.com