二、FreeRTOS学习笔记-移植
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学习笔记-移植的更多相关文章
- 《Linux内核设计与实现》第一、二章学习笔记
<Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡 学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...
- 毕业设计 之 二 PHP学习笔记(一)
毕业设计 之 二 PHP学习笔记(一) 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 一.环境搭建 1.XAMPP下载安装 XAMPP是PHP.MySQL ...
- 《Linux内核设计与实现》 第一二章学习笔记
<Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...
- 《Unix/Linux系统编程》第十二周学习笔记
<Unix/Linux系统编程>第十二周学习笔记 MySQL数据库简介 MySQL是一个关系型数据库管理系统,是最流行的关系型数据库管理系统之一.在 WEB 应用方面,MySQL 是最好的 ...
- FreeRTOS学习及移植笔记之一:开始FreeRTOS之旅
1.必要的准备工作 工欲善其事,必先利其器,在开始学习和移植之前,相应的准备工作必不可少.所以在开始我们写要准备如下: 测试环境:我准备在STM32F103平台上移植和测试FreeRTOS系统 准备F ...
- VBA二次学习笔记(1)——文件操作
说明(2018-9-1 11:20:46): 1. 上班三个月了,累的一逼,真的是钱少事多离家远,每天早上六点起,晚上八点回.哎,少壮不努力啊! 2. 三个月没写博客了,上一篇已经是5.29的了,真的 ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- FreeRTOS学习及移植笔记之二:在IAR和STM32F103VET上移植FreeRTOS
上一次,我们简单的测试了FreeRTOS的基于IAR EWARM v6.4和STM32F103VET6平台的Demo,对其有了一个基本认识.接下来我们开始自己移植FreeRTOS的过程. 1.创建一个 ...
- 《java编程思想(第四版)》第一二章学习笔记
目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
随机推荐
- 傅里叶级数 傅里叶变换 FFT 时域 频域 功率谱 能量谱 功率谱密度PSD
傅立叶级数是基于周期函数的,如果我们把周期推广到
- 游戏AI寻路——八叉树+A*寻路
利用八叉树的空中寻路 你有思考过在空中如何进行寻"路"吗?来想象一个的场景:飞机从空中基地出发,要避开许多空中建筑,最终到达目的地.这种情况下的寻路是没有路面的,寻路物体的移动方向 ...
- Angular 学习笔记 work with excel (导出 excel)
更新: 2020-04-15 补上 read excel 先用 file reader 把文件变成 buffer 然后调用 exceljs 就可以了, 它很聪明的哦, date number, boo ...
- [30] CSP 加赛 1
A.小W与伙伴招募 考虑贪心,可以发现,每一天只需要优先选择价值低的即可 这种贪心思路有一个错误的扩展,就是先把 \(m\) 天的货一次性补齐再一次性买,这样做的问题在于有可能买到次日的货,而这样做是 ...
- Docker数据共享与持久化(六)
接下来介绍如何在 Docker 内部以及容器之间管理数据,在容器中管理数据主要有两种方式: 数据卷(Data Volumes) 挂载主机目录 (Bind mounts) 一.数据卷 数据卷是一个可供一 ...
- 信创环境经典版SuerMap iManager启动崩溃
一.问题环境 操作系统:银河麒麟kylin V10 CPU:鲲鹏920 SuperMap iManager 10.2.1 硬件:16H64G机器 二.现象 磁盘和内存都有空闲,首次启动SuperMap ...
- 【解题报告】P8477 「GLR-R3」春分
P8477 「GLR-R3」春分 题目看起来比较魔怔,考虑怎么搞一下. 首先,一个最简单的想法,每对溶液组都配一个板子,可以用 \(n^2\) 个板子解决,看得出来很不优啊,但是可以得到 Sub1 的 ...
- 2023年3月中国数据库行业分析报告正式发布,带你了解NL2SQL技术原理
为了帮助大家及时了解中国数据库行业发展现状.梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新<中国数据库行业分析报告>,持 ...
- 前端 export default 和 export const name 的区别?
export default 是默认导出export const 是命名导出 在一个vue文件中export const可以有多个,但是export default只有且仅有一个,{}表示导入非默认变 ...
- MYSQL存储过程-练习3 repeat循环
MYSQL存储过程-练习3 repeat循环 1 DELIMITER $$ 2 3 CREATE PROCEDURE `sp_repeat`() 4 BEGIN 5 DECLARE i INT; 6 ...