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

FreeRTOS 项目剖析

FreeRTOS 应用程序与非 RTOS 应用程序的启动和执行方式并无二致, 如果调用 vTaskStartScheduler() 的话,另当别论。vTaskStartScheduler() 通常从应用程序的 main() 函数调用。RTOS 仅控制 调用 vTaskStartScheduler() 后的执行顺序。

我们强烈建议您确保代码在选择的目标上正确执行 (正确的启动代码、正确的链接器配置等), 然后再开始尝试使用 RTOS 功能。

一、源文件

FreeRTOS 作为标准 C 源文件提供, 与项目中的其他 C 文件共同构建。FreeRTOS 源文件 以 zip 文件形式分发。RTOS 源代码组织页面 介绍了 zip 文件夹中的文件结构。 

您的项目必须至少包含以下源文件:

  • FreeRTOS/Source/tasks.c
  • FreeRTOS/Source/queue.c
  • FreeRTOS/Source/list.c
  • FreeRTOS/Source/portable/[compiler]/[architecture]/port.c
  • FreeRTOS/Source/portable/MemMang/heap_x.c 其中 "x" 可以是 1、2、3、4 或 5。

 如果包含 port.c 文件的目录也包含程序集语言文件, 那么也必须使用程序集语言文件。

二、可选源文件 

如果需要软件定时器功能,请在项目中添加 FreeRTOS/Source/timers.c。

如果需要事件组功能,请在项目中添加 FreeRTOS/Source/event_groups.c。

如果需要流缓冲区或消息缓冲区功能,请在项目中添加 FreeRTOS/Source/stream_buffer.c。

如果需要协程功能,请在项目中添加 FreeRTOS/Source/croutine.c(请注意,协程已弃用, 不推荐用于新设计)。

 三、头文件

 

以下目录必须位于编译器的 include 路径中(必须告知编译器在这些目录中搜索 头文件):

  • FreeRTOS/Source/include
  • FreeRTOS/Source/portable/[compiler]/[architecture]。
  • 无论哪个目录包含要使用的 FreeRTOSConfig.h 文件,请参阅下文“配置文件”段落。

根据移植的不同,也可能需要将相同的目录放在汇编器的 include 路径中。

四、配置文件 

每个项目还需要一个名为 FreeRTOSConfig.h 的文件。 FreeRTOSConfig.h 它为正在构建的应用程序量身定制 RTOS 内核。因此,它是取决于应用程序的,而不是 RTOS,并且应位于应用程序目录中, 而不是 RTOS 内核源代码目录中。

如果您的项目包含 heap_1、heap_2、heap_4 或 heap_5,则 FreeRTOSConfig.h 的 configTOTAL_HEAP_SIZE 定义将决定 FreeRTOS 堆的大小。如果configTOTAL_HEAP_SIZE设置得太高,则您的应用程序将无法建立连接。

FreeRTOSConfig.h 中的 configMINIMAL_STACK_SIZE 定义 设定了闲置任务使用的堆栈大小。如果 configMINIMAL_STACK_SIZE 设置得太低, 则空闲任务将造成栈溢出。建议您找到使用相同微控制架构的 FreeRTOS 官方演示, 复制其中的 configMINIMAL_STACK_SIZE设置。FreeRTOS 演示 项目存储在 FreeRTOS/Demo 目录的子目录中。 请注意,一些演示项目的时间距离现在比较久,因此不包含所有可用的配置选项。

五、中断矢量

每个 RTOS 移植都使用定时器来生成周期性滴答中断。许多移植使用额外的中断 来管理上下文切换。RTOS 移植所需的中断由提供的 RTOS 移植源文件 提供服务。

RTOS 移植所提供的中断处理程序的安装方法取决于 所使用的移植和编译器。请参阅针对所使用移植提供的官方演示应用程序, 必要时也可复制。另请参阅官方演示应用程序配套的文档页面。

 


http://www.mrgr.cn/news/25350.html

相关文章:

  • 征稿啦!第 19 届「中国 Linux 内核开发者大会」重磅启动
  • C++——STL中的迭代器(Iterator)补充
  • 新品|瑞芯微RK3588工控机IPC8801适用AI算力、边缘计算、工业视觉
  • 1265:【例9.9】最长公共子序列 动态规划
  • 养宠浮毛严重怎么清理?希喂、范罗士、IAM宠物空气净化器真实测评
  • 企业私有云容器化架构运维实战
  • 看过来!2024 云栖大会操作系统技术 Workshop 怎么玩?
  • Tomact的基本使用
  • 论文笔记:基于LLM和多轮学习的漫画零样本角色识别与说话人预测
  • 浮点数在内存中的存储
  • html+css+js网页设计 旅游 龙门石窟4个页面
  • 2024抖音电商丰收嘉年华在攀枝花市盐边县举办
  • BrainSegFounder:迈向用于神经影像分割的3D基础模型|文献速递--Transformer架构在医学影像分析中的应用
  • 滑动窗口(2)_无重复字符的最长字串
  • day-54 求出最多标记下标
  • 萤石举办2024清洁机器人新品发布会 多维智能再造行业标杆
  • IDEA调用VPN接口超时,但ApiFox可成功调用接口
  • 基于元神操作系统实现文件复制
  • 关于 OceanBase 4.x 中被truncate的 table 不再支持进回收站的原因
  • 2024.9.12(k8s环境搭建2)