关于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

相关文章

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py