sanit 发表于 2019-1-16 15:43:22

使用KEIL5.25移植RL_RTX4系统出现警告信息

今天使用KEIL5.25移植F429对应的的RL_RTX4系统出现警告,使用起来没发现异常,但是不知道真正的原因,心里没底会不会引起异常,特来请教各位。下面描述一下问题:
1.编译之后出现的警告信息如下:..\..\RL-ARM\RL-RTX\portable\rt_HAL_CM.h(91): warning:#3731-D: intrinsic is deprecated    百度查询一下,官方给出的解释:http://www.keil.com/support/docs/3783.htm。我看了好像是不推荐使用某些函数造成的。如果忽视这些警告,会不会有什么隐患呢?
2.rt_HAL_CM.h文件中:

#define __USE_EXCLUSIVE_ACCESS 它的定义是导致警告出现的源头,但是无论是在KEIL4还是在KEIL5下面使用RL_RTX4,默认都会定义__USE_EXCLUSIVE_ACCESS,但是在KEIL4就没有警告,在KEIL5就出现了警告。但是用起来感觉没有任何异常。不知道会不会留下什么隐患,希望懂的人回答一下,多谢了。

eric2013 发表于 2019-1-16 16:54:40

直接屏蔽警告就好,我一直是这么用的。

否则要升级到MDK5里面带的新版,看此贴升级:
http://www.armbbs.cn/forum.ph ... 6696&extra=page%3D1

sanit 发表于 2019-1-16 20:17:32

eric2013 发表于 2019-1-16 16:54
直接屏蔽警告就好,我一直是这么用的。

否则要升级到MDK5里面带的新版,看此贴升级:


好的,忽视警告,不影响正常使用哈?

eric2013 发表于 2019-1-17 00:11:56

sanit 发表于 2019-1-16 20:17
好的,忽视警告,不影响正常使用哈?
不影响,你可以用V6的二代示波器或者V6综合Demo测试下,例子比较复杂,也具有代表性。
屏蔽方法:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=86086

sanit 发表于 2019-1-17 07:29:35

eric2013 发表于 2019-1-17 00:11
不影响,你可以用V6的二代示波器或者V6综合Demo测试下,例子比较复杂,也具有代表性。
屏蔽方法:
http ...

多谢。

myxiaonia 发表于 2019-1-21 08:45:13

eric2013 发表于 2019-1-16 16:54
直接屏蔽警告就好,我一直是这么用的。

否则要升级到MDK5里面带的新版,看此贴升级:


奇怪,为啥现在intrinsic指令不推荐了,这个ldrex和strex指令必须只能用intrinsic访问啊

myxiaonia 发表于 2019-1-21 09:00:03

我去网上找来下资料,keil官网解释ARMCC: warning: #3731-D: intrinsic is deprecated中有这句话:The ARM compiler does not guarantee to preserve the state of the exclusive monitor. This is why the __ldrex, __ldrexd, __strex and __strexd intrinsics are deprecated.

如何理解这句话?我认为是不是说在带cache的arm中,因为访存会被cache,因此编译器只按照字面解释这种intrinsic指令无法保证真正的访存,也就是说编译器不会自动生成dsi,dsb这种刷新cache的指令,因此deprecated,但是在不带cache的mcu中还是可用的?

eric2013 发表于 2019-1-21 11:51:14

myxiaonia 发表于 2019-1-21 09:00
我去网上找来下资料,keil官网解释ARMCC: warning: #3731-D: intrinsic is deprecated中有这句话:The ARM...
这个好像是MDK5的问题,移植MDK5里面带的RTX4就没有这个问题


myxiaonia 发表于 2019-1-21 13:51:02

eric2013 发表于 2019-1-21 11:51
这个好像是MDK5的问题,移植MDK5里面带的RTX4就没有这个问题

高版本的armcc有这个warnning吧,难道cortex-a系列已经放弃这种做法了吗,又要回到开关中断这种老办法了

eric2013 发表于 2019-1-21 13:53:49

myxiaonia 发表于 2019-1-21 13:51
高版本的armcc有这个warnning吧,难道cortex-a系列已经放弃这种做法了吗,又要回到开关中断这种老办法了

我用的是最新版的AC5,没问题。

AC6没测,应该是支持的。

myxiaonia 发表于 2019-1-21 16:01:34

eric2013 发表于 2019-1-21 13:53
我用的是最新版的AC5,没问题。

AC6没测,应该是支持的。

我网上找各种知识,没有找到ldrex有cache时的确切说法

硬汉可以设计一个实验,看看mpu设不设置写穿,到底会不会出现出错的情况

eric2013 发表于 2019-1-21 17:04:02

myxiaonia 发表于 2019-1-21 16:01
我网上找各种知识,没有找到ldrex有cache时的确切说法

硬汉可以设计一个实验,看看mpu设不设置写穿, ...
之前测试RTX5,在H7上面,没发现什么问题。

RTX5里面有几个专门的原子操作API

byccc 发表于 2019-1-22 14:44:01

myxiaonia 发表于 2019-1-21 09:00
我去网上找来下资料,keil官网解释ARMCC: warning: #3731-D: intrinsic is deprecated中有这句话:The ARM...

像RTX5一样,改用汇编操作ldrex和strex靠谱,编译生成的汇编一切皆有可能。

suozhang 发表于 2020-4-14 16:10:58

解决方法如上
页: [1]
查看完整版本: 使用KEIL5.25移植RL_RTX4系统出现警告信息