使用CubeMX一键配置Freertos

 一、配置参数

 

1.1 API信息

1.2 版本信息

版本信息 FreeRTOS版本为10.3.1 CMSIS-RTOS 版本为2.00

如果我们不用CubeMX配置的话 还是推荐移植正点原子的,因为它的裁剪头文件比较清晰

就是那个conf的头文件,一键配置的话很方便。可能会跟原版移植的Freertos有些出入

1.3 MPU/FPU

不使用内存保护单元和浮点运算单元 M4内核是支持浮点运算的

1.4 内核设置

 1 使用抢占式调度

 2 CPU时钟频率使用SystemCoreClock

不分频的情况下,系统时钟来源于HCLK时钟 ,可以8分频或不分频

SystemCoreClock = HCLK or HLCK/8

需要1us中断一次的话 就设置tickRate=1e6

SystemCoreClock的计算可以看如下文章 

STM32F407VET6 学习笔记3:内核定时器SystemTick(SysTick)初始化中断_stm32f407vet6定时器-CSDN博客

STM32定时器时钟配置问题说明SystemCoreClock-电子工程世界 

 STM32——SysTick timer(STK)----系统定时器_stm32 systemcoreclock-CSDN博客

3 时钟节拍频率为 1000Hz

也就是1ms中断1次

4 最大优先级数量为 56

我仿写的RTOS只设置了32级优先级 对应uint32_t 这个数据类型

5 最小栈大小为 128 Words

  

说是栈大小 就是任务自己带的栈,用于任务切换

6 最大任务名称长度为 16

7 使用 16 位时钟节拍被设置为禁用

如果 “使用 16 位时钟节拍” 被启用,意味着 FreeRTOS 使用一个 16 位的变量来表示时钟节拍计数器。如果被禁用,那么通常会使用一个不同位数的计数器(可能是 32 位等)来表示时钟节拍。

8  空闲任务应该让步(IDLE_SHOULD_YIELD)被设置为启用

空闲任务在执行过程中,如果有更高优先级的任务就绪,空闲任务会主动让出 CPU 使用权,让更高优先级的任务立即执行

9 使用互斥量被设置为启用

当 “使用互斥量被设置为启用” 时,FreeRTOS 允许任务使用互斥量来保护共享资源。任务在访问共享资源之前,需要先获取互斥量。如果互斥量已经被其他任务占用,当前任务将进入阻塞状态,直到互斥量被释放。

10 使用递归互斥量被设置为启用 

当 “使用递归互斥量被设置为启用” 时,FreeRTOS 允许任务使用递归互斥量来保护共享资源。任务可以根据需要多次获取递归互斥量,而不会陷入死锁状态。

就是拥有互斥锁的任务可以重复获取互斥锁。原本互斥锁基于二值信号量开发,只能获取一次,本人释放后,其他人才能 获取

11 使用计数信号量被设置为启用

计数信号量可以用于管理有限数量的资源。例如,如果有多个任务需要访问一组共享的硬件资源,而这些资源的数量是有限的,可以使用计数信号量来确保只有一定数量的任务能够同时访问这些资源。

12 队列注册表大小为 8

当队列注册表大小为 8 时,这意味着系统最多可以同时创建 8 个不同的队列。如果尝试创建超过 8 个队列,可能会导致创建失败或者其他错误

13 使用应用任务标签被设置为禁用

当 “使用应用任务标签被设置为禁用” 时,FreeRTOS 不会为任务分配或使用任务标签。这意味着在任务创建、调度和管理过程中,不会考虑任务标签的存在。

14 启用向后兼容性(ENABLE_BACKWARD_COMPATIBILTY)被设置为启用

当 “启用向后兼容性” 被设置为启用时,FreeRTOS 会采取一些措施来确保新版本的 FreeRTOS 能够与旧版本的代码和配置兼容。

15 使用端口优化的任务选择(USE_PORT_OPTIMISED_TASK_SELECTION)被设置为禁用

当该选项被设置为禁用时,FreeRTOS 将不使用端口优化的任务选择机制。这意味着任务切换将按照默认的方式进行,可能没有利用特定的硬件特性或编译器优化

16 使用无滴答空闲模式(USE_TICKLESS_IDLE)被设置为禁用

当该选项被设置为禁用时,FreeRTOS 将不会进入无滴答空闲模式。这意味着即使系统处于空闲状态,定时器仍会按照正常的频率产生时钟节拍

17 使用任务通知(USE_TASK_NOTIFICATIONS)被设置为启用

当该选项被设置为启用时,FreeRTOS 允许任务使用任务通知进行通信和同步。开发者可以在代码中调用相关的函数来发送和接收任务通知

18 记录栈高地址(RECORD_STACK_HIGHADDRESS)被设置为禁用

当该选项被设置为禁用时,FreeRTOS 不会在任务控制块中记录任务栈的高地址。这意味着在调试和分析任务栈使用情况时,无法直接获取任务栈的高地址信息

1.5 内存管理设置

1  内存分配方式为动态 / 静态(Memory Allocation Dynamic /Static)

2 总堆大小为 15360 字节(TOTAL_HEAP_SIZE 15360 Bytes)

总堆大小为 15360 字节表示系统中可用于动态分配的内存总量为 15360 字节。这限制了任务和其他组件可以请求的最大内存量

3 内存管理方案为 heap_4(Memory Management scheme heap_4)

heap_4 是 FreeRTOS 提供的一种内存管理方案。它用于管理系统的动态内存分配,确保任务和其他组件能够在需要时获取内存,并在不再需要时释放内存。

1.6 钩子函数相关定义

1 使用空闲钩子函数(USE_IDLE_HOOK)被设置为禁用

空闲钩子函数(Idle Hook Function)是 FreeRTOS 提供的一种机制,允许在系统处于空闲状态时执行特定的代码。当没有其他任务可执行时,FreeRTOS 会调用空闲钩子函数,开发者可以在这个函数中执行一些低优先级的任务,如进入低功耗模式、进行系统监控等

2 使用滴答钩子函数(USE_TICK_HOOK)被设置为禁用

滴答钩子函数(Tick Hook Function)是一种在 FreeRTOS 系统时钟节拍(tick)发生时可以被调用的函数。它提供了一种在系统定时基础上执行特定操作的机制。例如,可以在滴答钩子函数中进行任务调度的微调、统计时间、执行周期性的任务等

3 使用内存分配失败钩子函数(USE_MALLOC_FAILED_HOOK)被设置为禁用

内存分配失败钩子函数(Malloc Failed Hook Function)是在 FreeRTOS 中当动态内存分配请求失败时可以被调用的函数。这个钩子函数提供了一种机制,让开发者在内存分配失败时执行特定的处理逻辑,例如记录错误信息、尝试释放其他资源以重新进行分配或者采取一些应急措施

4 使用守护任务启动钩子函数(USE_DAEMON_TASK_STARTUP_HOOK)被设置为禁用

守护任务启动钩子函数是 FreeRTOS 提供的一个可定制化机制,它会在守护任务启动时被调用。守护任务通常用于执行一些系统后台的、持续运行的、相对低优先级的操作,比如系统资源监控、维护系统状态的一致性等。而这个启动钩子函数就给开发者提供了一个机会,能在守护任务刚开始运行的这个特定节点,插入自定义的代码逻辑,来进行一些初始化操作、设置特定的参数或者执行与守护任务紧密相关的准备工作等

5 检查栈溢出(CHECK_FOR_STACK_OVERFLOW)被设置为禁用

在多任务系统里,每个任务都有自己独立的任务栈,用于存储局部变量、函数调用时的返回地址、寄存器值等信息。栈溢出就是指在任务执行过程中,往栈里写入的数据超出了预先分配给该任务栈的内存空间大小,这可能会导致数据覆盖其他内存区域,进而引发系统不稳定、程序崩溃甚至出现安全隐患等严重问题。而开启栈溢出检查功能,FreeRTOS 会采用一定的机制来监测任务栈是否出现了这种溢出的情况,以便及时发现并处理问题

1.7 运行时和任务统计收集相关定义

1 生成运行时统计信息(GENERATE_RUN_TIME_STATS)被设置为禁用

当 “生成运行时统计信息(GENERATE_RUN_TIME_STATS)” 被设置为禁用时,意味着 FreeRTOS 不会主动去收集和整理上述这些关于任务及系统运行状态的相关统计数据。系统在运行过程中,不会生成对应的统计报告供开发者查看和分析

2 使用跟踪设施(USE_TRACE_FACILTY)被设置为启用

当该选项被设置为启用时,FreeRTOS 会启用跟踪设施,开始记录系统中的各种事件。开发者可以通过特定的接口或工具来访问这些跟踪信息,以了解系统的运行情况

3 使用统计信息格式化函数(USESTATS_FORMATTING_FUNCTIONS)被设置为禁用

当该选项被设置为禁用时,FreeRTOS 不会调用统计信息格式化函数来处理和呈现统计信息。这意味着系统运行时产生的统计数据将以原始的、未经格式化的形式存在,可能不便于开发者直接查看和分析

1.8 协程相关定义(最初的freeRTOS支持这个携程 现在不更新了)

使用协程 禁用

协程是一种轻量级的用户态线程,它允许在单个线程内实现多个任务的并发执行。协程可以暂停和恢复执行,从而实现协作式多任务处理。与传统的线程相比,协程的创建和切换开销通常较小,并且可以更好地利用系统资源

2 最大协程优先级 2

优先级范围:这表明协程的优先级取值范围是有限的,最高为 2。这意味着在系统中,协程的优先级可以是 0、1 或 2

1.9 软件定时器定义

1 使用定时器 启用

定时任务调度:启用软件定时器后,FreeRTOS 会在后台管理软件定时器的运行。当一个软件定时器到期时,系统会触发相应的定时器回调函数,从而执行预定的任务。这为实现周期性任务或在特定时间后执行特定操作提供了方便的机制

2 定时器任务优先级 2

相对优先级:定时器任务被赋予了优先级 2。这意味着在系统中,相对于其他任务,定时器任务具有一定的优先级水平。如果有其他任务的优先级高于 2,那么在资源竞争时,那些高优先级任务会先得到执行;如果没有更高优先级的任务处于就绪状态,定时器任务将有机会执行

3  定时器队列长度 10

容量限制:这意味着该定时器队列最多可以容纳 10 个定时器。如果创建的定时器数量超过 10 个,可能会导致一些定时器无法被正确添加到队列中,或者需要采取其他的处理方式

4 定时器任务栈深度 256 字

内存分配:这意味着为定时器任务分配的栈空间大小为 256 个字。这里的 “字” 通常是指处理器的字长,例如在 32 位处理器上,一个字可能是 4 个字节

1.10 中断嵌套行为配置

1 库最低中断优先级 15

这表明在 FreeRTOS 使用的这个特定库中,中断优先级被设定在一个特定的数值范围内,而 15 是这个范围内的最低优先级值。优先级数值通常是相对的,数值越小表示优先级越高

2 库最大系统调用中断优先级5

优先级级别界定:表明在该库中,系统调用中断的优先级被限制在一个特定的范围内,其中最大值为 5。这意味着系统调用中断在优先级层级中处于相对较高的位置,但并非最高优先级

1.11 自 10.2.1 版本添加的支持

1 消息缓冲区长度类型 size_t

size_t是一种无符号整数类型,通常用于表示对象的大小或长度

2 使用 POSIX 错误号 禁用

禁用使用 POSIX 错误号意味着在软件运行过程中,不会使用 POSIX 标准定义的错误号来表示函数调用的错误状态

1.12  CMSIS-RTOS V2 标志

1 使用 OS2 线程挂起恢复 启用

启用 OS2 线程挂起恢复意味着在软件中可以使用这个特定的线程管理功能。开发者可以在需要的时候挂起特定的线程,以控制其执行时机,或者在适当的时候恢复被挂起的线程,使其继续执行任务

2  使用 OS2 线程枚举 启用

启用 OS2 线程枚举意味着可以在软件中使用这个特定的功能来获取线程信息。开发者可以通过调用相应的 API 或使用特定的工具来枚举系统中的线程。

3  使用 OS2 中断服务程序中的事件标志 启用

启用 OS2 中断服务程序中的事件标志意味着在 OS/2 系统的中断服务程序中可以使用事件标志来进行同步和通信。开发者可以在中断服务程序中设置事件标志,以通知其他任务或线程某个特定的事件已经发生,从而触发相应的处理

4 使用 OS2 线程标志 启用

启用 OS2 线程标志意味着在软件中可以使用这个特定的功能来标识和操作线程的状态。开发者可以通过设置和读取线程标志来实现线程间的通信和同步。

5 使用 OS2 定时器 启用

启用 OS2 定时器意味着在软件中可以使用这个特定的功能。开发者可以创建和配置定时器,指定触发时间间隔和要执行的操作

6 使用 OS2 互斥量 启用

启用 OS2 互斥量意味着可以在程序中利用互斥量来保护共享资源。开发者能够创建互斥量对象,并在访问共享资源的代码段前后对互斥量进行加锁和解锁操作

二、包含参数(一些API接口函数)

以下是对表格中各项内容的解释:

**一、表格中各项的通用含义** 这些都是与 FreeRTOS(一种实时操作系统内核)相关的函数或功能配置项。其中,“Enabled”表示该功能被启用,“Disabled”表示该功能被禁用。

**二、具体各项的解释**

1. `vTaskPrioritySet`:启用时可以设置任务的优先级。

2. `uxTaskPriorityGet`:启用时可以获取任务的优先级。

3. `vTaskDelete`:启用时可以删除任务。

4. `vTaskCleanUpResources`:若启用,可能用于清理任务占用的资源;禁用时则不执行相应的资源清理操作。

5. `vTaskSuspend`:启用时可以挂起任务

6. `vTaskDelayUntil`:启用时可以使任务延迟到特定的时间点。

7. `vTaskDelay`:启用时可以使任务延迟指定的时间。

8. `xTaskGetSchedulerState`:启用时可以获取调度器的状态。

9. `xTaskResumeFromISR`:启用时可以从中断服务程序中恢复任务。

10. `xQueueGetMutexHolder`:启用时可能用于获取互斥信号量的持有者信息(与队列相关的互斥操作)。

11. `xSemaphoreGetMutexHolder`:若启用,可能用于获取信号量的互斥持有者信息;禁用时则不能执行此操作。

12. `pcTaskGetTaskName`:若启用,可能用于获取任务的名称;禁用时则不能获取任务名称。 13. `uxTaskGetStackHighWaterMark`:启用时可以获取任务栈的高水位标记(用于检查任务栈的使用情况)。

14. `xTaskGetCurrentTaskHandle`:启用时可以获取当前任务的句柄。

15. `eTaskGetState`:启用时可以获取任务的状态。

16. `xEventGroupSetBitFromISR`:若启用,可能用于从中断服务程序中设置事件组的位;禁用时则不能在中断服务程序中执行此操作。

17. `xTimerPendFunctionCall`:启用时可以挂起函数调用(可能与定时器相关的功能)。

18. `xTaskAbortDelay`:若启用,可能用于中止任务的延迟;禁用时则不能执行此操作。

19. `xTaskGetHandle`:若启用,可能用于获取任务的句柄;禁用时则不能获取任务句柄。

20. `uxTaskGetStackHighWaterMark2`:若启用,可能是另一种获取任务栈高水位标记的方式;禁用时则不能使用这种方式获取。

三、高级设置

需要配置以下参数:

- 新库设置:“USE NEWLIB REENTRANT”(使用新库可重入特性)被禁用。

- 项目设置:“Use FW pack heap file”(使用固件包堆文件)被启用。

四、用户的常量

“User Constants”(用户常量)通常是指由用户自定义的一些常量值。

在特定的软件环境中,用户常量可以用于配置各种参数、控制程序的行为或作为特定功能的标识。用户可以根据自己的需求定义这些常量,并在程序中使用它们

例如,可能用于定义特定的阈值、配置特定的行为模式、标识特定的状态等。

具体的用途和含义会根据软件的具体上下文和功能而有所不同。

 五、任务和队列

默认任务:

- 优先级为“osPriorityLow”。

- 栈大小为 128 个字。

- 入口函数为“StartDefaultTask”。

- 参数为“NULL”。

- 采用动态分配方式。

- 缓冲区名称和控制块名称均为“NULL”。

LED Task

- 优先级为“osPriorityLow1”。

- 栈大小为 128 个字。

- 入口函数是“LedTaskFunc”。

- 参数为“NULL”。

- 采用动态分配方式。

- 缓冲区名称和控制块名称均为“NULL”。

Log_Task

- 任务名称为“Log_Task”。

- 优先级是“osPriorityLow1”。

- 栈大小为 128 个字。

- 入口函数为“LogTaskFunc”。

- 参数为“NULL”。

- 采用动态分配方式。

- 缓冲区名称和控制块名称均为“NULL”。

优先级是从高到低排序的

原来有人写了这种总结的文章,卧槽

FreeRTOS基于Cube MX配置的解析_xqueuegetmutexholder-CSDN博客

六、FreeRTOS 堆使用

七、 事件

八、 互斥量

九、 定时器和信号量

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

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

相关文章

如何提高自动驾驶中惯性和卫星组合导航pbox的精度?

Mems纯惯导里程推算精度做到千分之一,两分钟航向精度保持0.001弧度,是如何做到的? 【飞迪sigma车规高精度组合导航系统在3.6km长隧道下穿测试,135s纯惯导航向保持精度小于0.06度,隧道内转弯轨迹和直线航位推算重合#智能…

10款PDF翻译工具的探索之旅:我的使用经历与工具特色!!

在如今的时代,PDF文件已经成为我们工作、学习和生活中不可或缺的一部分。但是,当遇到一些非母语或陌生语言的PDF文档时,这要怎么办呀!这时候翻译工具就显得尤为重要了。这也是我所遇到过的难题,现在我将与大家分享几款…

MySQL_第13章_视图

1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 视图一方面可以使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。 2.2 视图的理解 视图是一种虚拟表,本身是不具有数据的,占用很少的内存…

【测试框架篇】单元测试框架pytest(1):环境安装和配置

一、pytest简介 Pytest是Python的一种单元测试框架,与Python自带的unittest测试框架类似,但是比 unittest框架使用起来更简洁,效率更高。 二、pytest特点 Pytest是一个非常成熟的Python测试框架,主要特点有以下几点: 非常容易…

Camera Tuning中AE/AWB/AF基础知识介绍

3A定义 3A是Camera ISP控制算法的一个重要组成部分,通常分为自动曝光(AE)、自动聚焦(AF)、自动白平衡(AWB)三个组件。 自动曝光(Auto Exposure) AE基本概念 曝光概念…

group_concat配置影响程序出bug

在 ThinkPHP 5 中,想要临时修改 MySQL 数据库的 group_concat_max_len 参数,可以使用 原生 SQL 执行 来修改该值。你可以通过 Db 类来执行 SQL 语句,从而修改会话(Session)级别的变量。 步骤 设置 group_concat_max_l…

linux 下查看程序启动的目录

以azkaban为例 第一步、ps -ef | grep azkaban 查询出进程号 第二步、cd /proc/ 第三步 、cd 进程号 第四部 ll 查看详情 查看jar 位置 查看jar 启动命令

Linux设置Nginx开机启动

操作系统环境:CentOS 7 【需要 root 权限,使用 root 用户进行操作】 原理:利用 systemctl 管理服务 设置 Nginx 开机启动 需要 root 权限,普通用户使用 sudo 进行命令操作 原理:利用 systemctl 管理服务 1、新建…

红帽认证和华为认证哪个好?看完这4点你就明白了

就算在一堆的认证里面,华为和红帽也因为它们特别权威、含金量特别高而显得特别突出,简直就是行业里的榜样。只要拿到了其中随便哪一个证书,就说明证书持有者的网络技术很厉害,找工作的时候常常能给自己加点分。 不过好多人都不太…

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中,我们了解了基础的网络知识,网络的出…

❤React-JSX语法认识和使用

1、JSX基本使用​ JSX是React的核心 JSX是ES的扩展 jsx语法 -> 普通的JavaScript代码 -> babel React可以使用JSX的前提和原因: React生态系统支持: 脚手架通常用于构建React应用程序,而JSX是React框架的核心语法之一。因此&#xf…

中文书籍对《人月神话》的引用(161-210本):微软的秘密

中文书籍对《人月神话》的引用(第001到160本)>> 《人月神话》于1975年出版,1995年出二十周年版。自出版以来,该书被大量的书籍和文章引用,直到现在热潮不退。 2023年,清华大学出版社推出《人月神话》…

【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数

CL13 最大的数(20 分) 输入一个有 n 个无重复元素的整数数组 a&#xff0c;输出数组中最大的数。提示&#xff1a;如使用排序库函数 sort()&#xff0c;需要包含头文件#include 。输入&#xff1a; 第一行是一个正整数 n(2<n<20)&#xff1b; 第二行包含 n 个不重复的整…

DHCP与FTP

DHCP dhcp&#xff1a;动态主机配置的协议&#xff0c;应用在大型的局域网环境中 服务端和客户端 服务端&#xff1a;提供IP地址&#xff0c;某种特定功能的提供者 客户端&#xff1a;请求IP地址&#xff0c;请求对应的功能的使用者 服务端的端口号&#xff1a;67 客户端的端…

Spark 的容错机制:保障数据处理的稳定性与高效性

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…

【Qt-ROS开发】使用 Qt Creator 构建和编译含 ROS 库的 Qt 项目

【Qt-ROS】使用 Qt Creator 构建和编译含 ROS 库的项目 网上大多数办法是在 Qt creator中安装 ros_qtc_plugin 插件&#xff0c;项目以 ROS1 工作空间的形式构建&#xff0c;还是使用 catkin 来构建整个项目。但是这种方式局限很大&#xff0c;导入 Qt 的组件反而变得很麻烦&a…

彻底理解ARXML中的PDU

文章目录 一、DBC报文信号的发送二、ARXML报文信号的发送2.1 什么是PDU2.2 PDU的类型2.3 Container-I-PDU的发送 三、小结 在CANFD支持可变速率和更大的数据长度&#xff08;64字节&#xff09;的情况下&#xff0c;可以使用DBC和ARXML两种数据库格式来进行报文通信&#xff0c…

OpenGL【C++】台灯

#include<gl/glut.h> #include <math.h>/**************************************/ /* 设置灯旋转角度初始值和一些所用参数 */ /**************************************/ static GLfloat yrot -100.0; static GLfloat zrot 40.0; const GLfloat PI 3.141592…

初探鸿蒙:从概念到实践

一、鸿蒙开发的环境准备 开发工具&#xff1a;使用 DevEco Studio&#xff0c;支持 ArkTS 语法。 系统要求&#xff1a;确保计算机符合 DevEco Studio 的最低系统需求。安装步骤&#xff1a;下载 DevEco Studio&#xff0c;安装合适的 SDK 和模拟器 二、鸿蒙应用可以…

React Native 全新架构来了

React Native 0.76 现已在 npm 上以全新架构默认发布&#xff01; 在 0.76 版本的发布博客中&#xff0c;我们分享了此版本包含的一系列重大更改。在本文中&#xff0c;我们将概述全新架构以及它如何塑造 React Native 的未来。 全新架构全面支持现代 React 功能&#xff0c;…