完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
转rtx操作系统
本章教程为大家将介绍RTX操作系统源码方式移植,移植工作比较简单,只需要用户添加需要的源码文件即可,不需要做任何的底层工作,也不需要用户做任何修改。 本章教程含Cortex-M3内核的STM32F103的移植和Cortex-M4内核的STM32F407移植。 6.1 移植前准备工作说明 6.2 STM32F103源码方式移植RTX系统 6.3 STM32F407源码方式移植RTX系统 6.4 总结 6.1 植前准备工作说明 1. RTX系统软件开发平台仅支持MDK,建议使用MDK4.74,因为后面的例子都是以MDK4.74为平台。 1. 找一个简单的工程,最好是跑马灯之类的,越简单越好,我们就在这个简单的工程上面移植即可。 2. 大家使用的简单工程里面不能有Systick,PendSV和SVC三个系统中断的使用,因为RTX系统要使用这三个中断。 |
|
相关推荐
|
|
6.2 STM32F103源码方式移植RTX系统
6.2.1 RTX操作系统移植 首先准备好一个简单的裸机工程模板,工程模板的制作就不做讲解了,这里的重点是教大家移植RTX系统。准备好的工程模板如下图6.1所示(大家也可以制作其它任意的工程模板,不限制): 图6.1 工程模板 准备好工程模板后,就可以开始移植了。首先要做的就是将所有需要的源码文件放到工程模板里面。下面分五步跟大家进行说明,当然,不限制必须使用下面的方法添加源码到工程,只要将需要的文件添加到工程模板即可。 |
|
|
|
|
|
第1步:在工程模板创建RTX文件夹
再在RTX文件夹中创建如下三个文件夹 inc文件夹用于存放头文件。 portable文件夹用于存放移植接口文件。 src文件夹用于存放源码文件。 u 第2步:添加源码文件到相应文件夹 l 文件夹inc中需要添加的文件如下: 文件RTL.h和RTX_Config.h在MDK安装目录中的路径C:Keil_v474ARMRV31INC 其余文件在MDK安装目录中的路径C:Keil_v474ARMRLRTXSRCCM l 文件夹portable中需要添加的文件如下: |
|
|
|
|
|
这5个文件在MDK安装目录中的路径C:Keil_v474ARMRLRTXSRCCM,其实HAL_CM1和HAL_CM4可以不必添加,因为这两个文件是分别用于CM1内核和CM4内核的芯片。
l 文件夹src中需要添加的文件如下: 这11个文件在MDK安装目录中的路径C:Keil_v474ARMRLRTXSRCCM l 文件夹User中还需要添加如下两个文件: 文件RTX_Conf_CM.c在MDK安装目录中的路径C:Keil_v474ARMRLRTXConfig 文件RTX_Lib.c在MDK安装目录中的路径C:Keil_v474ARMRV31INC |
|
|
|
|
|
第4步:新创建一个includes.h文件,将所有的头文件都集中到这个头文件下。
这样做的好处是引用头文件的时候,只添加这个头文件就可以了。includes.h文件放在了User文件夹中。然后再将这个文件也添加到MDK工程项目中 |
|
|
|
|
|
Includes.h文件中的内容如下:
复制代码 /* ********************************************************************************************************* * * 模块名称 : 头文件汇总 * 文件名称 : includes.h * 版 本 : V1.0 * 说 明 : 当前使用头文件汇总 * * 修改记录 : * 版本号 日期 作者 说明 * V1.0 2015-08-02 Eric2013 首次发布 * * Copyright (C), 2015-2020, 安富莱电子 www.armfly.com * ********************************************************************************************************* */ #ifndef __INCLUDES_H__ #define __INCLUDES_H__ /* ********************************************************************************************************* * 标准库 ********************************************************************************************************* */ #include #include #include #include /* ********************************************************************************************************* * 其它库 ********************************************************************************************************* */ /* ********************************************************************************************************* * OS ********************************************************************************************************* */ #include "RTL.h" /* ********************************************************************************************************* * 宏定义 ********************************************************************************************************* */ /* ********************************************************************************************************* * APP / BSP ********************************************************************************************************* */ #include #endif |
|
|
|
|
|
第5步:也是最后一步,添加相应的头文件路径:
在原来工程模板的基础上面新添加的两个路径: 至此,RTX的移植工作就完成了,剩下就是系统配置和应用了 |
|
|
|
|
|
6.2.2 RTX操作系统配置说明
RTX操作系统的配置工作是通过配置文件RTX_Conf_CM.c实现。在MDK工程中打开文件RTX_Conf_CM.c,可以看到如下图6.2所示的工程配置向导: 图片:6.11.png 图6.2 RTX配置向导 |
|
|
|
|
|
Task Configuration
l Number of concurrent running tasks 参数范围0 – 250 表示同时运行的最大任务数,这个数值一定要大于等于用户实际创建的任务数,空闲任务不包含在这个里面。比如当前的数值是6,就表示用户最多可以创建6个任务。 l 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大小的任务堆栈空间。 l Task statck size 表示系统分配的任务堆栈大小,单位字节。 l Check for the stack overflow 选择是否使能任务堆栈监测,选上单选框表示使能,取消单选框表示禁能。 l Run in privileged mode 选择是否使能特权级模式,选上单选框表示使能任务工作在特权级模式,取消单选框表示任务工作在非特权级模式。特权级和非特权级在第九章有详细讲解。 u Tick Timer Configuration l Hardware timer CoreSysTick 表示选择系统滴答定时器,因为M3/M4内核带有滴答定时器,一般情况下都是选用滴答定时器作为系统时钟节拍。 PeripheralTimer 表示使用外设定时器。 l Timer clock value 表示定时器主频,单位Hz。 l Timer tick value 表示系统时钟节拍周期,单位us。 u System Configuration l Round-Robin Task switching 选择是否使能时间片调度,选上单选框表示使能时间片调度,取消单选框表示不使用时间片调度。 l Round-Robin Timeout [ticks] 范围1 – 1000。 表示时间片的大小,单位是系统时钟节拍个数。 l Number of user timers 范围1 – 250。 表示用户定时器个数,即软定时器个数。 l ISR FIFO Queue size 表示ISR FIFO队列大小。中断服务程序中调用以isr_ 开头的函数时,会将请求类型存到此缓冲中。 |
|
|
|
|
|
6.2.3 RTX操作系统应用实例
通过上面对RTX操作系统的配置讲解,这里将其修改为如下图6.3所示配置: 图6.3 RTX配置向导 相对默认配置,修改了上图红色箭头所示的三个地方: 1. 任务运行在特权级模式。 2. 滴答定时器主频72MHz,这个也是STM32F103的主频。 3. 系统时钟节拍周期1ms。 |
|
|
|
|
|
修改好配置后,在main.c文件中添加如下代码,代码中简单的创建了两个用户任务:
AppTaskLED任务 :LED闪烁。 AppTaskStart任务:启动任务,也是最高优先级任务,这里实现LED闪烁。 复制代码 #include "includes.h" /* 底层硬件驱动 */ /* ********************************************************************************************************** 函数声明 ********************************************************************************************************** */ static void AppTaskCreate (void); __task void AppTaskLED(void); __task void AppTaskStart(void); /* ********************************************************************************************************** 变量 ********************************************************************************************************** */ static uint64_t AppTaskLEDStk[256/8]; /* 任务栈 */ static uint64_t AppTaskStartStk[512/8]; /* 任务栈 */ /* 任务句柄 */ OS_TID HandleTaskLED = NULL; /* ********************************************************************************************************* * 函 数 名: main * 功能说明: 标准c程序入口。 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ int main (void) { /* 初始化外设 */ bsp_Init(); /* 创建启动任务 */ os_sys_init_user (AppTaskStart, /* 任务函数 */ 2, /* 任务优先级 */ &AppTaskStartStk, /* 任务栈 */ sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */ while(1); } /* ********************************************************************************************************* * 函 数 名: AppTaskLED * 功能说明: LED闪烁 * 形 参: 无 * 返 回 值: 无 * 优 先 级: 1 (数值越小优先级越低,这个跟uCOS相反) ********************************************************************************************************* */ __task void AppTaskLED(void) { while(1) { bsp_LedToggle(2); bsp_LedToggle(3); os_dly_wait(200); } } /* ********************************************************************************************************* * 函 数 名: AppTaskStart * 功能说明: 启动任务,也就是最高优先级任务。 * 形 参: 无 * 返 回 值: 无 * 优 先 级: 2 ********************************************************************************************************* */ __task void AppTaskStart(void) { AppTaskCreate(); while(1) { bsp_LedToggle(1); bsp_LedToggle(4); os_dly_wait(500); } } /* ********************************************************************************************************* * 函 数 名: AppTaskCreate * 功能说明: 创建应用任务 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ static void AppTaskCreate (void) { HandleTaskLED = os_tsk_create_user(AppTaskLED, /* 任务函数 */ 1, /* 任务优先级 */ &AppTaskLEDStk, /* 任务栈 */ sizeof(AppTaskLEDStk)); /* 任务栈大小,单位字节数 */ } |
|
|
|
|
|
按照第三章的3.4小节中介绍的调试方法,可以看到如下图6.4所示任务执行状态:
图6.4 RTX的调试信息组件 除了创建的两个用户任务以外,还有空闲任务,这个任务是系统创建的。至此,RTX的库方式移植的工程就可以运行了。 |
|
|
|
|
|
6.3 STM32F407源码方式移植RTX系统
6.3.1 RTX操作系统移植 首先准备好一个简单的裸机工程模板,工程模板的制作就不做讲解了,这里的重点是教大家移植RTX系统。准备好的工程模板如下图6.5所示(大家也可以制作其它任意的工程模板,不限制): 图片:6.14.png 图6.5 工程模板 |
|
|
|
|
|
准备好工程模板后,就可以开始移植了。首先要做的就是将所有需要的源码文件放到工程模板里面。下面分五步跟大家进行说明,当然,不限制必须使用下面的方法添加源码到工程,只要将需要的文件添加到工程模板即可。
u 第1步:在工程模板创建RTX文件夹 再在RTX文件夹中创建如下三个文件夹 inc文件夹用于存放头文件。 portable文件夹用于存放移植接口文件。 src文件夹用于存放源码文件。 |
|
|
|
|
|
第2步:添加源码文件到相应文件夹
l 文件夹inc中需要添加的文件如下: 文件RTL.h和RTX_Config.h在MDK安装目录中的路径C:Keil_v474ARMRV31INC 其余文件在MDK安装目录中的路径C:Keil_v474ARMRLRTXSRCCM l 文件夹portable中需要添加的文件如下: 这5个文件在MDK安装目录中的路径C:Keil_v474ARMRLRTXSRCCM,其实HAL_CM1和HAL_CM3可以不必添加,因为这两个文件是分别用于CM1内核和CM3内核的芯片。 l 文件夹src中需要添加的文件如下: |
|
|
|
|
|
这11个文件在MDK安装目录中的路径C:Keil_v474ARMRLRTXSRCCM
l 文件夹User中还需要添加如下两个文件: 文件RTX_Conf_CM.c在MDK安装目录中的路径C:Keil_v474ARMRLRTXConfig 文件RTX_Lib.c在MDK 安装目录中的路径C:Keil_v474ARMRV31INC u 第3步:将源码文件添加到MDK的工程项目中 添加后的效果如下: |
|
|
|
|
|
第4步:新创建一个includes.h文件,将所有的头文件都集中到这个头文件下。
这样做的好处是引用头文件的时候,只添加这个头文件就可以了。includes.h文件放在了User文件夹中。然后再将这个文件也添加到MDK工程项目中 |
|
|
|
|
|
Includes.h文件中的内容如下:
复制代码 /* ********************************************************************************************************* * * 模块名称 : 头文件汇总 * 文件名称 : includes.h * 版 本 : V1.0 * 说 明 : 当前使用头文件汇总 * * 修改记录 : * 版本号 日期 作者 说明 * V1.0 2015-08-02 Eric2013 首次发布 * * Copyright (C), 2015-2020, 安富莱电子 www.armfly.com * ********************************************************************************************************* */ #ifndef __INCLUDES_H__ #define __INCLUDES_H__ /* ********************************************************************************************************* * 标准库 ********************************************************************************************************* */ #include #include #include #include /* ********************************************************************************************************* * 其它库 ********************************************************************************************************* */ /* ********************************************************************************************************* * OS ********************************************************************************************************* */ #include "RTL.h" /* ********************************************************************************************************* * 宏定义 ********************************************************************************************************* */ /* ********************************************************************************************************* * APP / BSP ********************************************************************************************************* */ #include #endif |
|
|
|
|
|
第5步:也是最后一步,添加相应的头文件路径:
在原来工程模板的基础上面新添加的两个路径: 至此,RTX的移植工作就完成了,剩下就是系统配置和应用了 |
|
|
|
|
|
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 21:43 , Processed in 0.989534 second(s), Total 101, Slave 84 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号