在玩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系统内存的文件,这个不能删除。

下面开始移植:

  1. 以管理员身份运行keil并新建一个空白工程
    芯片选型见下图

    运行环境管理配置如下图

  2. 拷贝stm32内核文件及标准外设文件
    在工程路径下创建CMSIS 、STM32F10x_StdPeriph_Driver和User三个文件夹
    CMSIS:将历程中有关文件拷贝到此文件夹中,还要拷贝stm32f10x_conf.h文件到此文件夹中。
    STM32F10x_StdPeriph_Driver:将有关外设的头文件和源码拷贝到此文件中
    User:创建main.c文件,拷贝

  3. 在keil中添加CMSIS 、STM32F10x_StdPeriph_Driver和User三个组并添加第二步中添加的文件,工程结构图结果如下图所示:

  4. 设置编译选项

  5. 编译

    未报错,很好。

  6. 拷贝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中。

  7. 在keil工程中建立freeRTOS分组添加freeRTOS文件夹下所有c文件,并在编译路径中添加其头文件。如图:

  8. 编译
    编译产生错误

    这是因为从源文件Demon中拷贝的FreeRTOSConfig.h文件未按照实际做修改的原因,要修改一下几点

    1. #define configUSE_TICK_HOOK 1 此处将1改为0
    2. #define configCPU_CLOCK_HZ ( ( unsigned long ) 62500000 ) 此处将62500000 改为72000000
    3. #define configCHECK_FOR_STACK_OVERFLOW 2 此处将2改为0
      然后编译,产生如下错误:

      解决这个问题,要在freeRTOS源文件中的tasks.c文件中添加关于ulRunTimeStatsClock的定义,在文件末添加一行代码即可

      编译,未出错。很好。
  9. 修改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相关推荐

  1. FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS

     上一次,我们简单的测试了FreeRTOS的基于IAR EWARMv6.4和STM32F103VET6平台的Demo,对其有了一个基本认识.接下来我们开始自己移植FreeRTOS的过程. 1.创建 ...

  2. 2.STM32F407ZGT6 学习笔记-移植 FreeRTOS

    程序移植的代码: https://gitee.com/chejia12/free-rtos_-f407.git 1. 在工程下建议FreeRTOS文件夹 2. 在FreeRTOS文件夹下建立 src ...

  3. STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级)

    STM32F103移植FreeRTOS必须搞明白的系列知识---1(Cortex-CM3中断优先级) STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级) ...

  4. 英飞凌TC397移植FreeRTOS

    英飞凌TC397移植FreeRTOS 一.准备工作 1.FreeRTOS源码 2.STM驱动代码 3.中断相关配置文件 4.AURIX Developement Studio初始工程(包含SDK) 二 ...

  5. 【FreeRTOS】在Cortex-M4开发板上移植FreeRTOS并且实现LED灯闪烁(保姆级教程)

    相信有不少小伙伴手上只有M4的开发板,想要移植FreeRTOS:但是,网上大部分都是M3移植教程.因此,陷入深深的迷茫中,难不成只能使用仿真了???

  6. STM32F103移植FreeRTOS

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.freeROTS是什么? 二.移植FreeRTOS步骤 1.移植工具 2.第一步建立一个工程 3.第二步下载Fre ...

  7. STM32F4基础工程移植FreeRTOS

    本篇目标:基于上一篇的基础工程(stm32f4_first_demo)上,移植freertos,建立移植工程(stm32f4_freertos). 资料准备: Freertos源文件 最后工程:项目工 ...

  8. 飞思卡尔 k60/k64 移植FreeRTOS+USB

            每年七八月份是智能车大赛的比赛时间,前段时间,学校车队的学弟问我嵌入式系统的问题,于是笔者拿起多年未碰的K60/K64芯片,搭建了一个FreeRTOS+USB的系统框架.文章结尾提供源 ...

  9. GD32F310移植FreeRTOS

    [GD32F310开发板试用]GD32F310移植FreeRTOS 项目地址:https://github.com/kings669/GD32F310-FreeRTOS 环境说明 首先我先说明我的环境 ...

  10. 树莓派 pico 移植 FreeRTOS

    文章目录 1.FreeRTOS 2.创建工程 3.移植FreeRTOS 4.编写代码 1.FreeRTOS FreeRTOS 是一个迷你的实时操作系统内核.作为一个轻量级的操作系统,功能包括:任务管理 ...

最新文章

  1. 记录下,我们平时开发当中不得不知道的HTTP状态码
  2. mybatis常见问题处理:批量操作,传递多个参数,like语句写法等等
  3. 0X8009310B (ASN:276) win7安装证书时出现错误消息:找不到与此证书文件相关联的证书申请微软官方文档
  4. java 相加的函数_Java8 Collectors求和功能的自定义扩展操作
  5. UNIX再学习 -- 文件I/O
  6. jpa一对多映射案例
  7. 深入理解javascript系列(十七):函数柯里化
  8. django restframework 下载文件_【技术选型】Django还是Flask?这是个问题!
  9. 计算机培训开场白,面试开场白及自我介绍范文4篇
  10. 【实践案例】Databricks 数据洞察 Delta Lake 在基智科技(STEPONE)的应用实践
  11. 【深入理解JVM】引用,句柄,指针分别是什么?
  12. 梯度下降法中的参数学习速率如何选择
  13. python定期自动运行_令人惊叹的8个Python新手工具
  14. JDK 安装与环境变量配置(Win10详细版)
  15. js正则验证手机号码和座机号码及邮箱
  16. 手绘类短视频怎么制作?从剪辑到配音,后期制作也很重要
  17. kettle连接mysql 8.0以上数据库所需驱动包
  18. MySQL Enterprise Backup使用简介
  19. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26】—— Spring框架3
  20. Mac上更新Go版本|Go Mod使用|避坑指南|

热门文章

  1. 软件测试之如何介绍自己的项目
  2. android水印图片素材,水印软件哪个好用app 安卓手机视频加图片水印的方法有吗?...
  3. 欧姆龙plc学习笔记(八)(上传nb程序)
  4. 儿童车内滞留监测控制系统的设计
  5. elasticsearch7.8索引生命周期报错:index.lifecycle.rollover_alias does not point to index
  6. 计算机毕业设计之java+springboot基于vue的4S店车辆管理系统
  7. 对未来国产操作系统的期望
  8. JAVA最全最细基础知识点
  9. ALTOVA XMLSpy 2013中文版下载教程及简单运用
  10. [Linux]搭建Jdk7与Tomcat7