1、必要的准备工作

工欲善其事,必先利其器,在开始学习和移植之前,相应的准备工作必不可少。所以在开始我们写要准备如下:

  • 测试环境:我准备在STM32F103平台上移植和测试FreeRTOS系统
  • 准备FreeRTOS系统源码,从官网下载最新版本的程序包,最新为v9.0.0,地址:https://sourceforge.net/projects/freertos/
  • 从官网查看FreeRTOS每个函数的API说明,以及相应的例子。根据以往的经验,在学习过程中应该会经常查看,地址: http://www.freertos.org/a00106.html

2、了解FreeRTOS源文件的目录结构

下载的FreeRTOS下载包是一个自解压的文件,解压后包含的内容比较丰富,不过不露结构很清晰,主要包含两个子目录:FreeRTOS和FreeRTOS-Plus。如下所示:

  • FreeRTOS-Plus           包含FreeRTOS+组件和演示例程;
  • FreeRTOS                  包含FreeRTOS实时内核源文件和演示例程。

我们学习的FreeRTOS内核部分在FreeRTOS目录之下,打开FreeRTOS文件夹它又被分成两个主要的子目录,如下所示:

  • Demo          包含演示例程工程;
  • Source         包含实时内核源文件。

RTOS代码的核心包含在三个文件中:tasks.c、queue.c、list.c。这三个文件位于FreeRTOS/Source目录。在该目录下还包含三个可选的文件:timers.c、event_groups.c、croutine.c,分别实现软件定时、事件组和协程功能。

打开Source文件夹,FreeRTOS/Source目录结构如下所示:

  • include        FreeRTOS内核代码头文件。
  • portable              面向特定环境的接口描述。
  • 以及前面所述的6个文件。

应用平台的不同,所以每个支持的处理器架构都有一段与处理器架构相关的RTOS代码。这个是RTOS移植层,它位于FreeRTOS/Source/Portable/[相应编译器]/[相应CPU架构]子目录。

对于FreeRTOS,堆栈设计也属于移植层。FreeRTOS/Source/portable/MemMang目录下heap_x.c文件给出了多种堆栈方案,后续文章将会详细介绍堆栈操作。

如果FreeRTOS在IAR环境下移植到STM32F103平台则为需要移植\FreeRTOS\Source\portable\IAR\ARM_CM3目录下的文件,除此之外位于\FreeRTOS\Source\portable\MemMang目录之下的堆栈设计文件也需要移植。其他部分则可忽略。

打开Demo文件夹,其中包含各种处理器架构和编译器的演示例程。大多数的演示例程代码对所有移植都是通用的,位于FreeRTOS/Demo/Common/Minimal目录。Demo目录下剩余的子目录包含预先配置好的工程,可以用于构建个人演示例程。子目录的命名与移植平台和编译器相关。如果我们查看在IAR环境下STM32F103平台演示工程,则可以查看\FreeRTOS\Demo\CORTEX_STM32F103_IAR目录。

3、开启简单的快乐之旅

有了以上的了解我们现在通过Demo简单学习一下,在IAR EWARM开发环境中打开\FreeRTOS\Demo\CORTEX_STM32F103_IAR目录下的RTOSDemo.eww工程。

该项目打开后的文件组织形式如下:

编译该工程,该Demo项目在IAR EWARM V6.4平台下编译无错误:

下载到STM32F103VET6目标MCU运行正确。至此,测试Demo项目正确。

FreeRTOS学习及移植笔记之一:开始FreeRTOS之旅的更多相关文章

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

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

  2. 【FreeRTOS学习01】CubeIDE快速整合FreeRTOS创建第一个任务

    整个专栏主要是博主结合自身对FreeRTOS的实战学习以及源码分析,基于STM32F767 Nucleo-144平台,在CubeIDE下进行开发,结合官方的HAL库,将硬件环节的问题减少到最小,将精力 ...

  3. 【FreeRTOS学习05】深度解剖FreeRTOSConfig.h实现对系统的自定义剪裁

    ROM/RAM太小,因此要对系统进行剪裁: 相关文章 [FreeRTOS实战汇总]小白博主的RTOS学习实战快速进阶之路(持续更新) 文章目录 相关文章 1 系统的剪裁 2 FreeRTOSConfi ...

  4. FreeRTOS介绍与移植

    http://andyhuzhill.github.io/freertos/2013/07/30/freertostransplant/ 最近在看一个实时嵌入式操作系统————FreeRTOS, 为什 ...

  5. (45)FreeRTOS学习之二

    一:架构概述 FreeRTOS是一个相对较小的应用程序.最小化的FreeRTOS内核仅包括3个(.c)文件和少数头文件,总共不到9000行代码,还包括了注释和空行.一个典型的编译后(二进制)代码映像小 ...

  6. (44)FreeRTOS学习之一

    一:FreeRTOS 作为一个轻量级的操作系统,FreeRTOS 提供的功能包括:任务管理.时间管理.信号量.消息队列.内存管理.记录功能等,可基本满足较小系统的需要.FreeRTOS 内核支持优先级 ...

  7. hadoop2.5.2学习及实践笔记(二)—— 编译源代码及导入源码至eclipse

    生产环境中hadoop一般会选择64位版本,官方下载的hadoop安装包中的native库是32位的,因此运行64位版本时,需要自己编译64位的native库,并替换掉自带native库. 源码包下的 ...

  8. Python学习的个人笔记(基础语法)

    Python学习的个人笔记 题外话: 我是一个大二的计算机系的学生,这份python学习个人笔记是趁寒假这一周在慕课网,w3cschool,还有借鉴了一些博客,资料整理出来的,用于自己方便的时候查阅, ...

  9. 开始记录学习java的笔记

    今天开始记录学习java的笔记,加油

随机推荐

  1. Spring IOC容器创建对象的方式

    一.无参构造函数创建                                                                            我们用Spring创建Stu ...

  2. Ubuntu 14.04.4官方默认更新源sources.list

    Ubuntu 14.04.4官方默认更新源sources.list # deb cdrom:[Ubuntu LTS _Trusty Tahr_ - Release amd64 (20160217.1) ...

  3. java高新技术-基本数据类型拆装箱及享元设计模式

    享元设计模式 public static void main(String[] args) { Integer iObj = 3; //自动装箱 System.out.println(iObj + 1 ...

  4. Codeforces乱刷集合

    发这篇博客的目的是因为刷了些水题,但又有一些不错的地方可以加以借鉴....然后又不想一个一个发.... Codeforces731A 题目大意:给出一个26个字母的环,初始指向a,可以顺时针转或者逆时 ...

  5. 选择QT作为自己的图形库

    图形库太多,公司里面一直使用自己的图形库,换一家公司,就换个图形库,现在公司没有对我开放图形库代码. 想来想去还是自己要有一套图形库,拿来主义最方便,选来选去感觉还是QT比较方便.同时能学习一下C++ ...

  6. linux 乱码

    xwindow终端乱码 在/etc/sysconfig/i18n文件的最后一行添加如下内容: export LC_ALL="zh_CN.GB18030" vi /etc/sysco ...

  7. 大熊君大话NodeJS之 ------ Connect中间件第二季(源码分析)

    一,开篇分析 大家好,大熊君又回来了,今天这篇文章主要是对"Connect"中间件以及相关辅助中间件,做一个源码分析系列,我想上一篇文章大家也看了, 介绍了使用方式及用途,而这篇也 ...

  8. bzoj1441 MIN

    Description 给出n个数(A1…An)现求一组整数序列(X1…Xn)使得S=A1*X1+…An*Xn>0,且S的值最小 Input 第一行给出数字N,代表有N个数 下面一行给出N个数 ...

  9. R语言爬虫初尝试-基于RVEST包学习

    注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...

  10. MVC验证session是否过期,在每个action执行之前验证

            protected override void OnActionExecuting(ActionExecutingContext filterContext)         {   ...