【FreeRTOS学习】(1)在项目中添加FreeRTOS

文章详细介绍了如何在项目中添加FreeRTOS,包括从官网下载源码,添加必要的文件到项目结构中,配置FreeRTOSConfig.h文件以适应项目需求,以及编译验证过程。FreeRTOS是一个小巧且功能丰富的实时操作系统内核,常用于嵌入式系统,具备高可裁剪性和可移植性。

一、FreeRTOS简介

FreeRTOS(Free Real-Time Operating System)是一个常用的实时操作系统内核,具有高可用性、可裁剪性、可移植性和可扩展性等特性。它是一个基于事件驱动的,用于嵌入式系统的实时操作系统,广泛应用于航空、航天、工业自动化、医疗设备、智能家居、汽车电子等领域。FreeRTOS提供了任务管理、时间管理、内存管理、中断处理、软件定时器和通信机制等功能。其内核非常小巧,仅需几KB的内存和一些最基本的处理器资源即可运行。同时FreeRTOS还提供多种语言接口,并且支持多种处理器架构,如ARM、AVR、PIC、MIPS等,因此备受广大嵌入式软件开发人员的欢迎。

二、在项目中添加FreeRTOS

FreeRTOS提供的对开发者的支持还是很多的,官网 也有中文版的开发文档,可以查阅API函数、内核机制,实在有问题解决不了还有一个官方的论坛,可以注册一个账号在上面提问。

1. 下载FreeRTOS源码

官网有最新版和最新长期支持版(LTS),如果是为了学习建议直接下最新版,源码里提供一些demo项目可以参考。

  1. 官方下载页面:
    官网下载页面
  2. Github 上获取源码
    FreeRTOS-Plus是一些其他协议(如物联网相关)的扩展,最基础的实时操作系统内核只需要FreeRTOS就可以了。
    Github 界面
    可以自行下载压缩包或 git clone 。

2. 添加需要的文件

  1. 文件构成
    下载好后解压后的文件构成是这样的:
    FreeRTOS-kernel文件构成
    其实也很好分辨,目录下的 .c 文件就是通用的源文件;include文件夹内是头文件;portable文件夹内是一些跟不同编译器、处理器架构相关和动态内存分配的源文件和头文件。
  2. 在项目添加所需要的文件
    这里假设已经会如何新建一个对应处理器的(Keil / IAR / GCC)项目。
    那么要做的其实就是(1)添加需要的代码文件并添加到项目中(2)在项目include项中添加所需头文件的路径。
    比如以我使用的 IAR 作为 IDE 开发环境,首先在项目中新建一个FreeRTOS文件夹,再在其中创建src、inc、port三个文件夹:
    创建文件夹述
    demo和license无关紧要,只是一些对应处理器的demo项目和许可证相关。
    创建文件夹
    将FreeRTOS内核下的所有.c文件复制到 项目路径/FreeRTOS/src 下。
    src
    将FreeRTOS内核下/include/ 的所有.h文件复制到 项目路径/FreeRTOS/src 下。
    inc
    将portable/MemMang文件夹整个复制到 项目路径/FreeRTOS/port 下,它里面是几个关于(即动态分配内存)的.c文件,使用过程按需选择一个添加到项目中就可以,一般选择heap_4,具体区别建议点击里面的ReadMe网页查看;
    选取portable中对应编译器和处理器架构,比如我的是 ./portable/IAR/ARM_CM4F 其中有一个汇编文件一个.c,一个.h,将这些文件复制到 项目路径/FreeRTOS/port/IAR/ARM_CM4F 下。
    port
    port/MemMang
    port/IAR
    完成后,在IDE项目中添加源文件和在选项(Options)添加对应头文件路径:
    注意:MemMang 中只用选择其中 一个!!(一般是4)
    项目文件
    需要注意的是刚刚那个portasm.s由于它里面有一句 #include <FreeRTOSConfig.h>,所有汇编文件的pre include 路径也要添加相关的(起码FreeRTOS相关的都要添加)。就是Options的C/C++ Compiler和Assembler选项都要添加。
    在这里插入图片描述

3. 添加 FreeRTOSConfig.h 配置文件

完成上面的步骤后,可以尝试编译一下,会报一个找不到 FreeRTOSConfig.h 的错误,因为 FreeRTOSConfig.h 这个文件根据官方来说是需要用户自己创建的,算作用户文件,不算内核,它是一个配置文件,define一些宏来选择相应的功能。
那我们就创建一个 FreeRTOSConfig.h 到 user group 下,这里给一个有注释的模板,以后再有需要可以用这个改,不过如果你是Keil/GCC需要修改一两行。

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

/*-----------------------------------------------------------
 * Application specific definitions.
 * 可以在下面这个网站查看对应选项的官方解释,此文件的注释只做参考
 * See http://www.freertos.org/a00110.html
 *----------------------------------------------------------*/
//#include "gd32f30x.h"
/* 这个是踩过的坑,因为汇编也要用到FreeRTOSConfig.h文件,所以有些关键字
 * 如 enum 就会报 bad instruction 的错误,所以最好还是直接把如 
 * SystemCoreClock 这样的宏的值直接粘贴过来用,像我下面那样,就不要再包含
 *  gd32f30x.h 了。*/
/* Ensure stdint is only used by the compiler, and not the assembler. */
//这个地方__ICCARM__表示是IAR的编译器,若是Keil或GCC要改成__CC_ARM、__GNUC__
#if defined __ICCARM__
	#include <stdint.h>
	extern uint32_t SystemCoreClock;
#endif

//assert断言
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
#define configASSERT( x ) if( ( x ) == 0 ) {
     
      taskDISABLE_INTERRUPTS(); for( ;; ); }	

/*****************************************************************************
 *                                基础配置项
 ****************************************************************************/
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值