新建FreeRTOS工程——软件仿真/裸机系统与多任务系统

一、新建FreeRTOS工程——软件仿真

1、新建本地工程文件

在开始新建工程之前,我们先在本地电脑端新建一个文件夹用于存放工程。文件夹名字我们取为“” FreeRTOS ”(名字可以随意取) ,然后再在该文件夹下面新建各个文件夹和文件:
在这里插入图片描述
Doc:用于存放对整个工程的说明文件.readme.txt。
Project:用于存放新建的工程文件。
freertos:
include:存放头文件
portable:存放与处理器相关的接口文件,也叫移植文件(目前添加的RVDS/ARM_CM3)。
User:存放 main.c 和其它的用户编写的程序, main.c 第一次使用需要用户自行新建。

2、配置开发环境(Keil5)

1、新建工程,取名为Fire_FreeRTOS。

2、Select Device For Target

当命名好工程名称,点击确定之后会弹出 Select Device for Target 的选项框,让我们选择处理器,这里我们选择 ARMCM3。
在这里插入图片描述

3、Manage Run-Time Environment

选择好处理器,点击 OK 按钮后会弹出 Manage Run-Time Environment选项框。这里我们在 CMSIS 栏选中 CORE 和 Device 栏选中 Startup 这两个文件即可。
在这里插入图片描述
点击OK之后会发现刚刚我们选择的 CORE 和Startup 这两个文件就会添加到我们的工程组里面。
在这里插入图片描述
其中:
startup_ARMCM3.s是汇编编写的启动文件;
system_ARMCM3.c是 C 语言编写的跟时钟相关的文件。

4、在Keil工程里新建文件组

在工程里面添加 user、FreeRTOS/ports、 FreeRTOS/sources 和 doc 这几个文件组,用于管理文件.
在这里插入图片描述

5、在Keil工程里添加文件

在工程里添加好组后,需要把本地工程里新建的文件添加到工程里面,具体为吧readme.txt和main.c分别添加到doc组和User组,至于 FreeRTOS 相关的文件我们还没有编写,那么 FreeRTOS 相关的组就暂时为空。
在这里插入图片描述
添加好后,要在main.c中编写main函数,否则编译出错。

6、调试配置

6.1 设置仿真软件

为了方便,我们全部代码选择软件仿真,不需要开发板,有关软件仿真配置如下:
在这里插入图片描述

6.2 修改时钟大小

在时钟相关文件system_ARMCM3.c的开头,有一段定义了系统时钟大小为25M。在软件仿真时,为了确保时间的一致性,代码里的系统时钟和软件仿真的系统时钟必须一致,具体配置如下:
在这里插入图片描述

6.3添加头文件路径

在这里插入图片描述
至此,一个完整的基于Contex-M3内核的FreeRTOS软件仿真工程就建立完毕。

二、裸机系统与多任务系统

2.1 裸机系统

裸机系统通常分为轮询系统和前后台系统。

2.1.1 轮询系统

所谓轮询系统,就是在裸机编程时,先初始化好相关硬件,然后让主程序进入一个while死循环,顺序的做各种事情。轮询系统是一种很简单的软件结构,通常只是用于只需要顺序执行而不需要外部事件来驱动就能完成的任务。
在这里插入图片描述

2.1.2 前后台系统

前后台系统是在轮询系统的基础上加上中断。外部事件的相应在中断里完成,事件的处理还是回到轮询系统中完成。这里,称中断为前台,main函数里的无限循环为后台。
前后台系统
在顺序执行后台程序时,如有中断到来,中断会打断后台的程序转而去响应中断服务程序,在中断服务程序里标记事件,如果事件要处理的事情很短,则可在中断服务里处理,如果事件要处理的事情较多,则返回到后台程序里执行。
前后台系统中,虽然事件的响应与处理分开了,但事件的处理还是在轮询系统中执行的,但是相比轮询系统,前后台系统确保了事件不会丢失,再加上中断可嵌套的功能,可以大大提高程序的实时响应能力。

2.1.3 多任务系统

相比前后台系统,多任务系统的事件响应也是在中断中完成的,但是事件的处理是在任务中完成的。在多任务系统中,任务和中断一样,也有优先级,优先级高的任务会被优先处理。相比前后台系统,多任务系统的实时性又进一步提高了。
在这里插入图片描述
相比前后台系统中后台顺序执行的程序主体,在多任务系统中,可以根据程序的功能,把程序主题分割成一个个独立的、无限循环且不能返回的小程序,这个小程序就是任务。每个任务均独立、互不干扰且具有自身的优先级,由操作系统调度管理。
加入操作系统后,我们在编程时不需要精心设计程序的执行流,不用担心每个模块是否干扰。整个系统带来的额外开销就是操作系统占据的那一丁点FLASH和RAM。现如今,单片机的 FLASH 和 RAM 是越来越大,完全足以抵挡 RTOS 那点开销。
在这里插入图片描述
参考:[野火®]《FreeRTOS 内核实现与应用开发实战—基于STM32》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章