分享

目前市面上的单片机操作系统很多为何FreeRTOS会这么抢眼(将源码copy到我们的项目目录中include文件夹内包含所有的头文件市面上主流的芯片demo里都可以找到)

 山峰云绕 2022-05-13

   (将源码copy到我们的项目目录中include文件夹内包含所有的头文件市面上主流的芯片demo里都可以找到)


https://m.toutiao.com/is/F54vJCk/?=目前市面上的单片机操作系统很多 




目前市面上的单片机操作系统很多,为何FreeRTOS会这么抢眼

随着嵌入式开发的认知度越来越高,从事这个专业或者以此为爱好的朋友也是越来越多,当在裸机开发的过程中遇到任务比较多,难以处理的时候,难免就会想到使用操作系统,目前市面上的单片机操作系统很多,其中有一个比较抢眼的就FreeRTOS,这个系统是完全开源的一个操作系统,所以使用的话没有侵权的问题,而且可查阅的资料也很丰富,因此使用群体也是很大的一个数目,我们可以看一2017年的数据,因为找了好久也没有找到最新的数据

FreeRTOS是仅次linux的操作系统,市场占比还是很不错的,估计最近两三年应该也不错,毕竟开源的东西,没有侵权问题,没有费用问题,对于国内的很多个人开发者来说还是相当友好的。

今天我们就一步一步的教大家如何移植一个简单FreeRTOS例程!

FreeRTOS系统源码下载

第一步我们需要做的就是到官网去下载最新版本FreeRTOS源码,这是我们移植的时候需要的,官网地址我给大家放这里了,可以直接点击进入哦

FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensionswww.freertos.org/

进入首页就可以看到下载的引导

不过,这是个国外的网站,访问起来可能会较慢,下载更是需要耗费不少的时间

目前官网提供的最新的版本v10.4.1的,最好可以下载到最新的版本

FreeRTOS系统源码所包含的内容

下载压缩包之后打开,里面主要包含以下的这些内容

前面的两个文件夹是主要包含源码的文件夹,而第二个带plus字样的这个文件夹,主要是基于第一个文件夹内容的一些扩展,可以看一下内容

这个我们暂时使用不到,在初期我们主要的是使用第一个文件夹下的内容

在打FreeRTOS文件夹之后分为这几个文件夹

demo文件夹,顾名思义,包含的是一些可以参考的例程FreeRTOS提供的例程真心不错,包含各个工具链的,比keileclipse等,包含各个不同的芯片的,基本上市面上主流的芯片在他们提供demo里都可以找到。这个文件夹的主要作用就是给我们提供实例,教给我们如何使用,有很大的参考价值

source文件夹内存放的就FreeRTOS的核心代码了,也是我们在待会说例程移植的时候重点用到的部分,打开这个文件夹,包含以下部分内容

include文件夹内包含所有的头文件portable文件夹下包含的是和芯片接口相关的东西,我们打开这个文件夹之后可以看到,里面是进一步层级的芯片分类文件夹

每个文件夹内包含的是一类芯片的接口文件

然后,最外层的这个七个源文件FreeRTOS的核心代码,主要是操作内核的作用

以上就FreeRTOS系统的主要文件构成,下面我们就来看一下如何移植一个简单的例程

如何移植一个例程

在操作这个之前,最好具备的前提:

第一、有一定的裸机开发经验,做过裸机开发的例程;

第二、会使keil开发工具,这一讲我们是基keil的,后续我们会讲述基eclipse

第三、手头有一个可以使用的开发板,以验证例程的正确性;

我们这里是基于一个裸机例程的,这样会省去裸机当中需要很多基础操作,这个不重要,如果你有裸机开发的经验的话,自己先新建一个就好了,毕竟这个不是太难,而用裸机原有例程的目的就是为了方面验证移植的正确性。

下面我们就正式开始:

第一步FreeRTOS的源copy到我们的项目目录下,然后对系统做一下简单的剪裁,因为原有的系统体积有点大,我们尽量的缩小系统的体量,portable文件夹下只需要留下三个重要的文件夹即可,当然这个不是随便留的,是和你使用的开发板有直接关系的,我使用的STM32的板子,所以使用的ARM内核,因此我留下的是以下三个,第二个内存管理是一样的,都需要,第一个也都需要,第三个就是根据内核型号做选择了;

第二步:使keil打开我们准备好的基础例程,打开之后先编译一下,确保原有的环境配置以及源码没有问题,然后再进行下一步操作;

第三步:打Manage Project Items'操作卡,新建两个分组,如下

从这个命名上,大家应该可以猜到一个是用来存放核心代码的,一个是用来存放芯片的接口代码的,新建好之后,把相应的源文件添加到分组内

这个是核心代码需要添加的源文件,就是在上一小结中我们提到的,没有被分配到文件夹下的核心代码。

第二个文件分组就要注意了,这个需要根据你使用的开发板进行选择,首先要选择一个内存管理下的源文件,这里是MemMang这个文件夹下,这里共有五个源文件

其对应的就是五种不同的内存管理方法,所达到的目的都是一样的,也各有优缺点,我们这里就先使用第四个,以后我们会详细的讲解不同的内存管理的优缺点。

然后,我们需要在选择一port的源文件,我们使用的STM32的芯片,内核M3的,所以我们需要使用的RVDSARM-CM3文件夹下port.c文件,添加之后的效果如下

第四步:添加包含头文件,我们之前说到的系统源码还有一个专门的头文件文件夹,还RVDS下也有头文件,需要把这些头文件路径做一下包含,如下

第五步:移植一FreeRTOSConfig.h的头文件,这个可以demo工程中去找,每一个工程中都有这个文件,这是一个系统配置的文件,会使能一些系统的操作以及开启一些系API函数等,这个部分涉及的内容比较多,需要单独去讲,所以这里建议先demo中移植一个过来所使用,后续再慢慢理解;

第六步:编译调试,理论上来说,到这里你就可以编译你的移植工程了,有可能你编译会报错,如果报错的话就要根据报错内容去修改,一般到这一步出错都是可以通过更FreeRTOSConfig内的配置解决的,当你解决完之后,编译通过,到此并不代表你成功的移植了,你还需要通过功能来验证;

第七步:在主函数实现功能,使用操作系统做功能,就需要建task了,我们可以在主函数建立两个简单task做一下验证,这里附上简单的例程代码,仅供参阅

首先定义变量函数

主函数内创建任务

实现两个任务的任务函数

非常简单的例程功能,就是为了验证移植是否成功。

第八步:编写玩主函数之后,就可以再次编译了,编译成功之后,下载到你的开发板,测试例程是否按照设计的功能运行。

备注:功能的实现是基于你的基础例程的,这里没有提及,需要特别注意;主函数关于创建任务又是另一部分话题,这里没有展开去说,在后续的其他文章中会继续说明,展开的话,此篇内容篇幅太大,不利于阅读。

到此,一个简单的例程移植结束!

小结:主要从宏观上了解一下一FreeRTOS的例程是什么样的,然后自己去实现一个简单的例程,系统涉及的内容面还是比较广泛的,很难一篇文章都提及,我们会在后续的文章中逐步的给大家展开。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多