Joker

导航

RTX 移植

首先准备好一个简单的裸机工程模板,工程模板的制作就不做讲解了,这里的重点是教大家移植RTX系统。准备好的工程模板如下图6.5所示(大家也可以制作其它任意的工程模板,不限制):
                              
 
    准备好工程模板后,就可以开始移植了。首先要做的就是将所有需要的源码文件放到工程模板里面。下面分五步跟大家进行说明,当然,不限制必须使用下面的方法添加源码到工程,只要将需要的文件添加到工程模板即可。
 
第1步:在工程模板创建RTX文件夹
 
    再在RTX文件夹中创建如下三个文件夹
 
    inc文件夹用于存放头文件。
    portable文件夹用于存放移植接口文件。
    src文件夹用于存放源码文件。
 
第2步:添加源码文件到相应文件夹
1.  文件夹inc中需要添加的文件如下:
 
    文件RTL.h和RTX_Config.h在MDK安装目录中的路径C:\Keil_v474\ARM\RV31\INC
    其余文件在MDK安装目录中的路径C:\Keil_v474\ARM\RL\RTX\SRC\CM
  2.  文件夹portable中需要添加的文件如下:
 
    这5个文件在MDK安装目录中的路径C:\Keil_v474\ARM\RL\RTX\SRC\CM,其实HAL_CM1和HAL_CM4可以不必添加,因为这两个文件是分别用于CM1内核和CM4内核的芯片。
3.   文件夹src中需要添加的文件如下:
 
    这11个文件在MDK安装目录中的路径C:\Keil_v474\ARM\RL\RTX\SRC\CM
4.   文件夹User中还需要添加如下两个文件:
 
    文件RTX_Conf_CM.c在MDK安装目录中的路径C:\Keil_v474\ARM\RL\RTX\Config
    文件RTX_Lib.c在MDK 安装目录中的路径C:\Keil_v474\ARM\RV31\INC
 
第3步:将源码文件添加到MDK的工程项目中
    添加后的效果如下:
 
第4步:新创建一个includes.h文件,将所有的头文件都集中到这个头文件下。
    这样做的好处是引用头文件的时候,只添加这个头文件就可以了。includes.h文件放在了User文件夹中。然后再将这个文件也添加到MDK工程项目中
 
    Includes.h文件中的内容如下:
 1 /*
 2 *********************************************************************************************************
 3 *
 4 *    模块名称 : 头文件汇总
 5 *    文件名称 : includes.h
 6 *    版    本 : V1.0
 7 *    说    明 : 当前使用头文件汇总
 8 *
 9 *********************************************************************************************************
10 */
11 #ifndef  __INCLUDES_H__
12 #define  __INCLUDES_H__
13 /*
14 *********************************************************************************************************
15 *                                         标准库
16 *********************************************************************************************************
17 */
18 #include  <stdarg.h>
19 #include  <stdio.h>
20 #include  <stdlib.h>
21 #include  <math.h>
22 
23 /*
24 *********************************************************************************************************
25 *                                         其它库
26 *********************************************************************************************************
27 */
28 
29 /*
30 *********************************************************************************************************
31 *                                           OS
32 *********************************************************************************************************
33 */
34 #include "RTL.h"
35 
36 /*
37 *********************************************************************************************************
38 *                                           宏定义
39 *********************************************************************************************************
40 */
41 
42 /*
43 *********************************************************************************************************
44 *                                        APP / BSP
45 *********************************************************************************************************
46 */
47 #include  <bsp.h>
48 
49 #endif

 

第5步:也是最后一步,添加相应的头文件路径:
在原来工程模板的基础上面新添加的两个路径:
 
至此,RTX的移植工作就完成了,剩下就是系统配置和应用了



RTX操作系统配置说明

RTX操作系统的配置工作是通过配置文件RTX_Conf_CM.c实现。在MDK工程中打开文件RTX_Conf_CM.c,可以看到如下图6.6所示的工程配置向导:
 
 
1.  Task Configuration
1. Number of concurrent running tasks
    参数范围0 – 250
    表示同时运行的最大任务数,这个数值一定要大于等于用户实际创建的任务数,空闲任务不包含在这个里面。比如当前的数值是6,就表示用户最多可以创建6个任务。
2.  Number of tasks with user-provided stack
    参数范围0 – 250
    表示自定义任务堆栈的任务数,如果这个参数定义为0的话,表示所有的任务都是使用的配置向导里面第三个参数Task statck size大小。比如:
       Numberof concurrent running tasks = 6
       Numberof tasks with user-provided stack = 0
    表示允许用户创建6个任务,所有的6个任务都是分配第三个参数Task statck size大小的任务堆栈空间。
       Numberof concurrent running tasks = 6
       Numberof tasks with user-provided stack = 3
    表示允许用户创建6个任务,其中3个任务是用户自定义任务堆栈大小,另外3个任务是用的第三个参数Task statck size大小的任务堆栈空间。
3.  Task statck size
    表示系统分配的任务堆栈大小,单位字节。
4.  Check for the stack overflow
    选择是否使能任务堆栈监测,选上单选框表示使能,取消单选框表示禁能。
5.   Run in privileged mode
     选择是否使能特权级模式,选上单选框表示使能任务工作在特权级模式,取消单选框表示任务工作在非特权级模式。特权级和非特权级在第九章有详细讲解。
2.  Tick Timer Configuration
1.  Hardware timer
    CoreSysTick 表示选择系统滴答定时器,因为M3/M4内核带有滴答定时器,一般情况下都是选用滴答定时器作为系统时钟节拍。
    PeripheralTimer 表示使用外设定时器。
2.  Timer clock value
     表示定时器主频,单位Hz。
3.  Timer tick value
    表示系统时钟节拍周期,单位us。
3.  System Configuration
1.  Round-Robin Task switching
    选择是否使能时间片调度,选上单选框表示使能时间片调度,取消单选框表示不使用时间片调度。
2.  Round-Robin Timeout [ticks]
    范围1 – 1000。
    表示时间片的大小,单位是系统时钟节拍个数。
3.  Number of user timers
    范围1 – 250。
    表示用户定时器个数,即软定时器个数。
4.  ISR FIFO Queue size
    表示ISR FIFO队列大小。中断服务程序中调用以isr_ 开头的函数时,会将请求类型存到此缓冲中。



RTX操作系统应用实例

    通过上面对RTX操作系统的配置讲解,这里将其修改为如下图6.7所示配置:
 
<ignore_js_op>
 
相对默认配置,修改了上图红色箭头所示的三个地方:
1.     任务运行在特权级模式。
2.     滴答定时器主频168MHz,这个也是STM32F407的主频。
3.     系统时钟节拍周期1ms。

posted on 2018-09-11 14:09  Joker·GS  阅读(845)  评论(0)    收藏  举报