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. 【YashanDB知识库】如何使用yasldr导入lob类型?

    问题现象 在各个项目实施中,有时候会使用到yasldr工具进行csv数据的导入.关于yasldr一般的使用方法,官方文档已经有详细的介绍,具体可见:yasldr使用指导.但在涉及LOB类型的导入时,会 ...

  2. Wordpress 建立公司网站

    1. 先安装好wordpress wordpress 6.4.2-php8.1-fpm-alpine php8.1 Login to wordpress http://www.hei-ya.com/w ...

  3. 忘记 mysql 8.0 root 密码 怎么修改

    本文copy自 Centos7重置Mysql 8.0.1 root 密码 问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码:找了网上好多资料都不尽相同,根据自己的 ...

  4. 受 LabelImg 启发的基于 web 的图像标注工具,基于 Vue 框架

    受 LabelImg 启发的基于 web 的图像标注工具,基于 Vue 框架   哟,网友们好,年更鸽子终于想起了他的博客园密码.如标题所述,今天给大家带来的是一个基于 vue2 的图像标注工具.至于 ...

  5. 工具 – Vitest 与单元测试

    前言 Vitest 是一款配搭 Vite 的前端单元测试工具,可以用于取代 Jasmine 和 Jest. 我先聊一下测试,每当添加新代码或修改旧代码后,我们多少都得测试一下,以确保功能正确才能交付. ...

  6. Angular 18+ 高级教程 – Component 组件 の Pipe 管道

    介绍 Pipe 类似于 Template Syntax,它的用途是 transform value for display. 参考: Docs – Understanding Pipes DatePi ...

  7. DOM – Browser Reflow & Repaint

    前言 没有深入研究过, 懂个概念就好, 等性能遇到问题在来看看. 以前写的笔记: 游览器 reflow 参考: reflow和repaint引发的性能问题 精读<web reflow> R ...

  8. MonoDevelop 的续集dotdevelop

    DotDevelop 是一个跨平台的 .NET 集成开发环境(IDE),它原本是 MonoDevelop 的分支项目,这个项目更侧重于 Linux 支持和 GTK3 升级,github:https:/ ...

  9. dfs与贪心算法——洛谷5194

    问题描述: 有n个砝码,将砝码从大到小排列,从第三个砝码开始,所有砝码均大于其前两个砝码之和,问怎样的砝码组合才可以组合出不大于c的最大重量,输出该重量 输入: 第一行输入两个个整数N,c,代表有N个 ...

  10. Windows 缺失Qt5.xxxx.dll,无法继续执行代码

    事件起因: 客户自行安装完Autodesk系软件后, 软件一直弹窗报错 AutodDesktopApp.exe - 系统错误 Windows软件报错:由于找不到Qt5.xxxx.dll,无法继续执行代 ...