1、FreeRTOS的学习

1.1、FreeRTOS的源码下载

学习一个操作系统前,首先要下载对应的源码,用于研究和学习。FreeRTOS的源码下载链接如下:

FreeRTOS Real Time Kernel (RTOS) - Browse /FreeRTOS at SourceForge.net

页面图示如下:

下载之后的文件为:FreeRTOSv202012.00-LTS.exe.qbl

1.2、FreeRTOS在线API指南

FreeRTOS提供了在线的API接口的指南,这对于开发和学习都是非常的友好的,在线API指南的网址为:

http://web.ist.utl.pt/~ist11993/FRTOS-API/index.html

在线指南的示意图如下:

1.3、在线应用指南

除了在线的API应用指南之外,还有一个在线的开发指导手册,是非常好用的一份手册:

https://www.freertos.org/RTOS.html

2、FreeRTOS移植到MCU上

0.基于STM32F103的移植,其它系列MCU类似。

硬件平台:STM32F103ZET6;

软件平台:MDK529

FreeTROS版本:FreeRTOS Kernel V10.4.3

1.在工程目录下新建FreeRTOS文件夹,该文件夹用于存放FreeRTOS相关的文件。

2.在FreeRTOSv10.2.1\FreeRTOS\Source路径下找到FreeRTOS的源码,将其拷贝到工程中的FreeRTOS文件夹中。

其中头文件和源码源文件是全部要用到的,不做任何删除。

portable文件夹是和硬件平台,软件开发环境相关的文件。FreeRTOS为了让用户移植简单,帮用户做了很多工作。打开portable文件夹如下:

3.打开工程,在工程中添加一个专用来存放FreeRTOS的Group

将FreeRTOS的源文件,内存管理文件,硬件接口文件统统添加到这个FreeRTOS这个Group中

内存管理文件在FreeRTOS\portable\MemMang文件夹下,FreeRTOS提供了五种内存管理方案,对于移植来说,随便选一种方案都是可以的。但是heap_4有内存碎片管理的功能,对内存碎片可以自动监控和收集,所以选择这个内存管理会更好。

port.c文件在FreeRTOS\portable\RVDS路径下找到与自己使用的MCU内核的文件夹:

4.添加头文件路径,需要添加两个路径。

5.编译

便已完成之后,提示打不开FreeRTOSConfig.h这个文件。这是因为FreeRTOS源码中并没有提供这个文件。

这种情况下有两种办法:

第一、自己动手写一个(哈哈,个人觉得这个对一般人来说不现实);

第二、找一个可以直接用的。

仔细找找会发现,其实官方在很多平台下都移植了FreeRTOS。去官方的demo中找,FreeRTOSv10.2.1\FreeRTOS\Demo路径下存放的全是官方移植的demo。在此路径下找到CORTEX_STM32F103_Keil文件夹,此文件夹是官方基于STM32F103和MDK平台移植的demo。(其他平台参考该方式类似的查找)

在此文件夹下找到FreeRTOSConfig.h文件。

将其拷贝到源码的头文件中。重新进行编译。

这种情况下,只要使能一个有关的宏定义为1即可以,在FreeRTOSConfig.h文件中将宏INCLUDE_xTaskGetCurrentTaskHandle定义为1,使能该函数,重新编译一下,应该就不会报错了。

6.添加三个宏定义

首先我们需要对FreeRTOS的几个很重要的问题要有一个认识:

<1> FreeRTOS触发第一个任务是在SVC_Handler中断中进行的;
<2> 切换任务是在PendSV_Handler中断中进行的;
<3> 系统节拍中断是在SysTick_Handler中进行的。

在我们自己移植的项目中,官方的文件中对3个函数的定义是没有的,需要我们自己进行一些修改。

在官方的提供的文件中,实现了另外3个相关的函数,名字分别是:

vPortSVCHandler,xPortPendSVHandler,xPortSysTickHandler。

所以,我们只需要根据自己所用的MCU环境进行相应的替换即可以对应上了。在FreeRTOSConfig.h头文件中做一下宏定义就可以了。注意要将自己的原来3个空函数注释掉。

这三个宏定义非常重要

#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler

其中,xPortSysTickHandler是系统滴答定时器中断,用于给FreeRTOS提供运行的心跳节拍的,代码示意如下:

void xPortSysTickHandler( void )
{/* The SysTick runs at the lowest interrupt priority, so when this interrupt* executes all interrupts must be unmasked.  There is therefore no need to* save and then restore the interrupt mask value as its value is already* known - therefore the slightly faster vPortRaiseBASEPRI() function is used* in place of portSET_INTERRUPT_MASK_FROM_ISR(). */vPortRaiseBASEPRI();{/* Increment the RTOS tick. */if( xTaskIncrementTick() != pdFALSE ){/* A context switch is required.  Context switching is performed in* the PendSV interrupt.  Pend the PendSV interrupt. */portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;}}vPortClearBASEPRIFromISR();
}

对嵌入式开发感兴趣的话,欢迎关注微信公众号“嵌入式之入坑笔记”,一块学习交流吧!

FreeRTOS — 源码下载与移植相关推荐

  1. C语言实现中国象棋(Qt实现界面,源码下载,详细注释,易移植)

    前言:中国象棋的规则很多人都懂,用C语言做一个中国象棋游戏,其要点是怎么把抽象的规则变成形象.具体的代码.本项目提供详细的实现思路,源码附带大量的注释说明,源码逐步地实现了每一种棋类的走棋规则.吃棋规 ...

  2. RTOS之uCOS-II源码下载及源码目录结构、常见的RTOS!

    RTOS有众多种,用得最火的是FreeRTOS,因为它即使用于商业途径,也是开源免费的:其次是就是uCOS-II和uCOS-III.uCOS-II用于商业途径是需要付费的,但是对于学习研究却是免费的. ...

  3. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  4. linux WiFi源码解析,Wifi移植浅析

    作者:熊老师, 大家都知道在做wifi的移植过程中主要是涉及到移植三个东西,一个openssl的移植,一个wpa_suplicant的移植.还有一个就是添加咱们的wifi驱动了,咱们这里使用的rt81 ...

  5. FreeRTOS源码获取

    1.进入官网:https://www.freertos.org 2.进入下载页面 3.下载源码 4.提取源码 5.查看FreeRTOS源码

  6. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...

  7. 【STM32F429的DSP教程】第6章 ARM DSP源码和库移植方法(MDK5的AC5和AC6)

    完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第6章   ARM DSP源码和库移植方法(MDK5的AC5 ...

  8. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...

  9. RT-Thread源码下载介绍

    转载:https://blog.csdn.net/RootCode/article/details/84066981 RT-Thread 源码下载应用笔记 摘要 本文将详细介绍如何获取 RT-Thre ...

最新文章

  1. 单电源运算放大器全波整流电路_几种二极管整流电路原理图解。
  2. hdu4965 巧用矩阵乘法结合律
  3. fslayui和layui_fsLayui介绍(layui插件)
  4. 猎豹MFC--CMenu菜单 设置主菜单 给主对话框设置菜单 设置快捷菜单
  5. JavaFX之TableView的MenuButton
  6. 前端学习(799):根据位置返回字符
  7. 2012总结--目录
  8. 此版本的visual studio无法打开下列项目_深度学习实现高精度钢琴曲转谱Piano transcription项目简明使用教程...
  9. playbook管理配置文件
  10. 从LR到DNN点击率预估
  11. K8S集群部署istio
  12. python爬取别人qq空间相册_Python_小林的爬取QQ空间相册图片链接程序
  13. 用html5画卡通人物源代码,用canvas画一个卡通人物!!
  14. dym 微服务 快速开发框架
  15. CadenceAllegro16.6绘图软件使用一
  16. 计算机专业内存8g和16g差距大吗,电脑内存8G和16G的区别真的有那么大吗?
  17. 实例:用C#.NET手把手教你做微信公众号开发(12)--带参数二维码裂变推广
  18. java 线程执行结束_java中怎么判断线程执行完毕
  19. 字节面试杂谈——计算机网络原理
  20. 【重新安装MySql5.7.24 / MySql57过程】好多个错误,慢慢改好的

热门文章

  1. CentOS8 配置本地yum源详细教程
  2. 使用juery使用ajax实现用户注册时的验证
  3. 图像处理视觉定位软件:发泡机孔定位控制系统软件
  4. 机能强劲 疑为N3DS主机用GPU规格透露?
  5. 小学数学闯关游戏 java代码_简单的java程序 小学数学闯关游戏 多谢高分
  6. iPhone绘图总结
  7. mysql 5亿数据 查询_日均5亿查询量的京东订单中心,为什么舍MySQL用ES?
  8. 日均 5 亿查询量的京东订单中心,为什么舍 MySQL 用 ES ?
  9. 设置主机名和hosts映射
  10. 几点减几点怎么列算式_张宏伟:感悟减法算式模型的意义 破除一题一问的思维定势...