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电脑如何通过终端隐藏应用程…...
开发者行为数据挖掘:从Stack Overflow发现隐性需求
1. 项目概述:从开发者行为数据挖掘隐性需求在软件开发领域,需求工程一直面临着如何准确捕捉用户真实需求的挑战。传统方法如用户访谈、问卷调查等依赖于用户的主动表达,但开发者往往不会明确说出他们需要什么,而是通过日常行为无意…...
MMC柔性直流输电稳定性与参数控制【附代码】
✨ 长期致力于模块化多电平换流器、弱交流电网、小信号模型、控制器参数优化、粒子群算法、模糊控制研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)弱…...
Java 程序员第 2 阶段:精通 SpringBoot 整合大模型,快速搭建基础服务
前言上一阶段我们掌握了原生 API 调用,但在大规模生产环境中,使用专业的 Java 框架能大幅提升开发效率。SpringAI 和 LangChain4j 是 Java 生态中最主流的大模型集成框架。本篇文章将手把手带你精通 SpringBoot 整合大模型,快速搭建企业级 AI…...
番茄小说下载神器:3步轻松打造个人数字图书馆
番茄小说下载神器:3步轻松打造个人数字图书馆 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 还在为找不到心仪的小说资源而烦恼吗?还在为阅读体验不佳…...
运营商网络工程师视角:VoWiFi部署中的ePDG与AAA服务器配置要点及避坑指南
运营商网络工程师实战:VoWiFi部署中ePDG与AAA服务器配置的20个关键细节 当运营商开始规划VoWiFi网络时,会议室的白板上总是画满了各种接口和协议栈。但真正决定项目成败的,往往是那些容易被忽略的配置细节——比如IKEv2协商时DH组的选择会怎样…...
Harbor:统一管理MCP服务器的配置中心与团队协作平台
1. 项目概述:一个统一管理MCP服务器的“港口” 如果你和我一样,每天都在Claude Code、Cursor、VS Code这几个编辑器之间来回切换,同时还要折腾一堆MCP服务器,那你肯定也经历过这种痛苦:在 ~/.claude.json 里加一个配…...
202X年CSDN年度技术趋势大预测
好的,以下是一篇关于CSDN年度技术趋势预测的技术文章大纲:202X年CSDN年度技术趋势预测:引领未来的技术变革一、引言技术发展的加速与变革年度技术趋势对行业的影响本文预测的依据与方法论二、人工智能与生成式AI的深化应用大模型技术的演进方…...
TigerVNC终极指南:快速掌握跨平台远程桌面控制
TigerVNC终极指南:快速掌握跨平台远程桌面控制 【免费下载链接】tigervnc High performance, multi-platform VNC client and server 项目地址: https://gitcode.com/gh_mirrors/ti/tigervnc TigerVNC是一款高性能、跨平台的VNC客户端和服务器软件࿰…...
那些“假装很忙”的员工,正成为中小企业老板最大的管理黑洞
作为一名常年给企业做数字化诊断的顾问,我发现很多老板都有一个共同的“心病”:走进办公室,满屋子都是噼里啪啦的打字声,每个人看起来都在埋头苦干,但一到交付节点,进度总是莫名其妙地卡壳。这种“办公室伪…...
Lumi Diary:基于OpenClaw Skill的本地AI记忆伴侣设计与实践
1. 项目概述:一个住在你设备里的记忆精灵如果你和我一样,对把生活点滴交给云端总有点不放心,但又渴望有一个能懂你、能帮你把碎片记忆编织成故事的伙伴,那么 Lumi Diary 的出现,可能正是时候。这不是又一个需要你手动打…...
