【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 C# Windows
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
Winform中实现无边框窗体只需要设置FormBorderStyle = FormBorderStyle.None,但是无边框下我们需要保留移动窗体、拖拽调整大小、自定义美观好看的标题栏等...
5102 0
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
|
消息中间件 存储 API
|
Linux 芯片
【FreeRTOS】系统移植:资料下载(一)
【FreeRTOS】系统移植:资料下载
209 0
物联网:NB卡是否支持2/3/4G网络
在讨论“NB卡是否支持2/3/4G网络”的问题时,我们首先需要明确“NB卡”指的是什么。在通信领域中,“NB卡”通常指的是支持NB-IoT(Narrowband Internet of Things,窄带物联网)技术的SIM卡或模块。NB-IoT是一种专为物联网设计的窄带无线通信技术,它基于现有的蜂窝网络进行构建,但专注于低功耗广域网(LPWAN)应用。
|
监控 安全 物联网
物联网:物联网卡如何建流量池
物联网(IoT)构建流量池的过程,实际上是指构建一个能够集中、管理和优化物联网设备数据流量的系统。这个流量池不仅可以提高数据传输效率,还能有效控制成本,优化用户体验。以下是一些关键步骤和策略来构建物联网流量池:
|
存储 程序员 编译器
堆和栈的区别
堆和栈的区别
|
消息中间件 传感器 网络协议
阿里云MQTT简介和使用流程
以下是内容的摘要: 该文主要介绍了在阿里云上搭建 MQTT 服务器的步骤。首先,需要注册阿里云账号并进行实名认证。然后,购买阿里云 MQTT 实例,选择合适的类型、地域、连接和消息限制。接着,创建产品和设备,命名并上线,获取 MQTT 连接的相关信息,包括 ProductKey、DeviceName 和 DeviceSecret。通过提供的 MQTT.fx 工具,设置 MQTT 客户端连接参数,包括 Broker 地址、端口、用户名和密码。最后,使用 MQTT.fx 测试连接,实现数据的上报和接收,验证 MQTT 服务器的配置是否成功。
|
SQL 缓存 关系型数据库
数据库连接池到底应该设多大?
数据库连接池到底应该设多大?
615 0