freertos与rtthread内核实现的不同处

2023-05-16

一直在使用rtos作为主要开发内容,却没有详细了解过rtos的内核实现机制。最近一个月,抽了点时间将freertos和rtthread的内核代码看了下,了解了实时系统的实现机制和设计思想。这里学习freertos的代码,先看朱大神的freertos基础篇和高级篇的详细介绍,然后啃源码;搞懂了基本的设计思想和代码的实现逻辑。下面简单列一下自己了解到的两个系统的实现差异。

一、创建任务

两个系统都支持创建静态系统任务和动态任务。区别如下:

  1. freertos 创建的任务添加到就绪任务链表,创建完成后,若调度器已经运行,则可直接参与调度。
  2. rtthread 创建的线程添加到挂起任务列表,创建线程后,需要主动调用start_up,将线程移到就绪任务列表,参与调度。

二、delay

两个系统都支持delay和delayutil。区别如下:

  1. freertos 系统有专用的delay超时计数链表。delay的任务按照超时时间依次排列在超时计数链表中,等待超时时间到达,将其移至就绪任务链表参与调度。
  2. rtthread 系统的每个线程控制块结构体中都定义了一个软件定时器结构体,delay延时函数调用时,将会启动线程自带的软件定时器,完成delay操作,delay超时时间满足时,触发软件定时器超时callback,将任务从挂起列表移到就绪列表参与调度。

三、信号量

两个系统都支持使用信号量。区别如下:

  1. freertos 系统的信号量也是队列,只不过队列的长度为0。freertos使用宏定义封装了计数信号量和二值信号量。
  2. rtthread 系统信号量只支持计数信号量,在创建信号量时传入信号量的初始值。系统中没有二值信号量的接口。可以通过初始值设置1,作为二值信号量使用。

四、邮箱

邮箱与消息队列不同,邮箱常用于传输一个地址,可以直接引用数据,进行数据传输。但是消息队列的实现机制是提前分配好队列最大长度个队列项的内存,在传输数据时,将要发送的数据拷贝到申请的队列内存中,实现的是数据的拷贝。

  1. freertos 系统不支持邮箱
  2. rtthread 系统支持邮箱,邮箱传输的数据大小只有4字节,一般用于传输一个地址,引用这个地址进行数据的传输。

五、时间片

两个系统都支持时间片轮转的机制。时间片轮转是指就绪任务列表中有至少两个相同优先级的最高任务。需要按照轮流执行固定的时间tick进行任务调度。共享cpu资源。两个系统的区别如下:

  1. freertos 系统需要主动打开时间片轮转的宏定义才会开启这个功能,在task调度切换时,每个task只能执行1个tick。
  2. rtthread 系统在创建thread的时候可以直接传入时间片参数,在thread调度切换时,将按照创建时传入的时间片占用CPU资源,进行相同优先级thread的调度。

六、优先级

  1. freertos 系统的优先级定义为,优先级数值越大,task的优先级越高。
  2. rtthread 系统的优先级定义为,优先级数值越小,thread的优先级越高。优先级为0的thread,优先级最高。

总结,两个系统都是非常好用的RTOS,且各有所长,freertos的系统功能更为纯粹,可以用于各种需要实时系统的场景。rtthread具备各种第三方组件,尤其是网络组件相关,在物联网产品领域具有很强的优势。可以帮助开发人员配合组件快速完成物联网产品的开发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

freertos与rtthread内核实现的不同处 的相关文章

  • python cv2

    函数 xff1a cv2 threshold 这个函数有四个参数 xff0c 第一个原图像 xff0c 必须是单通道 第二个进行分类的阈值 xff0c 第三个是高于 xff08 低于 xff09 阈值时赋予的新值 xff0c 第四个是一个方
  • 信息量与交叉熵损失的关系

    目录 1 信息量 2 信息熵 3 相对熵 xff08 KL散度 xff09 4 交叉熵 xff08 cross entropy xff09 5 二值交叉熵 xff08 binary cross entropy xff09 在机器学习领域 x
  • 树莓派镜像系统—兼容3B、3B+、4B,已编译opencv

    树莓派镜像系统 xff08 转载 xff09 这个镜像是基于树莓派官方raspios buster arm64桌面版镜像制作 xff0c 内核版本为5 4 72 xff0c OpenCV版本为4 5 0 xff0c 默认开启ssh和vnc
  • python遇到的语法问题

    python什么时候加self xff0c 什么时候不加self self代表对象本身 xff0c 换个思维应该认为self是全局变量 xff0c 如果变量前面加了self xff0c 那么在任何实例方法 xff08 非staticmeth
  • python Jetson tx2和 stm32之间的通信(16进制和10进制的转换,包括负数),BCC校验(异或)运算

    tx2接收16进制数据 含16进制转化为10进制 xff0c 负数怎么表示 我发现tx2接收stm32的16进制的数据 xff0c 不能达到我想要的效果 并且16进制数还会转换成ASCLL码的字符 如下图 xff1a 通过如下操作可以获得字
  • ROS 学习记录(五)

    在运行moveit xff01 例程的时候发现没有Moveit包 xff0c 于是在网上下载 xff0c 发现普通的 sudo apt get install ros kinetic moveit 无法完成安装 会提示找不到安装包 尝试更换
  • rosbag使用介绍

    rosbag 1 录制包 span class token comment 录制所有的topic span rosbag record span class token operator span a 2 查看包的信息 rosbag inf
  • Python基础

    输出函数print 输出内容可以是 1 数字 print 66 6 2 字符串 print hello world 单引号双引号都可 3 含有运算符的表达式 print 3 43 1 4 输出到文件中 fp 61 open D text t
  • PID控制器的优缺点和周期

    PID控制器参数优缺点 PID控制器简介 PID控制器是非常经典的一种控制算法 xff0c 是不需要知道系统的模型 xff0c 仅仅根据期望与现状的偏差调节 xff0c 使之能够到达期望的一种线性控制器 优点 xff1a 使用简单 xff0
  • 嵌入式开发自救指南(嵌入式怎么高薪基本思路)

    文章目录 前言打工的基本逻辑 xff1a 生产者思维价值与价格概念介绍需求与价值供给与价值 总结 一 为什么选择嵌入式四个角度个人需求现有资源与长板职业优先级排序 二 距离目标还有多远距离目标距离 三 路线半年路线为什么这样做 前言 为什么
  • docker安装firefox

    下载镜像 docker pull jlesage firefox 运行容器 docker run d name 61 firefox e TZ 61 Asia Hong Kong p 5800 5800 p 5900 5900 shm si
  • freertos学习之路1-裸机和rtos的区别

    写在最前 由于工作需要 xff0c 需要开始学习freertos的相关知识 xff0c 本专题主要记录freertos的相关内容 参考 xff1a https www bilibili com video BV19g411p7UT 正点原子
  • Windows10 配置 VSCode 的 C++环境

    目录 0 不同符号代表的 CPU 的位数 xff1a 1 下载 MinGW64 包 xff0c 配置C C 43 43 的Windows环境 2 在 VSCode 里配置 C 43 43 0 不同符号代表的 CPU 的位数 xff1a x8
  • MPU MCU CPU GPU之间的关系

    CPU xff08 Central Processing Unit xff0c 中央处理器 是计算机系统的主要处理器 xff0c 它负责执行指令 处理数据和控制计算机系统的操作 CPU通常被用于通用计算和控制任务 xff0c 如桌面电脑 服
  • stm32外设-中断详解

    0 写在最前 本栏目笔记都是基于stm32F10x 1 中断是啥 xff1f 什么是中断 xff1a CPU在处理某一事件A时 xff0c 发生的另外某一事件B请求CPU去处理 xff08 产生了中断 xff09 xff0c 随后CPU暂时
  • Darknet——yolo3训练自己的数据集+在ros环境下实现目标检测实战教程(三)——应用在ROS上

    文章目录 前言一 darknet ros代码简析二 修改ros驱动包的文件内容三 ros系统下运行效果总结 前言 Darknet yolo3训练自己的数据集 43 在ros环境下实现目标检测实战教程 xff08 一 xff09 环境配置 D
  • LSB(Linux Standard Base)通用部分学习自用(1)

    前言 什么是LSB xff08 借用了这位博主的高见 xff09 LSB文档下载 自用 xff0c 如有错误请指出 xff0c 不胜感激 本系列基于LSB Core Generic 5 0 介绍 The LSB defines a bina
  • cocos2dx 第七课 动作和动画

    一 动作的行为 runAction Action act 运行动作 stopAction Action act 停止动作 stopActionByTag int tag 停止动作 stopAllActions 停止节点所有动作 二 动作的种
  • 线性最小方差估计理论推导

    线性最小方差估计理论推导 定义 也叫线性最小均方误差估计 xff0c 顾名思义 xff0c 就是使估计误差的平方和的均值达到最小 理论推导 假设系统 z 61 H x 43
  • D435i、D435、D415、T265的Realsense_viewer环境搭配及安装

    安装步骤 1 注册服务器公钥 sudo apt span class token operator span key adv span class token operator span keyserver keys span class

随机推荐

  • VS Code下利用Cmake开发C++-单文件

    单文件 xff1a 第一步 xff1a 创建CmakeLists txt文件 第二步 xff1a 编写CmakeLists 设置最小版本 span class token function cmake minimum required sp
  • ECharts学习--主题设置

    xff08 1 xff09 内置主题 echarts中默认主题有两个 light dark 在初始化对象方法中 xff0c init可以指明 xff1a xff08 1 xff09 dark var mCharts 61 echarts i
  • 隔壁老王看了都会的文章:STM32串口实验——单片机与上位机交互信息

    今天介绍USART串口通信的使用 xff0c 目的在于会用串口传送和接收数据 内容包含了NVIC中断的知识 xff0c 下一篇着重讲NVIC中断 ADC在下下一篇 主要还是先看懂USART的相关代码 什么是串行通信 我们对通信的字面意思理解
  • C++ 字符串(string)常用操作总结

    目录 0 常用功能汇总 1 定义一个字符串 2 读写 string 操作 3 查询字符串信息 索引 4 拼接 比较等操作 5 cctype 头文件 判断字符类型 xff1a 大 小写字母 标点 数字等 6 for 循环遍历 7 修改 str
  • USB学习笔记——USB通信过程与枚举过程

    在网上看到一篇文章就是讲这个的 xff0c 仔细阅读后获得了很多感触 xff0c 整理总结如下 一 USB接口 在USB的集线器端D xff0c D 43 都接了下拉电阻 xff0c 而USB设备端的D xff0c D 43 接了上拉电阻
  • BGP协议的难点笔记和重要性

    bgp的报文 有五种报文类型bgp的包头长什么样 xff1a 由market 标记 length 长度 type 报文类型 这3个东西组成open报文 xff1a 用来维护bgp的建立 xff0c 就是bgp对等体之间的信息建立update
  • 使用xfsdump及xfsrestore备份并恢复文件

    xfs提供了xfsdump和xfsrestore工具 xff0c 协助备份xfs文件系统中的数据 xfsdump按inode顺序备份一个xfs文件系统8 xfs备份级别有2种 xff1a 0表示完全备份 xff0c 1 9表示增量备份 xf
  • 电赛准备过程记录

    电赛记录 xff08 1 xff09 2021全国大学生电子设计大赛参赛纪实 xff08 无人机赛题 xff09 提示 xff1a 写完文章后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 电赛记录 xf
  • Jetson TX2新手上路全记录(1)

    Jetson TX2小白零基础上手记录 xff08 1 xff09 暑假申请了一块TX2进行学习 xff0c 从头开始记录学习过程 趁着在装虚拟机先唠两句 文章目录 Jetson TX2小白零基础上手记录 xff08 1 xff09 开箱环
  • Jetson TX2新手上路全记录(3)

    ng 3 提示 xff1a 这里可以添加系列文章的所有文章的目录 xff0c 目录需要自己手动添加 例如 xff1a 第一章 Python 机器学习入门之pandas的使用 提示 xff1a 写完文章后 xff0c 目录可以自动生成 xff
  • 傅里叶变换详解

    一 用途 xff1a 任意 的函数经过一定的分解 xff0c 都能够表示为正弦函数的线性组合形式 比如想要过滤一首音乐中的噪音 xff0c 我们可以使用傅里叶变换将叠加后的图像分离为一个个纯声的正弦图像 xff0c 去掉特定频率的噪声就能实
  • git如何删除本地所有未提交的更改

    在使用git的时候 xff0c 如果本地做的修改都不想保留了 xff0c 可以通过下面命令恢复成HEAD版本 xff0c 未提交的以及加入暂存区中的修改都会被舍弃 git reset hard git clean xdf 转自
  • ESP32的RMT模块项目实用

    1 技术背景 最近公司在用ESP32的模组方案实现智能音箱的相关功能的项目 需要展示模组的网络状态以及音箱的语音交互状态 xff0c 找了一家RGB灯板供应商 需要模组通过一个io口输出脉冲波形 xff0c 来控制灯板切换模式 xff0c
  • ESP32 LOG库使用

    ESP32 log库 官方文档 一 printf是不可重入函数 printf不能在中断中被调用的原因是它是一个不可重入函数 xff0c 而在中断中要避免调用不可重入函数 xff0c 首先我们先说说什么是不可重入函数 简单说来 xff0c 区
  • C++ 数组(vector)常用操作总结

    目录 1 vector对象的定义和初始化方式 2 vector 常用基础操作 3 使用迭代器的遍历 插入 删除操作 4 vector 元素的重排操作 xff08 排序 逆序等 xff09 5 vector 中找最值 6 改变vector大小
  • 小熊派开发板移植RT-FOTA

    前言 买了小熊派的开发板 xff0c 将demo code验证完成之后就放下了 刚好最近工作也在做OTA相关的开发 xff0c 发现自己对于升级的功能还不够了解 xff0c 在码云找到了一位大神基于RTThread的RT FOTA代码 xf
  • 小熊派移植RT-Thread 的app代码

    前言 在上一篇我们已经讲解了如何移植RT FOTA到小熊派开发板 本篇我们将继续移植RT Thread xff0c 实现app代码的移植开发 xff0c 并将BootLoader和app一起烧录到开发板 xff0c 完成BootLoader
  • easyflash源码分析流程图

    最近周末刚好有空 xff0c 将easyflash源码看了一下 xff0c 了解了作者的设计理念 将学习内容整理成流程图贴上来 1 esayflash初始化流程 2 esayflash set env
  • .git bojects目录文件为空

    这里写自定义目录标题 git error object file git objects b9 e269f50db2a3415cc8ad5ba40b82b9b6a13d45 is empty 解决方法 xff1a 1 find git ob
  • freertos与rtthread内核实现的不同处

    一直在使用rtos作为主要开发内容 xff0c 却没有详细了解过rtos的内核实现机制 最近一个月 xff0c 抽了点时间将freertos和rtthread的内核代码看了下 xff0c 了解了实时系统的实现机制和设计思想 这里学习free