【FreeRTOS】系统移植:资料下载(二)

简介: 【FreeRTOS】系统移植:资料下载

【FreeRTOS】系统移植:资料下载(一)https://developer.aliyun.com/article/1472584


移植FreeRTOS

在工程目录下新建一个FreeRTOS的文件夹再在这个文件夹下面建立三个文件夹分别是include、src和port;

将FreeRTOSv9.0.0\FreeRTOS\Source文件夹下面的所有.c文件拷贝到src目录

将FreeRTOSv9.0.0\FreeRTOS\Source\include下面所有文件拷贝到include目录

将FreeRTOSv9.0.0\FreeRTOS\Source\portable目录下的MemMang文件夹和RVDS文件夹拷贝到port目录

将FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_M4F_STM32F407ZG-SK\FreeRTOSConfig.h文件复制到工程的core/Inc目录中,这个文件是该实时操作系统的配置文件,这就有点像Linux的.config配置文件一样对应的芯片又对应的配置文件,在这个demo里面涵盖了大部分的芯片支持,如果没有的话选择自己芯片的架构随意复制一个然后进行更改配置即可;

其实在stm32CUBEMX中我们可以直接添加FreeRTOS的包,而且建立工程更加方便,但是自动生成的工程很难让我们了解这个工程的组成这里只是走一遍流程,后续如果在项目中使用到FreeRTOS可以选择利于自己开发的方式创建即可;

然后我们打开keil添加我们的freertos源码文件进来

新建FreeRTOS/port和FreeRTOS/src组,添加文件需要注意我们的配置文件时.h文件所以要选择All files否则找不到

FreeRTOS/src目录全部添加进来

FreeRTOS/port 用于存放 port\MemMang 文件夹 与 port\RVDS\ARM_CM?文件夹的内容,“?”表示 3、4 或者 7,具体选择哪个得看你 使用的是哪个型号的 STM32 开发板,如果是F4系列就拷贝port\RVDS\ARM_CM4F,然后我们将工程文件中 FreeRTOS 的内容添加到工程中去,按照已经新建的分组添加 我们的 FreeRTOS 工程源码。 在 FreeRTOS/port 分组中添加 MemMang 文件夹中的文件只需选择其中一个即可,我 们选择“heap_4.c”,这是 FreeRTOS 的一个内存管理源码文件。

heap_1.c:适合一些不会删除任务,队列以及信号量的任务,特别是一些比较简单的系统和一些对安全性要求比较高的系统。事实上,很多系统中只要创建了任务之后就会一直执行,不会删除任务。所以这个文件适用环境还是比较多的。

heap_2.c:能分配,能回收,但是回收时不考虑内存碎片的场所。适合一些申请和释放操作不是特别频繁,而且不会申请大数组的场所。(申请和释放会造成内存碎片,过多操作内存中可能没有大的连续区域)

heap_3.c:这种方法实际使用的还是c语言的malloc和free函数。与平台没有太大关系。

heap_4.c:内存分配和释放操作比较频繁的系统。例如要重复创建删除任务,队列,信号量等。

heap_5.c:系统需要管理不连续的内存空间,例如接入外部ram的场合

包含文件路径

添加头文件包含

配置串口重定向

#include <stdio.h>
int fputc(int ch, FILE *f) {
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}

然后我们开始编译:

错误1:…\FreeRTOS\port\RVDS\ARM_CM4F\port.c(483): error: A1586E: Bad operand types (UnDefOT, Constant) for operator

解决办法:全局搜索__NVIC_PRIO_BITS将4U改成4

错误2:中断函数的重复定义

因为FreeRTOS已经帮我们实现了这几个函数所以我们需要在stm32f4xx_it.h文件中将这三个中断函数注释掉即可;

错误3:STM32F407ZG_FreeRTOS\STM32F407ZG_FreeRTOS.axf: Error: L6218E: Undefined symbol vApplicationIdleHook (referred from tasks.o).等四个函数未定义

解决办法就是先不实现这几个钩子函数让他等于空

再次编译就成功了,到这里工程移植就完成了,下面进行简单的测试


【FreeRTOS】系统移植:资料下载(三)https://developer.aliyun.com/article/1472586

相关文章
|
数据可视化 中间件 API
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
熟悉 在 STM32 CubeMX 下面的 FreeRTOS 使用
6696 2
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
|
芯片
STM32-FreeRTOS源码下载及移植步骤(基于Keil)
STM32-FreeRTOS源码下载及移植步骤(基于Keil)
2987 0
STM32-FreeRTOS源码下载及移植步骤(基于Keil)
|
API
FreeRTOS学习笔记—FreeRTOS移植
本文学习了如何移植FreeRTOS到自己的STM32工程。最后,根据正点原子提供的测试main函数,测试了移植效果。
1814 0
FreeRTOS学习笔记—FreeRTOS移植
|
传感器 调度 开发者
【Freertos基础入门】freertos任务的优先级
【Freertos基础入门】freertos任务的优先级
2429 0
|
传感器 运维 机器人
解析 RS485 总线:从技术内核到终端电阻的可靠性密码
RS485 总线凭借差分传输、多节点组网与长距离通信等特性,成为工业自动化领域的核心通信技术。其稳定运行离不开终端电阻的精准配置,通过匹配 120Ω 阻抗有效抑制信号反射,保障数据完整性。本文从技术原理到工程实践,深入解析 RS485 总线的可靠性设计,揭示终端电阻在抗干扰、布线与故障排查中的关键作用。
1264 0
|
11月前
|
NoSQL 算法 Linux
OpenOCD下载安装保姆级教程(附安装包,非常详细)
OpenOCD是一款开源片上调试工具,支持JTAG/SWD接口,提供GDB Server、TCL脚本自动化等功能,可实现断点调试、Flash烧录、FPGA编程等,广泛应用于嵌入式开发与量产测试,被誉为“穷人的Lauterbach”。跨平台且免费,配置灵活但稍复杂,是嵌入式工程师的高效调试利器。
|
存储 安全 API
基于FreeRTOS中的串口不定长接收(使用队列进行数据传输)
基于FreeRTOS中的串口不定长接收(使用队列进行数据传输)
|
编译器 调度
FreeRTOS任务的创建(动态方法和静态方法)
FreeRTOS任务的创建(动态方法和静态方法)
3699 0
|
Linux 芯片
【FreeRTOS】系统移植:资料下载(一)
【FreeRTOS】系统移植:资料下载
467 0
|
移动开发 网络协议 数据格式
【VOFA+速成】半小时入门VOFA+简明教程之基础认识(一)
【VOFA+速成】半小时入门VOFA+简明教程(一)