weiyuliang 发表于 2020-2-20 21:10:29

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 教程 》移植章节走一遍即可,感谢硬汉;

eric2013 发表于 2020-2-21 09:20:00

相当给力{:8:}

morning_enr6U 发表于 2020-2-21 10:07:31

非常帅的心得!!!{:8:}

EastWind 发表于 2020-2-21 10:37:01

裸机版本程序模板和RTX或FREEROTS版本是不是,bsp.c,bsp.h,还有bsp_timer.三个文件需要改一改

weiyuliang 发表于 2020-2-21 20:25:12

EastWind 发表于 2020-2-21 10:37
裸机版本程序模板和RTX或FREEROTS版本是不是,bsp.c,bsp.h,还有bsp_timer.三个文件需要改一改

对,主要是SysTick 被RTX5用了,HAL Delay用DWT或者通用定时器实现,bsp文件里面,吧硬汉吧时钟部分初始化地方封装了一下,其它没有做改动;

EastWind 发表于 2020-2-21 22:26:02

谢谢分享,今天按教程把freertos 改成rxt5,用着不错,

ruboss 发表于 2020-2-22 09:34:44

startup_stm32f429xx.s和system_stm32f4xx.c要隔离出来是为啥呀?

eric2013 发表于 2020-2-22 10:58:57

ruboss 发表于 2020-2-22 09:34
startup_stm32f429xx.s和system_stm32f4xx.c要隔离出来是为啥呀?

如果全套是MDK带的不用隔离。

zhongdinggen 发表于 2020-2-22 18:28:02

非常好的心得,之前对移植一些问题一知半解的。

weiyuliang 发表于 2020-2-23 15:11:27

ruboss 发表于 2020-2-22 09:34
startup_stm32f429xx.s和system_stm32f4xx.c要隔离出来是为啥呀?

隔离出来是因为,用的模板创建RTX工程,实际测试,如果不用模板里面的.s文件,可以不隔离,对比过这两个文件是完全一样的

jcx0324 发表于 2020-2-25 14:36:53

有尝试过使用标准库添加RTX5吗

eric2013 发表于 2020-2-25 15:30:07

jcx0324 发表于 2020-2-25 14:36
有尝试过使用标准库添加RTX5吗

没问题,之前我还单独移植过,不使用RTE。

后来发现有点求远了,特别是使用中间件的时候,新版的中间件的驱动CMSIS-Driver已经都开始采用HAL了

weiyuliang 发表于 2020-2-25 20:53:29

补充一下,时间MDK自动的RTX 调试组件,需要设置软件时钟和系统设置的时钟频率一致,比如程序设置的168M,软件也需要设置成168M,设置方法DEBUG->Settings-Trace ->
否则会导致测量的结果不准确

role_2099 发表于 2020-2-28 10:00:33

多谢楼主分享,学习

mwh 发表于 2020-3-7 14:13:57

谢谢分享,试一下

24diaos 发表于 2020-5-30 22:06:51


发现一个问题:在打开rtx5 运行后,无法使用rtt 组件打印

不知道是不是我得keil(v5.26.2.0)问题,本想在debug下看运行情况。一用就奔溃。

不过我通过修改LED 任务闪烁频率可以看到运行变化,初步判断应该是ok的


eric2013 发表于 2020-5-31 10:07:25

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

24diaos 发表于 2020-5-31 13:52:23

eric2013 发表于 2020-5-31 10:07
RTX会开Event Recoder组件的。

也用RTT的话,此贴:


收到。多谢解答 晚上鸡腿安排:lol

ldh2020 发表于 2022-11-5 22:48:52

eric2013 发表于 2020-2-25 15:30
没问题,之前我还单独移植过,不使用RTE。

后来发现有点求远了,特别是使用中间件的时候,新版的中间 ...

一直有这个困惑:如果一直使用ST的MCU,要改为国产MCU的话,所有的软件迁移几乎是不可行的?因为很多国产MCU的库基本都是基于标准库,并没有像ST的HAL库去兼容,可能是国内厂商的实力和沉淀远远还达不到。对于这个MCU更换的软件迁移问题,硬汉哥有什么好的方法或建议吗?

eric2013 发表于 2022-11-6 10:05:18

ldh2020 发表于 2022-11-5 22:48
一直有这个困惑:如果一直使用ST的MCU,要改为国产MCU的话,所有的软件迁移几乎是不可行的?因为很多国产 ...

可以用,RTX内核可以方便添加。添加中间件的话,要看下是否有对应的CMSIS-Driver驱动,没有的话,可以在ST的基础上修改。

white9336 发表于 2022-11-10 08:19:45

谢谢分享:lol

jplzl10000 发表于 2022-11-15 11:35:57

怎么我这用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 ";"


eric2013 发表于 2022-11-15 11:57:41

jplzl10000 发表于 2022-11-15 11:35
怎么我这用RTX2的源码形式编译还有错误呢
__WEAK void osRtxKernelPreInit (void) {
}


分享你的工程到百度云,我看看。

jplzl10000 发表于 2022-11-15 12:40:17

eric2013 发表于 2022-11-15 11:57
分享你的工程到百度云,我看看。

这个用的是F3的std库,不是HAL库,不知道是不是这个原因

eric2013 发表于 2022-11-15 14:43:34

jplzl10000 发表于 2022-11-15 12:40
这个用的是F3的std库,不是HAL库,不知道是不是这个原因
可以标准库的,测试了下你的工程,尝试解决下,发现好几处有问题


页: [1]
查看完整版本: V6开发板使用MDK的RTE环境运行RTX5 移植步骤和注意事项