V6开发板使用MDK的RTE环境运行RTX5 移植步骤和注意事项
很感谢硬汉的耐心指导; 文档大部分内容是参考硬汉写的《安富莱 STM32-V6 开发板 RL-TCPnetV7.X 教程 》硬件环境:V6开发板
1、主要步骤如下:
第1步,准备一个工程模板。
能直接运行程序即可,附件有空白模板,模板不做限制,任意模板均可;保证系统时钟配置正确即可;
第2步,移植RTX5.
移植RTX5是采用MDK的RTE环境直接添加。
第3步,处理HAL库时间基准。
因为RTX5 内核使用了systick,HAL库使用的Delay函数需要做重定向,使用DWT或者通用定时器均可;程序里面已经给出;
第4步,创建应用。
创建线程、删除线程、信号量、互斥一类的都可以直接参考《安富莱_STM32-V6开发板_RTX教程.pdf》
2、以下内容摘抄:《安富莱 STM32-V6 开发板 RL-TCPnetV7.X 教程 》
下面将STM32F4的移植步骤和注意事项为大家做个说明。
第 1 步,安装指定的 MDK 软件包版本
移植新版RL-TCPnet网络协议栈需要大家下载指定的MDK软件包版本:
CMSIS 软件包使用当前最新的:V5.6.0
STM32F4使用当前最新的:V2.14
CMSIS-Driver使用当前最新的:V10.2.0
MDK中间件使用当前最新的:V7.12.0
STM32CubeMX使用当前最新的:V5.4
ARM_Compiler使用当前最新的:V1.6.1
这些软件包的安装在STM32F4用户手册的第2章2.3小节有详细说明。
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 。
所有这些软件包汇总下载地址:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=95609 。
3、准备一个工程模板
首先准备好一个简单的裸机工程模板,工程模板的制作就不做讲解了。从这个帖子里面下载一个例子即可:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255。
这里的重点是教大家移植RTX5系统。准备好的工程模板如下图所示(大家也可以制作其它任意的工程模板,不限制):
4、添加 RTX5 并配置
RTX5可以方便的通过MDK的RTE环境添加进来。对于F4版本,会添加多个F4版的HAL库文件,这些库文件我们可以使用,也可以不使用。教程配套的工程文件是不使用这些的,因为前面的工程模板里面已经添加了。所以要将这些文件全部隔离出来。
5、添加RTX5源码
点击OK按钮后,可以看到RTX5源码已经添加到工程里面了:
6、 将自动添加的库文件隔离出来
添加的所有文件中,startup_stm32f429xx.s和system_stm32f4xx.c要隔离出来,隔离方法也比较简单,
比如隔离startup_stm32f429xx.s文库,鼠标右击此文件选择Options for file ‘startup_stm32f429xx.s’
取消下面的对勾:
隔离这一个文件后,另一个文件system_stm32f4xx.c也被自动隔离了,隔离后的效果如下:
7、RTX5配置
剩下就是配置RTX5,设置RTX_Config.h文件即可,移植阶段先按照如下设置配置好,后面章节会专门为大家讲解每个参数的配置含义
注意事项:
工程模板如果使用DWT替换HAL中的函数HAL_Delay,偶尔会出现下载程序之后用户MDK软件里面的自动复位运行,效果不好,不工作的情况;
重新上电或者按下复位按钮均可以正常执行程序,这点需要注意一下;并不是程序有问题,DWT的特性,断电或者软件复位、按键复位都能100%保证可靠;
因为systick 被系统时钟用了,HAL Delay函数是无法使用的;需要用DWT或者通用定时器实现;
8、配置RTX5时钟节拍
这里设置好1000hz一个TICK是1ms;设置之后内部会自动配置systick 定时器为系统提供时钟节拍;
9、RTX5调试组件System Analyzer 开启
通过System Analyzer 可以看到RTX5线程正常运行;
注意事项:需要把View菜单 Periodic Window Update 选中,否则会出现System Analyzer 不能动态更新的问题;
程序模板
移植好的工程文件;
按照《安富莱 STM32-V6 开发板 RL-TCPnetV7.X 教程 》移植章节走一遍即可,感谢硬汉; 相当给力{:8:} 非常帅的心得!!!{:8:} 裸机版本程序模板和RTX或FREEROTS版本是不是,bsp.c,bsp.h,还有bsp_timer.三个文件需要改一改 EastWind 发表于 2020-2-21 10:37
裸机版本程序模板和RTX或FREEROTS版本是不是,bsp.c,bsp.h,还有bsp_timer.三个文件需要改一改
对,主要是SysTick 被RTX5用了,HAL Delay用DWT或者通用定时器实现,bsp文件里面,吧硬汉吧时钟部分初始化地方封装了一下,其它没有做改动; 谢谢分享,今天按教程把freertos 改成rxt5,用着不错, startup_stm32f429xx.s和system_stm32f4xx.c要隔离出来是为啥呀? ruboss 发表于 2020-2-22 09:34
startup_stm32f429xx.s和system_stm32f4xx.c要隔离出来是为啥呀?
如果全套是MDK带的不用隔离。 非常好的心得,之前对移植一些问题一知半解的。 ruboss 发表于 2020-2-22 09:34
startup_stm32f429xx.s和system_stm32f4xx.c要隔离出来是为啥呀?
隔离出来是因为,用的模板创建RTX工程,实际测试,如果不用模板里面的.s文件,可以不隔离,对比过这两个文件是完全一样的 有尝试过使用标准库添加RTX5吗 jcx0324 发表于 2020-2-25 14:36
有尝试过使用标准库添加RTX5吗
没问题,之前我还单独移植过,不使用RTE。
后来发现有点求远了,特别是使用中间件的时候,新版的中间件的驱动CMSIS-Driver已经都开始采用HAL了 补充一下,时间MDK自动的RTX 调试组件,需要设置软件时钟和系统设置的时钟频率一致,比如程序设置的168M,软件也需要设置成168M,设置方法DEBUG->Settings-Trace ->
否则会导致测量的结果不准确
多谢楼主分享,学习 谢谢分享,试一下
发现一个问题:在打开rtx5 运行后,无法使用rtt 组件打印
不知道是不是我得keil(v5.26.2.0)问题,本想在debug下看运行情况。一用就奔溃。
不过我通过修改LED 任务闪烁频率可以看到运行变化,初步判断应该是ok的
24diaos 发表于 2020-5-30 22:06
发现一个问题:在打开rtx5 运行后,无法使用rtt 组件打印
不知道是不是我得keil(v5.26.2.0)问题,本 ...
RTX会开Event Recoder组件的。
也用RTT的话,此贴:
这波操作可以,SEGGER帮MDK解决Event Recorder做printf的卡顿问题
http://www.armbbs.cn/forum.php?mod=viewthread&tid=97990
eric2013 发表于 2020-5-31 10:07
RTX会开Event Recoder组件的。
也用RTT的话,此贴:
收到。多谢解答 晚上鸡腿安排:lol eric2013 发表于 2020-2-25 15:30
没问题,之前我还单独移植过,不使用RTE。
后来发现有点求远了,特别是使用中间件的时候,新版的中间 ...
一直有这个困惑:如果一直使用ST的MCU,要改为国产MCU的话,所有的软件迁移几乎是不可行的?因为很多国产MCU的库基本都是基于标准库,并没有像ST的HAL库去兼容,可能是国内厂商的实力和沉淀远远还达不到。对于这个MCU更换的软件迁移问题,硬汉哥有什么好的方法或建议吗? ldh2020 发表于 2022-11-5 22:48
一直有这个困惑:如果一直使用ST的MCU,要改为国产MCU的话,所有的软件迁移几乎是不可行的?因为很多国产 ...
可以用,RTX内核可以方便添加。添加中间件的话,要看下是否有对应的CMSIS-Driver驱动,没有的话,可以在ST的基础上修改。 谢谢分享:lol 怎么我这用RTX2的源码形式编译还有错误呢
__WEAK void osRtxKernelPreInit (void) {
}
C:\Users\jpsky\AppData\Local\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\RTOS2\RTX\Source\rtx_kernel.c(507): warning:#77-D: this declaration has no storage class or type specifierC:\Users\jpsky\AppData\Local\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\RTOS2\RTX\Source\rtx_kernel.c(507): error:#65: expected a ";"
jplzl10000 发表于 2022-11-15 11:35
怎么我这用RTX2的源码形式编译还有错误呢
__WEAK void osRtxKernelPreInit (void) {
}
分享你的工程到百度云,我看看。 eric2013 发表于 2022-11-15 11:57
分享你的工程到百度云,我看看。
这个用的是F3的std库,不是HAL库,不知道是不是这个原因
jplzl10000 发表于 2022-11-15 12:40
这个用的是F3的std库,不是HAL库,不知道是不是这个原因
可以标准库的,测试了下你的工程,尝试解决下,发现好几处有问题
页:
[1]