当前位置: 首页 > news >正文

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;

相关文章:

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

21.3-启动流程、编码风格(了解) 启动流程 第一种启动流程(我们就使用这个): 在main函数中将硬件初始化、RTOS系统初始化,同时创建所有任务,再启动RTOS调度器。 第二种启动流程: 在main函数中将硬件初始化、RTOS系统初始化,只…...

未来无线技术的发展方向

未来无线技术的发展趋势呈现出多样化、融合化的特点,涵盖速度、覆盖范围、应用领域、频段利用、安全性等多个方面。这些趋势将深刻改变人们的生活和社会的运行方式。 传输速度提升:Wi-Fi 技术迭代加快,如 Wi-Fi7 理论峰值速率达 46Gbps&#…...

Qt5离线安装包无法下载问题解决办法

想在电脑里装一个Qt,但是直接报错。果然还是有解决办法滴。 qt download from your ip is not allowed Qt5安装包下载办法 方法一:简单直接,直接科学一下,不过违法行为咱不做,遵纪守法好公民(不过没办法阻…...

qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别

qt-C笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别 code review! 参考笔记 1.qt-C笔记之重写QGraphicsItem的paint方法(自定义QGraphicsItem) 文章目录 qt-C笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphic…...

doris:导入时实现数据转换

Doris 在数据导入时提供了强大的数据转换能力,可以简化部分数据处理流程,减少对额外 ETL 工具的依赖。主要支持以下四种转换方式: 列映射:将源数据列映射到目标表的不同列。 列变换:使用函数和表达式对源数据进行实时…...

新版231普通阿里滑块 自动化和逆向实现 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 补环境逆向 部分补环境 …...

如何构建树状的思维棱镜认知框架

在思维与知识管理中,“树状思维棱镜”通常指一种层级式、可多维度展开和不断深入(下钻)的认知框架。它不仅仅是普通的树状结构(如传统思维导图),更强调“棱镜”所体现的多视角、多维度切换与综合分析的能力…...

openRv1126 AI算法部署实战之——ONNX模型部署实战

在RV1126开发板上部署ONNX算法,实时目标检测RTSP传输。视频演示地址 rv1126 yolov5 实时目标检测 rtsp传输_哔哩哔哩_bilibili 一、准备工作 1.从官网下载YOLOv5-v7.0工程(YOLOv5的第7个版本) 手动在线下载: Releases ultraly…...

Vue 组件开发:构建高效可复用的前端界面要素

1 引言 在现代 Web 开发中,构建高效且可复用的前端界面要素是提升开发效率和用户体验的关键。Vue.js 作为一种轻量级且功能强大的前端框架,提供了丰富的工具和机制,帮助开发者快速构建高质量的应用程序。通过合理设计和封装 Vue 组件,我们可以实现组件的高效复用,提高开发…...

Vue.js组件开发-实现全屏平滑移动、自适应图片全屏滑动切换

使用Vue实现全屏平滑移动、自适应图片全屏滑动切换的功能。使用Vue 3和Vue Router,并结合一些CSS样式来完成这个效果。 步骤 创建Vue项目:使用Vue CLI创建一个新的Vue项目。准备图片:将需要展示的图片放在项目的public目录下。创建组件&…...

水果实体店品牌数字化:RWA + 智能体落地方案

一、方案背景 随着数字化技术的迅猛发展,实体零售行业正面临前所未有的挑战与机遇。传统的零售模式难以满足消费者对个性化、便捷化、智能化的需求,尤其是在水果等生鲜商品领域,如何通过技术手段提升运营效率、增强顾客体验、拓宽盈利模式&a…...

DeepSeek模型:开启人工智能的新篇章

DeepSeek模型:开启人工智能的新篇章 在当今快速发展的技术浪潮中,人工智能(AI)已经成为了推动社会进步和创新的核心力量之一。而DeepSeek模型,作为AI领域的一颗璀璨明珠,正以其强大的功能和灵活的用法&…...

Kubernetes 环境中的自动化运维实战指南

Kubernetes 作为容器编排领域的领导者,已经成为云原生应用的核心基础设施。然而,随着集群规模的扩大和应用的复杂化,手动运维 Kubernetes 集群变得愈发困难。自动化运维成为提升效率、保障系统稳定性的关键。本文将详细介绍如何在 Kubernetes 环境中实施自动化运维,涵盖工具…...

深入解析 C++17 中的 std::not_fn

文章目录 1. std::not_fn 的定义与目的2. 基本用法2.1 基本示例2.2 使用 Lambda 表达式2.3 与其他函数适配器的比较3. 在标准库中的应用3.1 结合标准库算法使用3.1.1 std::find_if 中的应用3.1.2 std::remove_if 中的应用3.1.3 其他标准库算法中的应用4. 高级技巧与最佳实践4.1…...

unity实现回旋镖函数

最近学习unity2D,想实现一个回旋镖武器,发出后就可以在角色周围回旋。 一、目标 1.不是一次性的,扔出去、返回、没有了;而是扔出去,返回到角色后方相同距离,再次返回;再次返回,永远…...

想品客老师的第九天:原型和继承

原型与继承前置看这里 原型 原型都了解了,但是不是所有对象都有对象原型 let obj1 {}console.log(obj1)let obj2 Object.create(null, {name: {value: 荷叶饭}})console.log(obj2) obj2为什么没有对象原型?obj2是完全的数据字典对象,没有…...

力扣【416. 分割等和子集】详细Java题解(背包问题)

首先我们可以求出数组和,当我们找到一个子集中元素的和为数组和的一半时,该就说明可以分割等和子集。 对于该问题我们可以转换成背包问题,求 数组里的元素 装入 数组和的一半大小的背包 能取得的最大值。 然后注意可以剪枝的地方。 代码&…...

2025年AI手机集中上市,三星Galaxy S25系列上市

2025年被认为是AI手机集中爆发的一年,各大厂商都会推出搭载人工智能的智能手机。三星Galaxy S25系列全球上市了。 三星Galaxy S25系列包含S25、S25和S25 Ultra三款机型,起售价为800美元(约合人民币5800元)。全系搭载骁龙8 Elite芯…...

为AI聊天工具添加一个知识系统 之79 详细设计之20 正则表达式 之7

本文要点 Q750、今天我们继续聊 本中的正则表达式。 在本项目(为AI聊天工具添加一个知识系统)中,将“正则表达式” 本来是计算机科学计算机科学的一个概念, 推广(扩张)到认知科学的“认知范畴”概念&#…...

理解PLT表和GOT表

1 简介 现代操作系统都是通过库来进行代码复用,降低开发成本提升系统整体效率。而库主要分为两种,一种是静态库,比如windows的.lib文件,macos的.a,linux的.a,另一种是动态库,比如windows的dll文…...

NaViL-9B参数详解教程:max_new_tokens与temperature协同调优

NaViL-9B参数详解教程:max_new_tokens与temperature协同调优 1. 认识NaViL-9B多模态大模型 NaViL-9B是上海人工智能实验室研发的原生多模态大语言模型,它不仅能处理纯文本问答,还能理解图片内容。这个模型特别适合需要同时处理文字和图像信…...

终极指南:如何实时监控Slonik连接池状态与性能指标

终极指南:如何实时监控Slonik连接池状态与性能指标 【免费下载链接】slonik A Node.js PostgreSQL client with runtime and build time type safety, and composable SQL. 项目地址: https://gitcode.com/gh_mirrors/sl/slonik Slonik作为一款为Node.js打造…...

3个高效Searchkit高亮技巧:让你的搜索结果直观又专业

3个高效Searchkit高亮技巧:让你的搜索结果直观又专业 【免费下载链接】searchkit Search UI for Elasticsearch & Opensearch. Compatible with Algolias Instantsearch and Autocomplete components. React & Vue support 项目地址: https://gitcode.com…...

鼎捷T100——快速构建简易报表:azzi310与azzi910的高效协作

1. 从零开始:理解鼎捷T100报表开发的核心模块 第一次接触鼎捷T100系统时,我被各种功能模块搞得晕头转向。直到真正用azzi310和azzi910协作完成报表开发,才发现这套组合拳的妙处。简单来说,azzi310就像你的SQL编辑器报表设计器&…...

【Python MCP服务器安全开发黄金模板】:20年专家亲授7大零信任实践与3层防御体系

第一章:Python MCP服务器安全开发黄金模板概览Python MCP(Model-Controller-Protocol)服务器是一种面向协议驱动、可扩展性强的后端服务架构,广泛应用于物联网控制平台与微服务网关场景。本章所介绍的“黄金模板”并非通用框架&am…...

基于摄像头和网络的火灾监测系统开源项目推荐

推荐的开源项目 基于YOLOv10的火焰烟雾检测系统(最推荐) 特点:支持图像、视频和摄像头实时检测,提供完整的GUI界面(PySide6开发)优势:界面简洁易用,代码结构清晰,适合初学…...

大麦智能抢票系统:告别手速极限的终极解决方案

大麦智能抢票系统:告别手速极限的终极解决方案 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票而烦恼吗&…...

嘉立创PCB打样被加价到170元?手把手教你用STM32H743飞控板案例解决‘拆单嫌疑’

STM32H743飞控板PCB打样避坑指南:如何巧妙应对嘉立创拆单判定 最近不少硬件开发者在使用嘉立创进行STM32H743飞控板PCB打样时,遇到了一个令人头疼的问题——原本33元的4层板打样价格突然飙升到170多元。这种情况往往是由于平台算法误判设计文件存在"…...

11.0592MHz晶振在51单片机串口通信中的优势解析

1. 为什么11.0592MHz晶振成为单片机工程师的首选在嵌入式系统设计中,晶振的选择往往决定了整个系统的稳定性和精度。作为一名从事单片机开发多年的工程师,我发现11.0592MHz的晶振在51单片机项目中出现的频率异常高。这绝非偶然,而是由一系列精…...

如何让foobar2000界面脱胎换骨?3大设计理念打造个性化音乐体验

如何让foobar2000界面脱胎换骨?3大设计理念打造个性化音乐体验 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 副标题:从安装到定制:零基础也能掌握的foobox-cn美化…...