21.3-启动流程、编码风格(了解) 第21章-FreeRTOS项目实战--基础知识之新建任务、启动流程、编码风格、系统配置 文件组成和编码风格(了解)

21.3-启动流程、编码风格(了解)

启动流程

第一种启动流程(我们就使用这个):

在main函数中将硬件初始化、RTOS系统初始化,同时创建所有任务,再启动RTOS调度器。

第二种启动流程:

在main函数中将硬件初始化、RTOS系统初始化,只创建一个启动任务,再启动RTOS调度器。 之后,在启动任务中创建各种应用任务,当所有任务创建完成,启动任务把自己删除。

文件组成和编码风格(了解)

0、文件组成

FreeRTOS文件组成

核心文件

  • 包含核心内核功能的实现,是 FreeRTOS 的主要组成部分,通常包括:
    • tasks.c:实现任务管理的核心文件,包含任务创建、调度、删除等核心功能。
    • queue.c:实现消息队列,用于任务间的数据通信和同步。
    • list.c:实现内核中的链表操作,是任务调度和管理的重要数据结构。
    • timers.c:实现软件定时器的创建和管理。
    • event_groups.c:实现事件组,用于多任务间的事件控制和同步。
    • croutine.c:协程支持文件(不常用),用于非常小的内存占用需求下实现轻量级的任务。

配置文件

  • 包括用户根据项目需求调整的配置项:
    • FreeRTOSConfig.h:定义系统行为、资源限制等配置项。用户可以在这个文件中设置堆大小、任务优先级数量、时间片长度、钩子函数等。

硬件抽象层 (HAL) 和移植文件

  • 这些文件用来确保 FreeRTOS 能够在各种硬件架构上运行,主要包括:
    • portable/:不同硬件平台的移植文件夹,包含各架构的汇编实现、上下文切换、堆管理等文件。
    • port.cportmacro.h:不同架构的特定实现文件,比如 ARM Cortex M 系列、AVR、PIC 等不同芯片的实现。

CMSIS-RTOS 接口文件通常包括:
在这里插入图片描述
这些文件里的宏定义、数据类型、函数名称等前缀都是"os"。原理上来说,这些函数和数据类型的名称与具体的RTOS无关,他们是CMSIS-RTOS标准定义。具体实现,列如前缀"os"的函数调用具体移植的RTOS实现函数,例如,如果移植FreeRTOS,"os"里面的任务创建函数,调用的是FreeRTOS的具体任务创建函数,如果uc/OS-II,"os"函数就调用uc/OS-II的具体任务创建函数。

  1. cmsis_os.h
    • 这是 CMSIS-RTOS API 的头文件,定义了 CMSIS-RTOS 所需的所有函数接口。它包含了任务管理、定时器、信号量、互斥锁、消息队列等操作。通过这些标准接口,应用程序可以不依赖具体的 RTOS 实现。
  2. cmsis_os.c
    • 该文件实现了 CMSIS-RTOS API 中的函数接口,将这些接口与 FreeRTOS 的内核 API 关联起来。也就是说,通过在这个文件中调用 FreeRTOS 的 API,cmsis_os.c 能够使得应用程序使用 CMSIS-RTOS API 控制 FreeRTOS。
1、数据类型

FreeRTOS使用的数据类型虽然都是标准C的数据类型,但都进行了重定义,取了个新名字。
在这里插入图片描述char数据类型可以通过keil指定了有符号或者无符号,默认为无符号。
在这里插入图片描述

2、变量名!!!(值得学习)

在FreeRTOS中,定义变量时,把变量的类型作为前缀,方便用户通过变量即可知道变量的类型。

变量名=变量类型简写+变量的英文意思

比如

char cTemp;

unsigned char ucTemp

unsigned char* pucTemp

char变量的前缀c、short变量的前缀是s、long变量的前缀是l。

其它比如结构体、任务句柄等是x。

如果是无符号类型的,前缀再加u;

如果是指针变量,前缀再加p,比如"pc" 表示char * 类型

3、函数名

函数名包含了函数返回值的类型、函数所在的文件名以及函数的功能,如果是私有的函数,还会加prv前缀。 这种命名方式方便寻找函数定义并了解函数作用,值得借鉴。

举例:

xTaskCreate()函数的返回值为任务句柄,在Task.c中定义,作用是创建任务;

vTaskPrioritySet()函数的返回值为void,在Task.c中定义,作用是设置优先级;

CMSIS-RTOS相关文件中定义的函数前缀都是"os",不包括包括返回值类型和所在文件的前缀,例如cmsis_os2.h中的函数osDelay,等

4、宏定义

在FreeRTOS中,宏用大写字母表示,并配有小写字母作为前缀, 前缀用于指示该宏在哪个头文件定义。

举例:

portMAX_DELAY, 位于portable.h;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI非常道】二零二五年一月(二),AI非常道

经常在社区看到一些非常有启发或者有收获的话语,但是,往往看过就成为过眼云烟,有时再想去找又找不到。索性,今年开始,看到好的言语,就记录下来,一月一发布,亦供大家参考。 有关AI非…

Mac Electron 应用签名(signature)和公证(notarization)

在MacOS 10.14.5之后,如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核,来判断是否存在病毒),那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable,取消验证模式&#…

1、开始简单使用rag

文章目录 前言数据存放申请api开始代码安装依赖从文件夹中读取文档文档切块将分割嵌入并存储在向量库中检索部分代码构造用户接口演示提示 整体代码 前言 本章只是简单使用rag的一个示例,为了引出以后的学习,将整个rag的流程串起来 数据存放 一个示例…

爱书爱考平台说明

最近我开发了一个综合性的考试平台,内容包括但不限于职业资格证考试、成人教育、国家公务员考试等内容。目前1.0版本已经开发完成,其他的功能陆续完善中。 微信小程序搜索"爱书爱考" 微信小程序图标如下图: 目前维护了java相关的面试题的考题…

ZZNUOJ(C/C++)基础练习1011——1020(详解版)

目录 1011 : 圆柱体表面积 C语言版 C版 1012 : 求绝对值 C语言版 C版 1013 : 求两点间距离 C语言版 C版 1014 : 求三角形的面积 C语言版 C版 1015 : 二次方程的实根 C语言版 C版 1016 : 银行利率 C语言版 C版 1017 : 表面积和体积 C语言版 C版 代码逻辑…

Java面试题2025-设计模式

1.说一下开发中需要遵守的设计原则? 设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下: 1、单一职责原则 单一职责原则的定义描述非…

认识小程序的基本组成结构

1.基本组成结构 2.页面的组成部分 3.json配置文件 4.app.json文件(全局配置文件) 5.project.config.json文件 6.sitemap.json文件 7.页面的.json配置文件 通过window节点可以控制小程序的外观

【腾讯云】腾讯云docker搭建单机hadoop

这里写目录标题 下载jdk hadoop修改hadoop配置编写Dockerfile构建镜像运行镜像创建客户端 下载jdk hadoop wget --no-check-certificate https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz wget --no-check-certificate https://repo.huaweicloud.…

设计模式 - 行为模式_Template Method Pattern模板方法模式在数据处理中的应用

文章目录 概述1. 核心思想2. 结构3. 示例代码4. 优点5. 缺点6. 适用场景7. 案例:模板方法模式在数据处理中的应用案例背景UML搭建抽象基类 - 数据处理的 “总指挥”子类定制 - 适配不同供应商供应商 A 的数据处理器供应商 B 的数据处理器 在业务代码中整合运用 8. 总…

HTML5+SVG+CSS3实现雪中点亮的圣诞树动画效果源码

源码介绍 这是一款基于HTML5SVGCSS3实现雪中点亮的圣诞树动画效果源码。画面中的圣诞树矗立在雪地中,天上飘落着雪花。当鼠标滑过圣诞树时,可见到圣诞树上的灯光闪烁,同时左下角探出雪怪模样的半个脑袋,四处张望着。整体画面栩栩…

C基础寒假练习(3)

一、求数组中的第二大值 #include <stdio.h> int main() {int arr[] {12, 35, 1, 10, 34, 1};int size sizeof(arr) / sizeof(arr[0]);if (size < 2) {printf("数组元素不足两个\n");return 0;}int first -2147483648, second -2147483648; // 使用IN…

C++,STL,【目录篇】

文章目录 一、简介二、内容提纲第一部分&#xff1a;STL 概述第二部分&#xff1a;STL 容器第三部分&#xff1a;STL 迭代器第四部分&#xff1a;STL 算法第五部分&#xff1a;STL 函数对象第六部分&#xff1a;STL 高级主题第七部分&#xff1a;STL 实战应用 三、写作风格四、…

【Node.js】Koa2 整合接口文档

部分学习来源&#xff1a;https://blog.csdn.net/qq_38734862/article/details/107715579 依赖 // koa2-swagger-ui UI视图组件 swagger-jsdoc 识别写的 /***/ 转 json npm install koa2-swagger-ui swagger-jsdoc --save配置 config\swaggerConfig.js const Router requir…

Maven的单元测试

1. 单元测试的基本概念 单元测试&#xff08;Unit Testing&#xff09; 是一种软件测试方法&#xff0c;专注于测试程序中的最小可测试单元——通常是单个类或方法。通过单元测试&#xff0c;可以确保每个模块按预期工作&#xff0c;从而提高代码的质量和可靠性。 2.安装和配…

论文阅读(八):结构方程模型用于研究数量遗传学中的因果表型网络

1.论文链接&#xff1a;Structural Equation Models for Studying Causal Phenotype Networks in Quantitative Genetics 摘要&#xff1a; 表型性状可能在它们之间发挥因果作用。例如&#xff0c;农业物种的高产可能会增加某些疾病的易感性&#xff0c;相反&#xff0c;疾病的…

LeetCode | 不同路径

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 示例 1…

C++的类Class

文章目录 一、C的struct和C的类的区别二、关于OOP三、举例&#xff1a;一个商品类CGoods四、构造函数和析构函数1、定义一个顺序栈2、用构造和析构代替s.init(5);和s.release();3、在不同内存区域构造对象4、深拷贝和浅拷贝5、构造函数和深拷贝的简单应用6、构造函数的初始化列…

Excel 技巧21 - Excel中整理美化数据实例,Ctrl+T 超级表格(★★★)

本文讲Excel中如何整理美化数据的实例&#xff0c;以及CtrlT 超级表格的常用功能。 目录 1&#xff0c;Excel中整理美化数据 1-1&#xff0c;设置间隔行颜色 1-2&#xff0c;给总销量列设置数据条 1-3&#xff0c;根据总销量设置排序 1-4&#xff0c;加一个销售趋势列 2&…

Leetcode 131 分割回文串(纯DFS)

131. 分割回文串https://leetcode.cn/problems/palindrome-partitioning/https://leetcode.cn/problems/palindrome-partitioning/ 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1&#xff1a…

关于安卓greendao打包时报错问题修复

背景 项目在使用greendao的时候&#xff0c;debug安装没有问题&#xff0c;一到打包签名就报了。 环境 win10 jdk17 gradle8 项目依赖情况 博主的greendao是一个独立的module项目&#xff0c;项目目前只适配了java&#xff0c;不支持Kotlin。然后被外部集成。greendao版本…