二、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的简化版本 ...
随机推荐
- 从Workload中优雅隔离Pod
线上集群中,业务跑着跑着,突然发现有个Pod上出现大量错误日志,其他的Pod是正常的,该如何处理呢? 直接删除Pod? 这样不便于保留现场,可能会影响判断问题的根因 让业务方忍一会,先排查下问题? 会 ...
- Round #2022/11/26
问题 B:染色 题目描述 有长度为 \(n\) 的一个序列,编号为 \(1\) 到 \(n\) ,现要对这些元素进行染色标记,若编号 \(i-j\) 为素数,且 \(1\le i < j \le ...
- 给vue+element-ui动态设置主题色(包括外链样式、内联样式、行内样式)
基本思路 实现思路:实现一个mixins混入的主题js即theme.js,注册到全局下.使用el-color-picker组件切换颜色的时候,把颜色值传递到根root下,在根实例下监听主题色的变化来更 ...
- 北京智和信通 | 无人值守的IDC机房动环综合监控运维
随着信息技术的发展和全面应用,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备.系统.业务应用数量与日俱增,规模逐渐扩大,一旦机房内的设备出现故障,将对数据处理.传输.存储以及 ...
- excel江湖异闻录--渣渣
有朋友问过我,为什么要写这些,细细思量,一来我喜欢这个纯粹的江湖,二则向这些纯粹的高手.大神致敬,三是纪念一下自己学习EXCEL的历程. 其实,每一个篇章都有一个逻辑,只不过这个逻辑,不是按照实力的高 ...
- BC1.2和PD 充电的区别
USB Battery Charging Specification 1.2(BC1.2)和 USB Power Delivery(USB PD)是两个不同的充电标准,它们在应用场景.充电能力.充电协 ...
- Spring事务的1道面试题
每次聊起Spring事务,好像很熟悉,又好像很陌生.本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点. 原理 Spring事务的原理是:通过AOP切面的方式实现的,也就是通过代理模式 ...
- 直播预告 | YashanDB 2023年度发布会正式定档11月8日,邀您共同见证国产数据库发展实践!
11月8日,YashanDB 2023年度发布会将于云端直播开启,发布会以 「惟实·励新」 为主题,邀请企业用户.合作伙伴.广大开发者共同见证全新产品与解决方案.届时发布会将在墨天轮社区同步进行,欢迎 ...
- ChatGPT “眼”中的开源数据库
开源作为数据库发展的未来趋势之一,被冠以"数据库弯道超车的法宝"的称号.中国开源数据库产品正处于蓬勃发展的趋势,根据 墨天轮中国数据库流行度 ,截止2023年2月底已有46款开源数 ...
- google 搜索技巧
size qq.com inurl : size 指定网站 inurl 这个网站的指定内容 filetype 指定搜索的文件类型