FreeRTOS内核笔记(一):基本知识和命名规则

2023-05-16

FreeRTOS内核笔记(一):基本知识和命名规则

  • FreeRTOS内核笔记
  • 命名规则:
  • 常用宏定义
  • Thread运行状态:
  • RTOS Tick
  • Context切换:
  • 实时调度器Scheduler

FreeRTOS内核笔记

查看库存笔记发现 之前学习FreeRTOS 内核的笔记,趁着休假整理下发出来:

简单来说,FreeRTOS是一种多任务实时操作系统

命名规则:

x : portBASE_TYPE类型变量,数据结构,任务句柄,队列句柄等定义的变量名.
p : 指针变量的前缀.
prv(private):私有函数的前缀(加上了 static)
e: 枚举变量会加上前缀 e。
v: 即 void 类型 ,函数名称前加上字母 v,则代表函数返回void。函数前加x则代表函数返回x类型。
在函数名/宏定义中加入了函数所在的文件名:如

  1. vTaskPrioritySet()函数的返回值为 void 型,在 task.c这个文件中定义。
  2. xQueueReceive()函数的返回值为 portBASE_TYPE 型,在 queue.c 这个文件中定义。
  3. vSemaphoreCreateBinary()函数的返回值为 void 型,在 semphr.h 这个文件中定义。
  4. pxPortInitialiseStack(),这个函数前缀是px,表示函数的返回值是结构体类型的指针,并且这个函数是port文件,作用是初始化栈

在这里插入图片描述

详细内容可参见FreeRTOS内核说明文档(中文):https://download.csdn.net/download/howiexue/9978417
详情可参见内核

常用宏定义

在这里插入图片描述
在这里插入图片描述

Thread运行状态:

在这里插入图片描述

在这里插入图片描述

  1. Task1正在运行
  2. 内核挂起Task1(suspended)
  3. 恢复任务Task2
  4. Task2正在执行
  5. 内核挂起Task2
  6. 恢复Task3
  7. Task3视图访问同样的处理器外设,发现它被锁定,Task3不能继续,所以自己挂起自己。
  8. 内核回复Task1

RTOS Tick

RTOS使用tick count变量来度量时间。Tick值通过定时器中断来累加,每次tick增加后,Kernel都会检查看现在是否唤醒、阻塞一个任务。

睡眠时,一个task将指定多长时间后它会醒来。
阻塞时,一个任务将指定一个希望等待多久的时间。

在这里插入图片描述

Context切换:

在这里插入图片描述
每个Task有不同的Stack空间,用来保存上下文和数据处理。

在这里插入图片描述

Tick 的ISR修改Stack Pointer 指向了TaskB的stack,TaskB的栈顶指针被取得:TaskB任务恢复
在这里插入图片描述

实时调度器Scheduler

Scheduler是RTOS的核心,FreeRTOS自己有idle Task,就是在没有其他Task执行的时候,会一直执行idle Task
在这里插入图片描述

  1. 在t1时刻,键盘按下(事件)出现,则vKeyHandlerTask任务现在可以执行,因为它比idle Task有更高的优先级,所以CPU事件给它
  2. 在t2时刻,vKeyHandlerTask已经完成了对按键的处理,它不能继续执行(直到另一个按键按下),所以它必须挂起自己,idle task恢复执行
  3. 在t3时刻,定时器时间到,执行vControlTask,并且作为最高优先级被立即Scheduled
  4. 在t3和t4之间,当vControlTask还在执行的时候,一个键按下,vKeyHandlerTask不能被执行,因为优先级比Control低,
  5. 在t4时刻,vControlTask完成处理,将自己挂起,而这时vKey Task现在是最高优先级的Task,这时才被cpu scheduled运行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS内核笔记(一):基本知识和命名规则 的相关文章

  • 判断是否为回文字符串 ← 栈

    问题描述 所谓 回文字符串 就是指正读反读均相同的字符序列 如 123a321 和 aba 均是回文 xff0c 但 abc 不是回文 通过 栈 这个数据结构我们将很容易判断一个字符串是否为回文 算法代码 include lt bits s
  • 判断N 数码是否有解 牛人总结 归并排序

    作者 力的博客 先介绍八数码问题 xff1a 我们首先从经典的八数码问题入手 xff0c 即对于八数码问题的任意一个排列是否有解 xff1f 有解的条件是什么 xff1f 我在网上搜了半天 xff0c 找到一个十分简洁的结论 八数码问题原始
  • Web服务器HTTP头信息公开 漏洞

    远程Web服务器通过HTTP标头公开信息 远程Web服务器发送的HTTP标头公开了可以帮助攻击者的信息 xff0c 例如Web服务器使用的服务器版本和语言 解决办法 修改Web服务器的HTTP头以不公开关于底层Web服务器的详细信息 服务器
  • Debian10 更换软件源 & 配置中文环境 & 安装中文输入法

    说明 xff1a 看了一下 xff0c 距离发布上篇文章都快半年了 x1f926 很抱歉这段时间由于各 wo 种 de 原 lan 因 duo 迟迟没有更文 xff0c 实际上我有不少东西准备和大家分享的 目前研一上学期已经结束 xff0c
  • Sublime Text 下载-设置切换中文版

    官方下载地址 xff1a Download Sublime Text Sublime Text设置中文版 1 打开Sublime Text xff0c 快捷键 Shift 43 Ctrl 43 P xff0c 输入 xff1a instal
  • Sublime Text 编译 GBK文件编码

    Shift 43 Ctrl 43 P xff0c 输入 xff1a install 选择 Package Control Install Package xff0c 选择后会自动安装 然后输入 Convert xff0c 选择Convert
  • 已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)

    数据库SQL Server 2008 R2 xff0c 网站突然登不了了 重启iis xff0c 重启数据库服务 xff0c 重启服务器都不行 解决方法 xff1a 打开SQL Server配置管理器 xff0c 找到MSSQLSERVER
  • Math.floor(Math.random()*3+1)

    Math random 获取0 1随机数 Math floor method rounds a number DOWNWARDS to the nearest integer and returns the result 小于等于 x xf
  • 定时打开或关闭服务器上的软件

    部署在服务器上的软件 xff0c 会莫名其妙的停止运行 xff0c 还必须得手动关闭重启 xff0c 太麻烦啦 xff01 在大神的建议下 xff0c 做一个让软件自动关闭进程 xff0c 然后重启的操作 废话少说 xff0c 上车 第一步
  • FFmpeg

    FFmpeg是一套可以用来记录 转换数字音频 视频 xff0c 并能将其转化为流的开源计算机程序 采用LGPL或GPL许可证 它提供了录制 转换以及流化音视频的完整解决方案 它包含了非常先进的音频 视频编解码库libavcodec xff0
  • 不懂PO 设计模式?这篇实战文带你 PO

    为UI页面写测试用例时 xff08 比如web页面 xff0c 移动端页面 xff09 xff0c 测试用例会存在大量元素和操作细节 当UI变化时 xff0c 测试用例也要跟着变化 xff0c PageObject 很好的解决了这个问题 x
  • archlinux 中文本地化配置

    参考 xff1a http www wiki org 本地化配置 xff0c 其实就是设置locale 一 显示中文 要显示中文 xff0c 需要生成中文语言包和安装中文字体 1 生成中文语言包 archlinux使用locale gen脚
  • 【Ubuntu】安装Go语言

    sudo apt install golang go version
  • linux系统中使用X11 获取系统窗体信息

    在X Window System中 xff0c 每个窗口都有一个唯一的标识符 xff0c 称为窗口ID 要查找特定窗口的ID号 xff0c 可以使用Xlib库中的XQueryTree函数来获取窗口树结构 xff0c 并遍历整个树结构以查找目
  • 三维重建:多点透视cvSolvePNP的替代函数(Code)

    xfeff xfeff 在调试JNI程序时 xff0c 所有的Shell都已经加载完成 xff0c 而唯一真正核心的cv SolvePnP却不能在JNI里面获得通行证 xff0c 经过反复测试都不能运行 xff0c 因此只能忍痛舍弃 xff
  • 利用Pycharm工具将Python+Qt项目打包成exe应用程序

    博客小白第一次发博客 xff0c 已参加工作 xff0c 仅用于记录一下自己空余时间学习Python的进程 xff0c 学习过程中遇到问题也借鉴了很多博客的解决办法 xff0c 因此也想记录下自己的遇到的问题 xff0c 希望对跟我一样刚起
  • BOSS 业务运营支撑系统

    今天又简单的介绍几个概念 xff0c 我觉得要深入了解某个技术 xff0c 首先要把概念搞清楚 xff0c 这样在宏观理解上将更加深入 本人工作所属电信行业 xff0c 所以下面所介绍的几个概念都是基于电信行业的 BSS Business
  • JAVA版本:判断101-200之间有多少个素数,并输出所有素数。

    题目 xff1a 判断101 200之间有多少个素数 xff0c 并输出所有素数 程序分析 xff1a 判断素数的方法 xff1a 用一个数分别去除2到这个数 xff0c 如果至少有一个数能被整除 xff0c 则表明此数不是素数 xff0c
  • arm64架构ubuntu18.04国内镜像源

    jetson xavier nx下换国内源 xff0c 步骤如下 xff1a span class token shebang important bin bash span span class token function cp spa
  • 安装和配置OpenStack客户端(Jesse翻译)

    xfeff xfeff 安装和配置 OpenStack 客户端 xff08 Jesse 翻译 xff09 原文来自 icehouse的OpenStack文档 回忆 xff1a 在前面部分 xff0c 你已经使用了 keystone 客户端

随机推荐

  • 联通家庭宽带光猫DDNS设置

    1 目前家里宽带光猫ppoe拨号获取的IP全部都是非公网IP 打96169宽带专家转人工客服申请更换公网IP 一天内会有专人联系 更换成公网IP后 重启光猫 在公司或者其他地方ping下家里光猫获取到的公网IP看下是否能ping通 2 申请
  • Matlab如何抓取excell表格里的指定数据

    每次从示波器上采集的数据总是会带有示波器的相关信息 xff0c 没法直接load到matlab里 xff0c 每次手动删除让人感到疲惫 xff0c 特别是数据量达到100 43 的时候 瞬间emmm 示波器采到的数据如下图 xff1a 于是
  • nginx更改进程名称 学习笔记

    如何更改进程名称 在进入正题之前 xff0c 我们需要了解一下以下参数的作用 xff1a span class token keyword int span span class token function main span span
  • Apache 2部署SSL证书

    在Ubuntu系统Apache 2部署SSL证书 本文介绍了如何在Ubuntu系统以及Apache 2中安装阿里云SSL证书 前提条件 已从SSL证书控制台下载Apache服务器证书 已安装Open SSL 环境准备 操作系统 xff1a
  • NVDIA Jetson TX2软件介绍

    介绍 JETSON TX2 模块 它是一台基于 NVIDIA Pascal 架构的 AI 单模块超级计算机 它性能强大 xff0c 但外形小巧 xff0c 节能高效 xff0c 非常适合机器人 无人机 智能摄像机和便携医疗设备等智能终端设备
  • 12.6V/8.4V锂离子或锂聚合物电池充电器

    AL1261是一款专门为高精度的线性锂电池充电器而设计的电路 xff0c 非常适合那些低成本 便携式的充电器使用 它集高精度预充电 恒定电流充电 恒定电压充电 电池状态检测 充电结束低泄漏 充电状态指示等性能于一身 xff0c 可以广泛地使
  • import requests ModuleNotFoundError: No module named 'requests'

    错误描述 xff1a import requests ModuleNotFoundError No module named 39 requests 39 解决办法 xff1a Step 1 xff1a 打开命令窗口 xff0c Win 4
  • UITableViewController

    UITableViewController 表视图控制器 UITableViewController继承自UIViewController 自带了一个tableView 其根视图就是tableView 创建UIViewVontroller运
  • stm32开发板点亮led遇到问题

    最近由于毕业设计是四旋翼无人飞行器的系统设计 xff0c 在学STM32F103R8 xff0c 学长自己设计的一块板子 xff0c 让我根据野火的教程一步一步做 xff0c 先熟悉一下板子的工作原理 xff0c 为以后编程控制电机转速做准
  • Debian Linux 的安装

    Debian Linux 的安装 作者 xff1a Grey 原文地址 xff1a 博客园 xff1a Debian Linux 的安装 CSDN xff1a Debian Linux 的安装 说明 本安装说明是基于 Windows 10
  • 基于pytest设计自动化测试框架实战

    简介 基于pytest实现测试用例收集方案 自定义参数化方案 页面元素定位数据存储方案 测试用例数据存储和维护方案 xff0c 这样可直接进入到设计编写测试用例业务代码阶段 xff0c 避免重复设计这些方案以及方案不统一导致维护复杂 困难的
  • windows安全模型--令牌(token)和安全描述符

    当一个程序访问一个资源时 xff0c 需要有相应的访问权限 windwos安全模型中 xff0c 有两个角色 xff0c 一个就是访问者 xff08 进程 xff09 xff0c 一个是被访问者 xff08 资源 xff09 资源 xff0
  • firefox查找插件和插件媒体类型的方法

    firefox从两个位置加载插件 xff0c 并查找插件对应的媒体类型 xff08 mimetype xff09 1 安装目录的plugins文件夹下 可以直接把一个插件的dll放到plugins目录下 xff0c 该插件对应的媒体类型 x
  • Windows内存机制的问与答

    学习windows内存管理过程中 xff0c 会先有些疑问 xff0c 然后在不断学习中得到解答 xff0c 解答也是基于我的不断理解 xff0c 未必完全正确 下面记录一些 一 如果一个内存页没有被修改过 xff0c 操作系统可以直接释放
  • Python中if语句的使用方法

    if语句用来表示某种可能的情况 xff0c 并如何处理该情况 if语句可以用来表示一种可能性 两种可能性或者多种可能性 1 一种可能性 单个的if语句表示一种可能性 xff0c if关键字后面跟着表达式 xff0c 当表达式是True时 x
  • [Util]-VSCode+WSL开发环境

    文章目录 WSL升级到WSL2安装编译环境相关命令 VSCode快捷键书签代码折叠 配置文件C 43 43 格式化 远程linux 调试程序启动调试变量查看print打印display追踪x内存 变量监控 VSCode是非常流行的代码编辑器
  • 用递归方法求n的阶乘(C语言)

    用递归方法求n xff01 include lt stdio h gt int main int n int y printf 34 input a integer number 34 scanf 34 d 34 amp n y 61 fa
  • ./nginx: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No suc

    span class token function ln span s usr local lib64 libssl so 1 1 usr lib64 libssl so 1 1 span class token function ln s
  • RootCause深度分析:为什么DCache常会导致LCD显示异常(数据一致性问题)

    DCache导致LCD显示异常RootCause深度分析 问题描述 xff1a L1 L2 Cache简介问题分析 xff1a 问题解决 xff1a 如何编程 xff1a InvalideCleanHyperRAM xff1a Cache
  • FreeRTOS内核笔记(一):基本知识和命名规则

    FreeRTOS内核笔记 xff08 一 xff09 xff1a 基本知识和命名规则 FreeRTOS内核笔记命名规则 xff1a 常用宏定义Thread运行状态 xff1a RTOS TickContext切换 xff1a 实时调度器Sc