硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4841|回复: 16
收起左侧

[RTOS] 花了半天时间,找到CMSIS 5.8.0软件包里面RTX5 底层汇编文件的处理欠妥的地方,ARM这等大厂也有这种骚操作

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106566
QQ
发表于 2021-7-27 20:11:20 | 显示全部楼层 |阅读模式
为了解决这个问题,倒腾了一下午,一开始研究的方向跑偏了,耽误了不少时间。

当前的RTX5支持MDK,GCC和IAR,所以也专门配套的三种Port文件,我们这里主要说MDK AC6和AC5。

1、先说MDK AC5
这里要说的是MDK AC5的移植文件,当前提供的移植文件irq_armv7m.s(之前是irq_cm4f.s)开头如下:

  1.                 IF       :LNOT::DEF:RTX_STACK_CHECK
  2. RTX_STACK_CHECK EQU      0
  3.                 ENDIF

  4.                 IF       ({FPU}="FPv4-SP")
  5. FPU_USED        EQU      1
  6.                 ELSE
  7. FPU_USED        EQU      0
  8.                 ENDIF
复制代码


这句IF ({FPU}="FPv4-SP")非常欠考虑,这个是M4内核单精度使用的,如果在MDK下使用M7内核芯片STM32H7,并且使用了浮点,这就完全不能用了。


M7单精度要使用FPv5-SP,双精度要使用FPv5-D16。最终修改决定使用 IF {FPU} != "SoftVFP" 判断是否使用软件浮点更简单,屏蔽了用户需要切来切去的问题。

修改后代码如下:

  1.                 IF       :LNOT::DEF:RTX_STACK_CHECK
  2. RTX_STACK_CHECK EQU      0
  3.                 ENDIF

  4.               IF {FPU} != "SoftVFP"
  5. FPU_USED        EQU      1
  6.                 ELSE
  7. FPU_USED        EQU      0
  8.                 ENDIF
复制代码


2、再说MDK AC6
MDK AC5的问题解决了,我使用MDK RTE创建了一个AC6的工程,我一看更惊呆了,直接用的GCC的Port文件。


  1.         .syntax  unified

  2.         #include "rtx_def.h"

  3.         #if (defined(__ARM_FP) && (__ARM_FP > 0))
  4.         .equ     FPU_USED, 1
  5.         #else
  6.         .equ     FPU_USED, 0
  7.         #endif

  8.         .equ     I_T_RUN_OFS, 20        // osRtxInfo.thread.run offset
  9.         .equ     TCB_SP_OFS,  56        // TCB.SP offset
  10.         .equ     TCB_SF_OFS,  34        // TCB.stack_frame offset

  11.         .equ     FPCCR,     0xE000EF34  // FPCCR Address

  12.         .equ     osRtxErrorStackOverflow, 1 // Stack overflow
复制代码

当然,编译是没问题的,注意选择这个选项:
QQ截图20210727202426.png


这次新版升级的用户体验略差,究其根本原因是没有考虑M7内核的单精度浮点和双精度浮点使用RTX5的情况。





回复

使用道具 举报

3

主题

335

回帖

344

积分

高级会员

积分
344
发表于 2021-7-27 20:17:25 | 显示全部楼层
老员工离职,毕业生进来了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106566
QQ
 楼主| 发表于 2021-7-27 20:17:42 | 显示全部楼层
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2021-7-28 10:05:04 | 显示全部楼层
吓得我赶紧用回5.7
回复

使用道具 举报

4

主题

166

回帖

178

积分

初级会员

积分
178
发表于 2021-7-28 11:33:14 | 显示全部楼层
请教个问题 rlflash如何单独设置动态内存
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-7-29 06:18:41
https://github.com/ARM-software/CMSIS_5/pull/1267

感谢告知这个bug。之前有微信群里的朋友他建议过你去github cmsis5的仓库提交,但你明确表示自己没有账户,并且希望开源社区自己去处理,就容我沾光了。

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-7-29 06:20:56 | 显示全部楼层
https://github.com/ARM-software/CMSIS_5/pull/1267

之前在微信群里有朋友说他提醒你去提交错误,但你明确说没有github账户,并且希望arm 开源社区自己解决这个问题,我就斗胆沾光提交了这个修复。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106566
QQ
 楼主| 发表于 2021-7-29 07:55:12 | 显示全部楼层
GorgonMeducer 发表于 2021-7-29 06:20
https://github.com/ARM-software/CMSIS_5/pull/1267

之前在微信群里有朋友说他提醒你去提交错误,但你 ...

非常感谢
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2021-7-29 08:31:34 | 显示全部楼层

客气了。真心佩服你的探索精神。国内真心没碰到几个你这么耐心仔细的。
话说这已经是我亲身经理的第二个CMSIS 5.8.0的 bug了……

我前几天才提交过另外一个修复,你都不敢相信,cmsis_version.h 他们都能忘记更新的……
回复

使用道具 举报

73

主题

1190

回帖

1409

积分

至尊会员

积分
1409
发表于 2021-7-29 09:05:50 | 显示全部楼层
GorgonMeducer 发表于 2021-7-29 06:20
https://github.com/ARM-software/CMSIS_5/pull/1267

之前在微信群里有朋友说他提醒你去提交错误,但你 ...

牛逼了!!我也在微信群看到了。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106566
QQ
 楼主| 发表于 2021-7-29 13:38:48 | 显示全部楼层
yuanzhongda 发表于 2021-7-28 11:33
请教个问题 rlflash如何单独设置动态内存

QQ截图20210729133802.png
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2021-7-30 08:59:09 | 显示全部楼层
1627606561(1).jpg

我说我咋没遇到这个问题,原来我一开始就机智的把浮点计算关闭了。
虽然不用浮点计算用F767有点奢侈,但是主要是F767有三路CAN
关闭浮点计算跑起来还是可以的
回复

使用道具 举报

2

主题

267

回帖

273

积分

高级会员

积分
273
发表于 2021-10-7 16:39:08 | 显示全部楼层
旮旯旭 发表于 2021-7-30 08:59
我说我咋没遇到这个问题,原来我一开始就机智的把浮点计算关闭了。
虽然不用浮点计算用F767有点奢侈 ...

说多都是泪,我H7更新到最新的RTX,立马HardFault_Handler,后来才想起这个帖子
但原来的旧RTX没问题。。。。
回复

使用道具 举报

13

主题

223

回帖

262

积分

高级会员

积分
262
发表于 2021-10-13 09:41:55 | 显示全部楼层
cctv180 发表于 2021-10-7 16:39
说多都是泪,我H7更新到最新的RTX,立马HardFault_Handler,后来才想起这个帖子
但原来的旧RTX没问题。 ...

mdk5.36 还有这个问题吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106566
QQ
 楼主| 发表于 2021-10-13 09:50:53 | 显示全部楼层
miaoqiongb 发表于 2021-10-13 09:41
mdk5.36 还有这个问题吗?

这就是5.36带的CMSIS5.8.0引进的bug。

你是要5.36,CMSIS软件包使用5.7.0即可,简单省事。
回复

使用道具 举报

13

主题

223

回帖

262

积分

高级会员

积分
262
发表于 2021-10-13 15:44:15 | 显示全部楼层
GorgonMeducer 发表于 2021-7-29 08:31
客气了。真心佩服你的探索精神。国内真心没碰到几个你这么耐心仔细的。
话说这已经是我亲身经理的第二个 ...

阁下 傻孩子?
回复

使用道具 举报

0

主题

11

回帖

11

积分

新手上路

积分
11
发表于 2021-11-23 23:26:46 | 显示全部楼层
用了浮点数进异常了,花了半天才想起你这个贴子
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106566
QQ
 楼主| 发表于 2021-11-24 01:33:31 | 显示全部楼层
吉吉安 发表于 2021-11-23 23:26
用了浮点数进异常了,花了半天才想起你这个贴子

这问题官方已经修正了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-25 08:55 , Processed in 0.380000 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表