关于FreeRTOS移植到STM32F103上的步骤以及注意事项

2024-05-27 11:08

本文主要是介绍关于FreeRTOS移植到STM32F103上的步骤以及注意事项,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    因为最近比较有时间,而且发现自己对于STM上可以跑的操作系统相对陌生。所以选择几个操作系统进行移植和玩几个DEMO理解一下。虽然理解的不是很深入,但是如果项目需要的话,只是移植,进行多任务的操作。应付一下还是绰绰有余的。之前移植了uCosII.后续有需要会总结一下。这里先对FreeRTOS相关的问题进行总结。因为个人能力有限。有什么不对的地方请大家批评,写这个主要是为了记录一下自己的移植过程。

1、第一步肯定是先到官网去下载关于FreeRTOS的源码

下面的网址是官方最新源码的下载地址:

https://sourceforge.net/projects/freertos/files/latest/download?source=files

目前官方提供的最新版本是v9.0.0, FreeRTOS源码在解压目录下的路径为

FreeRTOS_V9.0.0rc2\FreeRTOS\Source

2、下载完,进行安装。安装完你会得到如下目录的文件

我们需要的是FreeRTOS这个目录的文件。而关于-Plus的使用,目前小弟并没有试过。大家可以试试,好玩记得推荐哦。

3、进入FreeRTOS目录,你会发现里面有三个文件夹,分别是Demo,License,Source。在Demo中,我们能看到很多不同平台的移植例程,这个很好的,有相关不懂的平台,完全可以用来参考使用。因为我们是在MDK下移植。所以选择CORTEX_STM32F103_Keil这个文件夹的内容进行参考,其实这个Demo还是很有帮助的,后续你在移植的时候,会发现缺少的文件都可以在这个Demo中进行直接拿来使用。选择介绍另一个文件夹的主要用途。

另一个文件夹是Source.这个目录下的文件主要有

include这个目录,我建议大家如果不是很清楚哪些要用,哪些不用的要,都可以添加进工程中。重点是这个portable文件夹,里面的东西比较多。而我们主要用到的目录有下面几个。关于不同的平台,大家可以自己选择哦。

其实你会发现,你进入Keil中,其实没有东西,就是告诉你,这个目录和RVDS中的是一样的操作。所以你需要进入RVDS中。把关于你平台内核的文件拷贝过来。小弟这边使用的M3内核,所以拷贝后如下。还有这个MemMang一定要记得拿过来,很重要哦。因为关于内存的管理都是在这里面呢。

接下来介绍下根目录下的这个几个源文件,我们需要用到的就只有几个,如果只是移植看一下加入操作系统后的运行情况。

现在,我们需要移植的文件大概就只有这些哦。现在就可以建立一个简单的工程了。关于工程建立,这边就不多说啦。大家不会的话,可以自己参考网上的例程或者正点原子中不完全手册上的教程哦。现在小弟创建工程并添加进相关文件如下:

其中port.c就是在ARM_CM3中找。heap_4.c就是在MenMang中找。里面有不同的内存管理方案,大家可以根据需要选择自己想要的方案,小弟这边选的是heap_4.c.现在要说一个最最骚的问题了,就是你添加完这些文件。然后点击编译,如果你默认的是选择系统的启动文件,就会报出很多错误。还有就是会缺少一个文件叫做FreeRTOSConfig.h,你会发现这个文件在源码中并找不到。所以刚才说了哦,Demo很重要呢。就是要到Demo中去找到这个文件,并且添加进去。还有就是启动文件,如果你看不出那些错误怎么改,也拿Demo中的启动文件啦。有时候,我们需要的是应用,如果你有时间并且很多兴趣,你就可以一步步进行理解操作哦。小弟这边是试验。所以直接拿了STM32F10x.s这个启动文件,后续的话,应该会进行对比分析,再跟大家分享。

最后就是跟你的需要添加一些文件进去哦,如果你用的是库函数开发,记得关于stm32f10x_conf.h、#include "stm32f10x.h"这些文件很重要哦。记得去Demo中找,如果丢失会很麻烦呢,很多地方编译都不会通过。还有就是库函数开发的话,这边一个地方要设置,不然也编译不过呢

 

现在看一下main.c函数的主要操作

#include "led.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x.h"
#include "misc.h"

#include "FreeRTOS.h"
#include "task.h"
#include "usart.h"

void LedTask1(void *pvParameters )
{
while(1)
{
printf("i am LedTask1\r\n");
//vTaskDelay(100 / portTICK_RATE_MS);  
LED0_OFF;
vTaskDelay(500 / portTICK_RATE_MS);  
LED0_ON;
vTaskDelay(500 / portTICK_RATE_MS);  
}

}

void LedTask2(void *pvParameters )
{
while(1)
{
printf("i am LedTask2\r\n");
vTaskDelay(10 / portTICK_RATE_MS);  
// LED1_OFF;
// vTaskDelay(500 / portTICK_RATE_MS);  
// LED1_ON;
// vTaskDelay(500 / portTICK_RATE_MS);  
}
}

int main()
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

uart_init(9600);
LED_Init();

printf("init sucess\r\n");

//堆栈深度(字)  //任务参数 //任务优先级 //任务句柄
xTaskCreate(LedTask1,"LED_TASK1",40,NULL,1,NULL);     
xTaskCreate(LedTask2,"LED_TASK2",40,NULL,2,NULL);  

vTaskStartScheduler(); //启动任务调度器

return 0;

}

 

根据需求添加哦。我这边是用LED灯和串口进行验证是否移植成功。所以添加了关于LED和USART的模块代码。这边有个注意的地方是。你的创建的任务一定记得在后面加上一点延迟。不然的话,很容易出错,你想看到的效果,就看不到啦。像小弟这个Demo,效果就是LED灯5秒闪烁一次。然后串口交替打印信息。

 

好了。目前简单的移植就这些啦,是不是觉得很简单呢。因为现在很多物联网小模块,可能只需要接收和处理数据。然后上传之类的。用上一个操作系统,可能会比较好哦,毕竟简单的处理。

这篇关于关于FreeRTOS移植到STM32F103上的步骤以及注意事项的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007299

相关文章

Linux搭建ftp服务器的步骤

《Linux搭建ftp服务器的步骤》本文给大家分享Linux搭建ftp服务器的步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录ftp搭建1:下载vsftpd工具2:下载客户端工具3:进入配置文件目录vsftpd.conf配置文件4:

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

springboot整合mqtt的步骤示例详解

《springboot整合mqtt的步骤示例详解》MQTT(MessageQueuingTelemetryTransport)是一种轻量级的消息传输协议,适用于物联网设备之间的通信,本文介绍Sprin... 目录1、引入依赖包2、yml配置3、创建配置4、自定义注解6、使用示例使用场景:mqtt可用于消息发

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

在 Spring Boot 中连接 MySQL 数据库的详细步骤

《在SpringBoot中连接MySQL数据库的详细步骤》本文介绍了SpringBoot连接MySQL数据库的流程,添加依赖、配置连接信息、创建实体类与仓库接口,通过自动配置实现数据库操作,... 目录一、添加依赖二、配置数据库连接三、创建实体类四、创建仓库接口五、创建服务类六、创建控制器七、运行应用程序八

Spring Security6.3.x的使用指南与注意事项

《SpringSecurity6.3.x的使用指南与注意事项》SpringSecurity6.3.1基于现代化架构,提供简洁配置、增强默认安全性和OAuth2.1/OIDC支持,采用Lambda... 目录介绍基础配置 (Servlet 应用 - 使用 Lambda DSL)关键配置详解(Lambda DS