edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...

f78e6c822e0a123c6e2d65f71cc13f9e.png

接着上一讲

奔腾的心:FreeRTOS 从入门到精通5--详解任务管理上​zhuanlan.zhihu.com
c5547872cda1c5eea2322338d5e6a343.png

在这一讲中我将要介绍任务的运行模式,同时与可编程控制器(PLC)以及安卓系统的运行模式进行比较。我在德国读书时专业是嵌入式开发,工作后从事的是西门子PCS7过程系统的编程,业余学习了安卓开发。在学习的过程中,我逐渐意识到单片机,PLC和智能手机本质上上都是一类控制器,很多对于系统开发的理念都是相近互通的,基于此便产生一种想法,想在介绍FreeRTOS的任务管理时,同时对比下PLC和安卓的任务管理机制。

首先,我们先看一下FreeRTOS的任务状态的转化图

9a4df6d179867344974c909b25fd4ba0.png
FreeRTOS的任务状态转化图

其中每个状态的含义如下

  • 阻塞状态(Blocked)当任务等待某个事件或信号的时候处于此状态
  • 挂起状态(Suspended)当任务被vTaskSuspend()函数禁止运行的时候处于此状态
  • 就绪状态(Ready)当任务没有被阻塞或者挂起等待运行的时候处于此状态
  • 运行状态(Running)当任务被内核调度执行的时候处于此状态

在系统初始化所有任务被创建的时候,任务一开始都处于就绪状态(Ready),然后内核调度器开始调度首先选择执行优先级最高的任务,此时被执行的任务处于运行状态(Running)。当任务执行延时命令或者等待某个同步事件的时候便交出了自己的运行权,此时将处于阻塞状态(Blocked)。在任务运行的时候,它可以通过vTaskSuspend()函数将其他任务或者自身挂起进入挂起状态(Suspended)。被挂起的任务只有通过vTaskResume()函数恢复成就绪状态(Ready)。

接下来,让我们看看程序在可编程逻辑器(PLC)中的运行机制。

3fc2938f781bc0bbc831484697aafa89.png
PLC程序的运行机制

在PLC中,一般任务都是写好后顺序执行的。在读取输入阶段,PLC扫描所有输入端子,并将各输入端的通/断状态存入相对应的输入映像寄存器中,刷新输入映像寄存器的值。CPU对用户程序按顺序进行扫描,逐条执行程序指令。在用户程序执行完毕后,PLC将输出映像寄存器中的通/断状态送到输出锁存器中,通过输出端子驱动用户输出设备或带动负载。在这里可以把PLC中运行的任务看作是优先级相同的任务,任务之间不会互相抢占运行的权利,内核调度器类似合作式调度(Co-operative Scheduling)- 按照预设的顺序先后执行控制任务。因为PLC程序的运行都是可预测的,所以PLC更适合对稳定性实时性要求更高的工业领域。

最后,让我们看看安卓系统中任务的运行模式,有个专有名词叫生命周期。在安卓编程中,每个活动(Activity)包含一个画面和对应的程序,这里可以类比成一个任务。活动通过OnCreate()函数创建,通过OnStart()函数启动,当被其他活动抢占之后会通过onPause()函数暂停并通过onStop()函数停止(此时活动将在手机屏幕上消失)。被停止的活动通过OnRestart()函数重新运行,或者通过onDestroy()函数被销毁。

dced65fd72916ac0c233b2185370d61b.png
活动的生命周期

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(允许抢占) 1

configUSE_TIME_SLICING(采用时间片) 1

抢占式无时间片调度(Prioritized Pre-emptive Scheduling without Time Slicing)

在这种调度方式下,因为没有采取时间片,所以调度器的执行开销会比较小。如果两个任务的优先级相同的话,在抢占式时间片调度下,两个任务会交替运行;然而在抢占式无时间片调度下,当前运行的任务会一直运行,直到它进入阻塞或者挂起状态,另一个相同优先级的任务才会运行。高优先级的任务会抢占低优先任务。此时,FreeRTOSConfig.h头文件的设置如下:

configUSE_PREEMPTION(允许抢占) 1

configUSE_TIME_SLICING(采用时间片) 0

合作式调度(Co-operative Scheduling)

这种调度模式下,当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务。内核调度只会在当前执行任务进入阻塞状态的时候才会执行,选择处于就绪状态的任务中优先级最高的任务进行执行。此时,FreeRTOSConfig.h头文件的设置如下:

configUSE_PREEMPTION(允许抢占) 0

configUSE_TIME_SLICING(采用时间片) 任意

在下一讲中,我将介绍FreeRTOS中队列管理的知识。队列管理(Queue Management)提供了任务之间,任务和中断之间的通讯机制。

奔腾的心:FreeRTOS 从入门到精通7--队列管理​zhuanlan.zhihu.com
2a2629f3b083d8ce85727a1f6e049ddc.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

礼物

礼物——大熊和小兔喜欢互送礼物,朋友总是这样。小兔给大熊送礼物有一个习惯—试试看。有一次,小兔送给大熊一本漫画书。 “哇,漫画书!”大熊马上接过书翻看起来。小老虎也围过来看,刚翻两页,小老虎就叫起来&#xff…

ps去水印教程_ps去水印教程,详细解析五种去水印的方法

平常我们从一些素材网站下载图片的时候,不免会带上一些水印,使图片的整体美感下降不少,今天教同学们五种去除水印的方法,相信你学习以后,有所收获,遇到喜欢的图片可以把不想要的水印去掉,不过水…

腾讯视频真实下载地址_腾讯视频如何多倍速播放视频

腾讯视频官网版是一款专注视频播放的客户端软件,您可运行腾讯视频,在线享受奇艺网站内全部免费高清正版视频。腾讯视频视频播放器内容丰富,影视更新快,包含腾讯视频所有的视频内容,在线享受腾讯视频站内全部免费高清正…

excel 图片转url_最全总结 | 聊聊 Python 办公自动化之 Excel(下)

聊聊 Python 数据处理全家桶(Memca 篇)点击上方“AirPython”,选择“加为星标”第一时间关注 Python 技术干货!1. 前言前面谈到 Python 处理 Excel 文件最常见的两种方式,即:xlrd/xlwt、openpyxl其中,xlrd/xlwt 这一组…

腾讯视频下载安装链接_腾讯视频怎么上传视频

今天继续给大家分享腾讯视频方面的内容。腾讯视频播放器是腾讯视频官方推出的一款视频客户端,致力于为用户提供高清、流畅、丰富的专业视频服务,在这里您可在线享受腾讯视频网站内全部免费高清正版视频。使用腾讯视频播放器,你可以享受到高清…

burpsuite csrf攻击_CSRF攻击的BurpSuite实战

今天做的是CSRF越权攻击,原理是通过在自己网站或者目标网站,通过模拟发包,替客户端发送请求。环境配置考虑其危害性,虽然不是很大,但是考虑到安全问题,所以本次演示需自己搭建实验环境,主要内容…

手机优酷下载视频怎么保存到手机

有时大家必须把一些视频文件格式下载出来看,防止在沒有总流量的情况下来收看,例如远途消磨时光,就可以收看下载好的视頻是十分非常好的挑选,那麼下边大家讨论一下怎样下载视頻到手机呢? 手机优酷下载视频怎么保存到手机 01、 最…

qml 鼠标点击_QML ListView在鼠标点击时不会响应

大家好,我已经尝试了几件事,但我不能让我的ListView响应鼠标点击。这是我的ListView代码:ListView {id: listview1x: 0y: 82// width: 574// height: 967width: window.widthheight: window.heightvisible: truekeyNavigationWraps: falsebou…

QQ浏览器不能播放视频怎么办?要如何解决

有很多用户在使用浏览器的时候会发现网页不能播放视频,那么这是什么情况呢,要如何解决呢,今天小编就会与大家一起来分享一个方法,让用户可以更好的解决这个问题,用户遇到这个问题的时候可以先看看自己的网络有没有问题…

日志中出现乱码_合宙Luat | 乱码搞得一团糟?开源神器帮你轻松修复

鎰熸仼鐩搁亣缇庡ソ鐨勬椂鍏変笌澶у鐩镐即2021锛屾柊骞村揩涔愶紒相信大家在日常生活中,都见过类似上面的字符串。这些看起来不明所以的内容,通常被称作乱码。那么乱码是如何产生的,并且如何修复呢?我们接下来将一步步讲解。1你…

QQ浏览器如何修改截屏快捷键?QQ浏览器修改截屏快捷键的方法

qq浏览器是一款非常好用的搜索服务软件,在日常生活中如果碰到有什么不懂的内容,都可以使用这款软件解决,使用非常的方便,随时都可以满足用户的搜索需求,用户在使用这款软件的时候可以使用到非常多的功能,随…

轮播高度_Qt编写自定义控件24-图片轮播控件

一、前言上一篇文章写的广告轮播控件,采用的传统widget堆积设置样式表做的,这次必须要用到更高级的QPainter来绘制了,这个才是最高效的办法,本控件参考雨田哥的轮播控件,经过大规模的改造而成,相比于原来的…

怎样更换UC浏览器的字体?更换UC浏览器的字体的方法

uc浏览器是一个非常好用的搜索服务软件,需要使用浏览器的用户可以使用手机在这里操作,用户在使用一个软件的时候,可以将这个浏览器设置成自己喜欢的字体,这样使用起来就会更加的方便,在阅读的时候,使用顺眼…

自定义按键_王者荣耀:自定义按键让你的百里守约百发百中

在王者荣耀中,有很多输出炸裂的射手,但是他们普遍手不够长!但是其中就有一位,他不仅手很长,而且打得还很疼!他就是刺客兼射手的——百里守约百里守约,他不是射手,是刺客!…

手机QQ浏览器如何同时下载多个文件

qq浏览器是一个非常多用户都喜欢使用的搜索软件,这款软件可以为用户提供非常多便捷的搜索服务,在使用这款软件的时候,很多用户会使用这款软件下载自己需要的文件,那么在使用这款软件的时候,要如何同时下载多个文件进行…

生成特征_使用gplearn自定义特征自动生成模块

背景:数据科学领域中,数据一直都是主要驱动力,特征工程作为其中重要一环,成为无论是kaggle类的数据竞赛,还是工业界应用中关注的重点。特征工程中有重要的一个环节叫做特征融合,好的特征融合能帮助构造当前…

腾讯视频电脑版下载_怎么样下载腾讯视频

软件是否好用,还得大家下载腾讯视频安装才知道。本文分享腾讯视频电脑版下载_怎么样下载腾讯视频。腾讯视频播放器不管是在界面设计、还是在功能操作使用、启动播放速度、视频内容数量、画面品质等方面均得到了用户的高度认可,是目前用户量最大的播放器软…

python数字对应车站_python爬虫查询车站信息

#车站信息查询import requests#1.获得url(存取车站信息的url)并读取,根据获得信息的特点去掉无用的信息并转换存储到列表中url"https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version1.9090"txtrequests.get(url).text#pri…

优酷视频如何进行连续播放?

优酷视频如何进行连续播放? 您可按下列方式打开和关掉持续播发: 移动端:开启优酷app-左上方【设定】-开启或关掉【持续播发】按键就可以。 pc端:开启优酷pc客户端-点一下左上方【设定】-启用或不启用【自始至终持续播发】就可以…

yaw公式_坐标系和yaw, pitch, roll等基础概念

坐标系右手坐标系:把右手拇指食指中指伸直并正交,拇指X,食指Y,中指Z。一般无特殊说明,都是右手坐标系。右手坐标系的旋转正方向:从轴的正方向看向原点,逆时针方向即是旋转正向。或者&#xff0c…