STM32F107RBT6移植freeRTOS
在玩32板子的时候,碰到一些好几个任务同时工作的工程时,有必要在系统上运行,而轻便高效且易移植的小型系统中,freertos无疑是最好的选择。下面,就来一步一步移植freeRTOS系统吧。
首先下载freertos系统,目前的版本是v10.2.1。对于移植来说,只有FreeRTOS中的文件是有用的,但也并不是全部需要。
源码中的文件结构如下:
Demon:适配各个平台的模板工程,需要CORTEX_STM32F103_Primer_GCC文件夹中的FreeRTOSConfig.h文件
License:没用
Soure:文件结构如下图
文件中包括7个c文件,其中list.c、queue.c和tasks.c是每个工程都需要的文件,其他的建议都加上。
include文件夹中包含了系统所需要的头文件
portable文件夹中包含了不同平台的接口,需要其中的文件。注意:MemMang文件夹中是有关freertos系统内存的文件,这个不能删除。
下面开始移植:
以管理员身份运行keil并新建一个空白工程
芯片选型见下图
运行环境管理配置如下图
拷贝stm32内核文件及标准外设文件
在工程路径下创建CMSIS 、STM32F10x_StdPeriph_Driver和User三个文件夹
CMSIS:将历程中有关文件拷贝到此文件夹中,还要拷贝stm32f10x_conf.h文件到此文件夹中。
STM32F10x_StdPeriph_Driver:将有关外设的头文件和源码拷贝到此文件中
User:创建main.c文件,拷贝在keil中添加CMSIS 、STM32F10x_StdPeriph_Driver和User三个组并添加第二步中添加的文件,工程结构图结果如下图所示:
设置编译选项
编译
未报错,很好。拷贝freertos文件
在工程路径下建立freeRTOS文件夹,将下载的freertos源文件中souurce->include 和一些c文件拷贝到其中;
将source->portable->RVDS->ARM_CM3中对应的port.c和portmacro.h文件拷贝到其中。
将source->MemMang中heap_4.c文件拷贝到其中。
将\FreeRTOSv10.2.1\FreeRTOS\Demo\CORTEX_STM32F107_GCC_Rowley\的FreeRTOSConfig.h拷贝到include中。在keil工程中建立freeRTOS分组添加freeRTOS文件夹下所有c文件,并在编译路径中添加其头文件。如图:
编译
编译产生错误
这是因为从源文件Demon中拷贝的FreeRTOSConfig.h文件未按照实际做修改的原因,要修改一下几点- #define configUSE_TICK_HOOK 1 此处将1改为0
- #define configCPU_CLOCK_HZ ( ( unsigned long ) 62500000 ) 此处将62500000 改为72000000
- #define configCHECK_FOR_STACK_OVERFLOW 2 此处将2改为0
然后编译,产生如下错误:
解决这个问题,要在freeRTOS源文件中的tasks.c文件中添加关于ulRunTimeStatsClock的定义,在文件末添加一行代码即可
编译,未出错。很好。
修改stm32启动文件,因为freeRTOS系统的调度需要用到是stm32的中断,所以需要替换一些接口,具体如下图所示:
新添加内容为:
IMPORT xPortPendSVHandler
IMPORT xPortSysTickHandler
IMPORT vPortSVCHandler
新替换内容为:
DCD SVC_Handler -> vPortSVCHandler
DCD PendSV_Handler -> xPortPendSVHandler
DCD SysTick_Handler -> xPortSysTickHandler
修改文成后,重新编译此工程。
编译,未出错。很好。
至此移植过程已经结束,下面就是系统的应用了。
freeRTOS应用实例:
系统中运行三个任务,简单的使用串口打印task_i2c 、 task_can、 task_uart。
主函数如下:
#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "uart.h"#define START_TASK_PRIO ((unsigned portBASE_TYPE)2U)
#define START_STK_SIZE 32
xTaskHandle StartTask_Handler;#define I2C_TASK_PRIO ((unsigned portBASE_TYPE)3U)
#define I2C_STK_SIZE 64
xTaskHandle i2cTask_Handler;#define CAN_TASK_PRIO ((unsigned portBASE_TYPE)3U)
#define CAN_STK_SIZE 64
xTaskHandle canTask_Handler;#define UART_TASK_PRIO ((unsigned portBASE_TYPE)3U)
#define UART_STK_SIZE 64
xTaskHandle uartTask_Handler;void task_i2c(void)
{while(1){printf("\r\n task_i2c \r\n");vTaskDelay(100);}
}void task_can(void)
{while(1){printf("\r\n task_can \r\n");vTaskDelay(100);}
}void task_uart(void)
{while(1){printf("\r\n task_uart \r\n");vTaskDelay(100);}
}void vStartTaskCreate(void *pvParameters)
{taskENTER_CRITICAL();xTaskCreate((TaskFunction_t)task_i2c, (const char *)"task_i2c", I2C_STK_SIZE, (void *)NULL, I2C_TASK_PRIO, (xTaskHandle *)i2cTask_Handler);xTaskCreate((TaskFunction_t)task_can, (const char *)"task_can", CAN_STK_SIZE, (void *)NULL, CAN_TASK_PRIO, (xTaskHandle *)canTask_Handler);xTaskCreate((TaskFunction_t)task_uart, (const char *)"task_uart", UART_STK_SIZE, (void *)NULL, UART_TASK_PRIO, (xTaskHandle *)uartTask_Handler);vTaskDelete(StartTask_Handler);taskEXIT_CRITICAL();
}int main(void)
{SystemInit();uartInit();printf("\r\n uartInit() ok!!! \r\n");xTaskCreate((pdTASK_CODE)vStartTaskCreate, (const char *)"vStartTaskCreate",(uint16_t)START_STK_SIZE, (void *)NULL, (portTickType)START_TASK_PRIO,(xTaskHandle *)&StartTask_Handler);vTaskStartScheduler();while(1);}
烧进板子后,运行结果如下图所示:
系统可调度执行不同的任务。
STM32F107RBT6移植freeRTOS相关推荐
- FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
上一次,我们简单的测试了FreeRTOS的基于IAR EWARMv6.4和STM32F103VET6平台的Demo,对其有了一个基本认识.接下来我们开始自己移植FreeRTOS的过程. 1.创建 ...
- 2.STM32F407ZGT6 学习笔记-移植 FreeRTOS
程序移植的代码: https://gitee.com/chejia12/free-rtos_-f407.git 1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src ...
- STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级)
STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级) STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级) ...
- 英飞凌TC397移植FreeRTOS
英飞凌TC397移植FreeRTOS 一.准备工作 1.FreeRTOS源码 2.STM驱动代码 3.中断相关配置文件 4.AURIX Developement Studio初始工程(包含SDK) 二 ...
- 【FreeRTOS】在Cortex-M4开发板上移植FreeRTOS并且实现LED灯闪烁(保姆级教程)
相信有不少小伙伴手上只有M4的开发板,想要移植FreeRTOS:但是,网上大部分都是M3移植教程.因此,陷入深深的迷茫中,难不成只能使用仿真了???
- STM32F103移植FreeRTOS
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.freeROTS是什么? 二.移植FreeRTOS步骤 1.移植工具 2.第一步建立一个工程 3.第二步下载Fre ...
- STM32F4基础工程移植FreeRTOS
本篇目标:基于上一篇的基础工程(stm32f4_first_demo)上,移植freertos,建立移植工程(stm32f4_freertos). 资料准备: Freertos源文件 最后工程:项目工 ...
- 飞思卡尔 k60/k64 移植FreeRTOS+USB
每年七八月份是智能车大赛的比赛时间,前段时间,学校车队的学弟问我嵌入式系统的问题,于是笔者拿起多年未碰的K60/K64芯片,搭建了一个FreeRTOS+USB的系统框架.文章结尾提供源 ...
- GD32F310移植FreeRTOS
[GD32F310开发板试用]GD32F310移植FreeRTOS 项目地址:https://github.com/kings669/GD32F310-FreeRTOS 环境说明 首先我先说明我的环境 ...
- 树莓派 pico 移植 FreeRTOS
文章目录 1.FreeRTOS 2.创建工程 3.移植FreeRTOS 4.编写代码 1.FreeRTOS FreeRTOS 是一个迷你的实时操作系统内核.作为一个轻量级的操作系统,功能包括:任务管理 ...
最新文章
- 记录下,我们平时开发当中不得不知道的HTTP状态码
- mybatis常见问题处理:批量操作,传递多个参数,like语句写法等等
- 0X8009310B (ASN:276) win7安装证书时出现错误消息:找不到与此证书文件相关联的证书申请微软官方文档
- java 相加的函数_Java8 Collectors求和功能的自定义扩展操作
- UNIX再学习 -- 文件I/O
- jpa一对多映射案例
- 深入理解javascript系列(十七):函数柯里化
- django restframework 下载文件_【技术选型】Django还是Flask?这是个问题!
- 计算机培训开场白,面试开场白及自我介绍范文4篇
- 【实践案例】Databricks 数据洞察 Delta Lake 在基智科技(STEPONE)的应用实践
- 【深入理解JVM】引用,句柄,指针分别是什么?
- 梯度下降法中的参数学习速率如何选择
- python定期自动运行_令人惊叹的8个Python新手工具
- JDK 安装与环境变量配置(Win10详细版)
- js正则验证手机号码和座机号码及邮箱
- 手绘类短视频怎么制作?从剪辑到配音,后期制作也很重要
- kettle连接mysql 8.0以上数据库所需驱动包
- MySQL Enterprise Backup使用简介
- Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26】—— Spring框架3
- Mac上更新Go版本|Go Mod使用|避坑指南|
热门文章
- 软件测试之如何介绍自己的项目
- android水印图片素材,水印软件哪个好用app 安卓手机视频加图片水印的方法有吗?...
- 欧姆龙plc学习笔记(八)(上传nb程序)
- 儿童车内滞留监测控制系统的设计
- elasticsearch7.8索引生命周期报错:index.lifecycle.rollover_alias does not point to index
- 计算机毕业设计之java+springboot基于vue的4S店车辆管理系统
- 对未来国产操作系统的期望
- JAVA最全最细基础知识点
- ALTOVA XMLSpy 2013中文版下载教程及简单运用
- [Linux]搭建Jdk7与Tomcat7