FreeRTOS移植

首先准备一个基础工程,stm32标准库或者HAL库,本实验使用HAL库版本的内存管理实验进行移植

移植步骤:

1

第一步:添加FreeRTOS源码(添加FreeRTOS源码的目的是使嵌入式通过FreeRTOS系统调用MUC寄存器进行相关外设操作)



下图源码可通过www.freertos.org官网进行下载



也可通过正点原子提供的A盘资料中的 6,软件资料->14,FreeRTOS 学习资料->FreeRTOS 源码





添加好的文件夹如下图所示



其中portable为连接桥梁,内部我们只用到了下面的3个文件,分别是keil(keil软件使用)、RVDS(keil文件需要使用的驱动文件,软件与硬件的连接桥梁)、MemMang(内存管理算法,只用到了heap_4.c)

第二步:在工程分组中添加文件

首先通过MDK软件打开基础工程,然后在基础工程分组下新建两个文件,然后分别将上面添加的FreeRTOS源码按照下图所示添加到两个文件中

其中port.c文件根据自己使用的开发板型号进行添加,我使用的是STM32F4探索者v2,所有我添加ARM_CM4F中的port.c文件

第三步:添加相应的头文件路径



第四步:FreeRTOSConfig.h文件(是FreeRTOS操作系统的配置文件,功能:进行功能裁剪,有些用不到的功能可以通过本文件中将其宏定义去除掉,以来节省内存资源)添加到FreeRTOS源码中的include文件夹下

FreeRTOSConfig.h文件同样在官方下载的文件中获取,根据开发板不同型号自行选择,下图为我使用的型号的文件路径图

再结合自身需求进行修改,或者直接使用正点原子提供的文件



2

修改SYSTEM文件修改SYSTEM文件中的sys.c delay.c usart.c

首先sys.h文件中的宏定义改成1表示支持OS,这样就支持OS系统了,但是基础工程之前是针对UCOS进行编写的,所以内存有些不是FreeRTOS使用的,需要修改或删除



usart.c文件中的中断服务函数中的下图两个函数删除,因为这两个函数是在UCOS系统中使用的,FreeRTOS中未使用



删除下图所示头文件引用部分,同样也是UCOS中使用的,FreeRTOS中未使用到,所有删除



delay.c中首先删除下图UCOS使用内存



接下来定义extern void xPortSysTickHandler(void);



然后修改滴答定时器的中断服务函数

void SysTick_Handler(void)

{

HAL_IncTick();

if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)//系统已经运行

{

xPortSysTickHandler();

}

}



接下来就修改delay_init()函数,修改了一个宏定义,删除了一行无用代码

这里就体现了F1和F4开发板的FreeRTOSConfig.h文件的差异之处了,及由于滴答定时器时钟不同,而FreeRTOS的时钟频率是由滴答定时器决定的所以对这个宏定义就有所不同



删除delay_osschedlock();//阻止OS调度,防止打断us延时

delay_osschedunlock(); //恢复OS调度

结果如下图所示



void delay_ms(u16 nms)函数改成下图所示

<

void delay_ms(u16 nms)

{

u32 i;

for(i = 0;i<nms;i++)

{

delay_us(1000);

}

}



接下来修改头文件,删除UCOS使用的头文件,添加FreeRTOS使用的头文件



3

修改中断相关文件 修改Systick中断(用于提供时钟节拍)、SVS中断、PendSV中断(任务切换相关中断)

将与FreeRTOS中定义重复的HAL库中的三个中断服务函数注释掉(注释掉,但是HAL库需要使用,所有在stm32f4xx_it.c中引用头文件进行三个中断函数的调用)



通过条件编译注释掉这三个函数



下面宏定义的4U改成4

添加应用程序:验证移植是否成功

https://blog.csdn.net/weixin_45360072/article/details/139279327?spm=1001.2014.3001.5502

二、FreeRTOS学习笔记-移植的更多相关文章

  1. 《Linux内核设计与实现》第一、二章学习笔记

    <Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...

  2. 毕业设计 之 二 PHP学习笔记(一)

    毕业设计 之 二 PHP学习笔记(一) 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 一.环境搭建 1.XAMPP下载安装 XAMPP是PHP.MySQL ...

  3. 《Linux内核设计与实现》 第一二章学习笔记

    <Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...

  4. 《Unix/Linux系统编程》第十二周学习笔记

    <Unix/Linux系统编程>第十二周学习笔记 MySQL数据库简介 MySQL是一个关系型数据库管理系统,是最流行的关系型数据库管理系统之一.在 WEB 应用方面,MySQL 是最好的 ...

  5. FreeRTOS学习及移植笔记之一:开始FreeRTOS之旅

    1.必要的准备工作 工欲善其事,必先利其器,在开始学习和移植之前,相应的准备工作必不可少.所以在开始我们写要准备如下: 测试环境:我准备在STM32F103平台上移植和测试FreeRTOS系统 准备F ...

  6. VBA二次学习笔记(1)——文件操作

    说明(2018-9-1 11:20:46): 1. 上班三个月了,累的一逼,真的是钱少事多离家远,每天早上六点起,晚上八点回.哎,少壮不努力啊! 2. 三个月没写博客了,上一篇已经是5.29的了,真的 ...

  7. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

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

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

  9. 《java编程思想(第四版)》第一二章学习笔记

    目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...

  10. 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记

    第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...

随机推荐

  1. 1p-frac:已开源,仅用单张分形图片即可媲美ImageNet的预训练效果 | ECCV 2024

    分形几何是一个数学分支,主要应用于作图方面.一般来说,分形经过无数次递归迭代后的结果.比如取一条线段,抹去中间的三分之一,会得到长度是原三分之一长的两条线段,中间隔着相同长度的间隙.然后重复这个动作, ...

  2. Coursera self-driving2, State Estimation and Localization Week4, LIDAR

    operating principles 工作原理 Velodyne 加州,Hokuyo 日本,SICK 德国 TOF 就是用发出去收到的时间差和光速算距离 basic LIDAR models (2 ...

  3. BOM – Window.matchMedia

    参考 Youtube – Detecting Screen Size and OS Dark Mode with matchMedia() - JavaScript Tutorial 介绍 CSS 有 ...

  4. MDC – Material Design, Angular Material, MDC, MWC, Lit 的关系

    前言 它们关系挺乱的, 而且不只是我一个人感觉乱 还有 所以这篇做一个整理吧. Material Design Google 的设计指南. 早年用于 Android Apps, 现在也用于 Web A ...

  5. MySQL 用户、权限管理,C/C++连接与使用

    目录 用户 用户管理 查询所有用户 查看当前用户 查看当前连接数 创建用户 删除用户 修改密码规则 查看规则/策略 规则说明 临时设置 持久设置 修改密码 权限 数据库提供的 权限列表 查看权限 给用 ...

  6. Springboot 项目配置 HTTPS

    生成证书 输入命令 keytool -genkeypair -alias "boot" -keyalg "RSA" -keystore "boot.k ...

  7. jpa 多条件模糊查询,分页并排序

    jpa 多条件模糊查询,分页并排序很难吗,这样写不就几行代码的事吗?搞不明白你们写的怎么长篇大论花里胡哨的,看的一脸懵逼. jpa多字段模糊查询,持久层字段还是要一一对应的,但是你可以在service ...

  8. 北京智和信通 | 无人值守的IDC机房动环综合监控运维

    随着信息技术的发展和全面应用,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备.系统.业务应用数量与日俱增,规模逐渐扩大,一旦机房内的设备出现故障,将对数据处理.传输.存储以及 ...

  9. 1.2 HELLO 三角形

    这一节,我觉得是相当有难度的.渲染一个三角形,就需要介绍GLSL语言,图形渲染管线(Graphics Pipeline)以及着色器(Shader),标准化设备坐标(NDC)等诸多概念. 图形渲染管线和 ...

  10. dotnet封装一个配置工具类

    using Microsoft.Extensions.Configuration; namespace web.tools; public class settingHelper { public s ...