1897_野火FreeRTOS教程阅读笔记_链表
1897_野火FreeRTOS教程阅读笔记_链表
全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 (gitee.com)
之前我自己通过直接啃代码的方式对FreeRTOS也算是有了一点理解了,这次趁着些许闲暇翻看一下野火的FreeRTOS教程。一者算是一种复习;二者可能对自己理解上的偏差进行纠正;三者应该可以学到一些自己没有解读出来的内容。

我个人曾经喜欢用TAB,至少喜欢TAB操作。但是,最近几年把这个习惯彻底改掉了,主要以4个空格为主。梳理的这个观点也是我自己决心改成如此的一个很重要的原因。
书中有一段关于裸机以及带有多任务操作系统的一段描述,我是直接跳过了。关于这部分,很多教程中都会讲一下,但是所涉及到的内容应该是大同小异。虽然,不同的人介绍的时候可能选择不同的类比模型,但是无非还是前后台以及OS在原理概念上的差异。直接面对设计,弄懂根本原因更好。


链表是学习FreeRTOS的基础,其实这也是很多软件设计的基础。单向链表可以理解为只能够判断自己的后继,无法直接判断自己的前驱的链表设计。而双向链表则可以直接判断自己的前驱以及后继。从实用性角度来说,显然双向链表的设计要好很多。我印象中看过一篇文章中提过,双向链表是高德纳老爷子发明的,不知道是否真是如此。

这个是FreeRTOS的链表节点的数据结构定义,主要包含如下几个要素:
- xItemValue,这个如果只是了解链表概念的话可以先不去了解,并不是一个链表必然要有一个数据信息。
- 前驱
- 后继
- 节点内核对象,我觉得书中这个描述非常好,更加明确了一下这个主要是针对内核本身设计的。节点本身只是一组管理信息,包含了一系列的映射关系。真正需要处理的对象是需要这种映射关系去寻找的。
- 从属于哪一个链表。

这是岔出去的一个话题点。关于tick的数据宽度,FreeRTOS支持16bit和32bit。不过,对于常用的32bit MCU来说的话,似乎没有什么理由得“让步”使用16bit。

对于链表节点的初始化,只是让这个节点与系统中的链表回到一种正交的关系。因此,只需要标记该节点暂时不属于任何链表即可。在插入一个链表的时候,明确这部分从属信息,进而明确前驱以及后继的关系。当然,对于FreeRTOS来说,还有一个更重要的信息需要在节点插入链表的时候明确,那就是所映射的内核管理对象。。

根节点没有采用通用的节点数据结构,算是有自己的独到思考吧。在根节点上,记录了链表的节点数目、遍历所用的指针以及链表的结束节点。

关于根节点的初始化,我觉得示意图可能还不如文字描述来的简洁。这个初始化,把指针指向了最后一个节点,然后把节点数目设置为一个无效值。对于结束的节点来说,前驱和后继全都设置为本身。节点的数目,由于没有有效的数据存在设置为0。
这样的模型其实是很好理解的,但是从表达内容上来说,我觉得似乎不够精简。在理解这一套设计的作为目的的时候,可以现以理解为主。
相关文章:
1897_野火FreeRTOS教程阅读笔记_链表
1897_野火FreeRTOS教程阅读笔记_链表 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 之前我自己通过直接啃代码的方式对FreeRTOS也算是有了一点理解了,这次趁着些许闲暇翻看一下野火的FreeRTOS教程。一者算是一种复习;二者可能对自…...
CTFshow web(php命令执行 45-49)
基础知识: 1.绕过cat使用: tac more less head tac tail nl od(二进制查看) vi vim sort uniq rev 2.绕过空格用: %09 <> ${IFS} $IFS$ {cat,fl*} %20 注: %09 ##(Tab) %20 ##(spa…...
飞天使-linux操作的一些技巧与知识点8-zabbix6.0 容器搭建
文章目录 安装docker安装步骤mysql下载镜像安装zabbix 使用zabbix非host模式创建 测试效果 安装docker 1. 配置官方 yum 源$ sudo yum install -y yum-utils $ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo2. 安装 Docker$ …...
51 单片机入门 400 例
1 IO输出 点亮1个LED灯方法1 2 IO输出 点亮1个LED灯方法2 3 IO输出 点亮多个LED灯方法1 4 IO输出 点亮多个LED灯方法2 5 闪烁1个LED 6 不同频率闪烁1个LED灯 7 不同频率闪烁多个LED灯…...
贪心算法的应用
考虑最大利润 输入:种类数、需求量、各种类的库存量、各种类的总价 输出:最大利润 #include <iostream> #include <algorithm>//调用sort排序 using namespace std; struct mooncake{double store;double price;double tprice; }cake[1000]…...
CentOS基于volatility2的内存取证实验
CentOS,Redhat和Fedora 都是Red Hat体系,采用yum管理器,不同于Debian、Ubuntu作为Debian体系使用apt 本文以CentOS为例,采用avml制作内存镜像,并利用volatility官方所给工具制作profile符号文件,进行简单的…...
HLS 三角函数报错:undefined reference to ‘cordic_apfixed::circ_table_arctan_128‘
最近在通过HLS实现一些算法,其中用到了hls::cos函数,写完代码编译报错: ../Vitis_HLS/hls_cordic_apfixed.h:229: undefined reference to cordic_apfixed::circ_table_arctan_128 build/xf_computePhaseMap_accel.o: In function void cord…...
【汇编】简单的linux汇编语言程序
一、Linux系统汇编语言 Linux系统上的汇编语言可以使用不同的语法风格,主要包括Intel语法和AT&T语法。这两种语法有各自的特点和风格区别,尽管它们表示的底层机器指令相同。下面分别对两种语法进行简要说明: Intel语法 Intel语法是由I…...
Fink CDC数据同步(四)Mysql数据同步到Kafka
依赖项 将下列依赖包放在flink/lib flink-sql-connector-kafka-1.16.2 创建映射表 创建MySQL映射表 CREATE TABLE if not exists mysql_user (id int,name STRING,birth STRING,gender STRING,PRIMARY KEY (id) NOT ENFORCED ) WITH (connector mysql-cdc,hostn…...
Adb offline疑难杂症解决方案大全记录
无线/有线Adb offline依次尝试下面步骤: adb kill-server && adb start-server adb reconnect offline 多次 adb tcpip 5555 后重试 检查有线端口5037、无线5555占用,排除改名的adb或其他应用占用 换USB线和USB口拔插、确保同一WiFi下࿰…...
详述FlinkSql Join操作
FlinkSql 的 Join Flink 官网将其分为了 Joins 和 Window Joins两个大类,其中里面又分了很多 Join 方式 参考文档: Joins | Apache Flink Window JOIN | Apache Flink Joins 官网介绍共有6种方式: Regular Join:流与流的 Joi…...
Ajax+JSON学习二
AjaxJSON学习二 文章目录 前言三、前后端数据交互3.1. GET请求3.2. POST请求3.3. jQuery 中的 Ajax3.4. Ajax 的替代品:fetch3.5. 小结 四、JSON4.1. JSON简介4.2. JSON 语法规则4.3. JSON的解析和序列化 总结 前言 三、前后端数据交互 3.1. GET请求 GET 请求一般用…...
STM32单片机的基本原理与应用(六)
串口测试实验 基本原理 在串口实验中,是通过mini_USB线搭建终端与电脑端(也可称终端,为做区分称电脑端)的“桥梁”,电脑端的串口调试助手通过mini_USB线向终端发送信息,由CH340芯片将USB接口进行转换&…...
《MySQL 简易速速上手小册》第4章:数据安全性管理(2024 最新版)
文章目录 4.1 用户认证和权限控制4.1.1 基础知识4.1.2 重点案例:使用 Python 管理 MySQL 用户权限4.1.3 拓展案例 4.2 防止 SQL 注入和其他安全威胁4.2.1 基础知识4.2.2 重点案例:使用 Python 和 MySQL 进行安全的数据查询4.2.3 拓展案例 4.3 数据加密和…...
VUE学习之路——列表渲染
<p v-for"item in items">{{ item }}</p>使用v-for进行列表的渲染。 这仅仅是一个简单的demo,使用v-for可以用来遍历数组和对象,具体如下: 注意:遍历数组或对象的时候,()…...
CentOS 安装 redis 7.2
nginx官网 https://redis.io/download/ 把鼠标放到这里,复制下载地址 在服务器找个文件夹执行命令 wget https://github.com/redis/redis/archive/7.2.4.tar.gz tar -zxvf 7.2.4.tar.gz make make install 看到这几行就说明安装成功了 不放心的话再查看下b…...
运维自动化bingo前端
项目目录结构介绍 项目创建完成之后,我们会看到bingo_web项目其实是一个文件夹,我们进入到文件夹内部就会发现一些目录和文件,我们简单回顾一下里面的部分核心目录与文件。 ├─node_modules/ # node的包目录,项目运行的依赖包…...
Project2013下载安装教程,保姆级教程,附安装包和工具
前言 Project是一款项目管理软件,不仅可以快速、准确地创建项目计划,而且可以帮助项目经理实现项目进度、成本的控制、分析和预测,使项目工期大大缩短,资源得到有效利用,提高经济效益。软件设计目的在于协助专案经理发…...
【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总
【机器学习与自然语言处理】预训练 Pre-Training 各种经典方法的概念汇总 前言请看此正文预训练 Pre-Training无监督学习 unsupervised learning概念:标签PCA 主成分分析(Principal Component Analysis)降维算法LSA 潜在语义分析(…...
Mac电脑如何通过终端隐藏应用程序?
在我们使用Mac电脑的时候难免会遇到想要不想看到某个应用程序又不想卸载它们。值得庆幸的是,macOS具有一些强大的文件管理功能,允许用户轻松隐藏(以及稍后显示)文件甚至应用程序。 那么,Mac电脑如何通过终端隐藏应用程…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
