首页 > 其他分享 >FREE RTOS学习随记

FREE RTOS学习随记

时间:2024-03-11 15:44:55浏览次数:24  
标签:定时器 优先级 队列 RTOS FREE 任务 切换 随记

最近开始学习实时操作系统提升知识面,刚好STM32的开发板附赠了FREE RTOS的学习手册,就据此来学习吧,

所谓RTOS,即Real-Time Opreating System,实时操作系统,这个系统最大的好处就是通过一系列的算法,实现了多任务的灵活切换。单片机本身是单核的,只能单条代码依序执行,所以这个实时也只是伪实时,只是通过灵活切换任务,降低各个任务之间的延时,以达到实时的目的。

那么RTOS是怎么实现多任务切换和管理的呢?系统中有一个模块被称为“任务调度器”,其实就是通过产生中断,在中断中实现任务切换,STM32就是在PendSV中切换任务,每次需要切换任务的时候,就产生一个PendSV中断。

任务调度有两种方式,一种是被动切换,一种是主动切换。被动切换,就是任务完整的跑完一个系统时钟(也可以称为时间片),这个系统时钟是RTOS的系统时钟,由硬件定时器实现,一次定时器溢出为一个时间片,所以RTOS内的延时计时都是以这个为单位的,而不是以硬件的时钟源为单位,比如定时器溢出时间是1S,那么RTOS的时间片就是1S。当时间片用完时,硬件定时器就会产生中断,在中断函数里面又会产生一个PendSV中断。

另外一种是主动切换,主动切换任务就是将当前任务由运行状态进入阻塞状态。任务的状态分为就绪态,运行态,阻塞态,和挂起态。系统中同一时间只能有一个任务处于运行态,任务只能从就绪态进入运行态。

既然是多任务系统,那么各个任务之间就有个先后顺序,即任务优先级。系统只会运行最高优先级的任务,所以要想执行低优先级的任务,就有两个方法,一个是修改任务优先级,另一个就是阻塞高优先级的任务。

一般情况下,各个任务之间互不干涉,因此每个任务都需要申请一块内存空间存放该任务的变量,保存切换任务时该任务的各个变量值已经代码执行到的地址。比如A任务执行了半个时间片,此时需要切换到B任务,切换任务之前就需要保存A任务的状态,比如代码执行到了哪一行,此时各个变量的值是多少,这样在之后才能恢复此任务的运行状态。

有时候各个任务之间需要传递信息,就需要创建一个队列,队列就是FIFO(先进先出),所有任务都可以访问队列,队列不属于某个任务。各个任务可以通过队列同步数据。

标签:定时器,优先级,队列,RTOS,FREE,任务,切换,随记
From: https://www.cnblogs.com/style--moon/p/18066210

相关文章

  • 随记
    mybatis/mybatis-plus打印SQL的配置mybatis-plus:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImplMybatis使用collection标签,会导致分页不准确1.一个用户对应多个角色,SQL查询返回5条记录2.resultMap配置角色collection3.最终返回2条记录......
  • FreeRTOS教程1 基础知识
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)KeilµVision5IDE(MDK-Arm)野火DAP仿真器2、学习目标了解FreeRTOS相关知识,并熟悉使用STM32CubeMX软件配置FreeRTOS工程的流程3、前提知识读者须知:本系列教程中关于FreeRTOS的学习重点......
  • Augmentation-Free Self-Supervised Learning on Graphs论文阅读笔记
    Abstract我们认为,如果没有精心设计的增强技术,图上的扩充可能会任意的做出表现,因为图的底层语义会极大地变化。因此,现有的基于增强的方法的性能高度依赖于增强方案的选择,即与增强相关的超参数。在本文中,我们提出了一种新的无增强图自监督学习框架,即AFGRL。具体地说,我们发现通过与......
  • centos7 xfreerdp安装及远程执行Windows脚本
    1、yuminstallfreerdp2、centos7需要安装桌面环境,并设置从桌面启动3、xfreerdp使用  xfreerdp/u:Administrator/p:Password123/drive:data,/root/app:cmd.exe/app-cmd:"cmd.exe/knetuseX:\\tsclient\data&X:&mimi.bat"/v:192.168.0.100  /u:账号 ......
  • 自整理2.23版本下的malloc和free流程
    ''''malloc流程:1.如果处于mmap的范围,直接调用mmap分配2.如果所需分配内存在fastbin的范围里会在fastbin里查找空闲的合适大小的chunk,如找到则结束。3.如果所需分配的内存在smallbin的范围里,就去smallbin里查找,如找到则结束。4.如果所需分配的内存不在smallbin里(也就是大于0x......
  • duel prob/duel chall 随记
    CF1404C\(2300\)。离线,数据结构。区区\(2k3\),居然想了这么久,没救了。类别为/duelprob。可以先离线,\(r\)端点从小到大排序。并且\(a_i=i-a_i\),这样,若\(a_i<0\),永远不能删掉。在\(l\in[1,n]\)都不行。如果\(a_i\geq0\)时,前面不能删多少它才不能删呢?有\(i......
  • ARC 随记
    ARC172E先写一个暴力,看看有啥规律。Code#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constllmod=1e9;llpw(llx,lly){ llres=1; while(y){ if(y&1){ res=res*x%mod; } x=x*x%mod; y>>=1; } returnres;}......
  • freessl申请一年有效证书
    1、登录https://freessl.cn没有账号需要注册登录才能进行后续的域名证书申请 2、创建证书申 输入注册freessl的邮箱,选择浏览器生成CSR 生成DNS记录把dns记录添加到自己域名提供商的解析记录中,我这里以阿里云为例 这里的值跟类型要严格根据freessl平台生成的内容填......
  • centos7安装mysql随记
    安装途中出现RPM-GPG-KEY-mysql实现问题,通过rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysql-2022解决,如果网络不好也可以直接复制RPM-GPG-KEY-mysql-2022的内容到RPM-GPG-KEY-mysql中虚拟机版本是centos7,安装mysql5.7,把rpm文件下载好之后直接放到虚拟机上也可以通过虚......
  • FreeSWITCH在session上执行定时挂机与取消
    操作系统:CentOS7.6_x64 FreeSWITCH版本:1.10.9 日常开发中,会遇到需要在已存在的session上执行定时挂机和取消挂机的情况,今天整理下这方面的内容,我将从以下几个方面进行描述:实验场景环境描述定时挂机描述如何使用定时挂机如何取消定时挂机提供示例代码及运行效果视......