lhaoyue 发表于 2020-10-13 10:06:47

问下RTX5做us级延时(阻塞)有好用的方法吗?

现在用 数据观察点与跟踪(DWT)模块 做us级延时,但用EventRecorder测量延时不对,100us延时,测量只有20us,想问下有什么比较好用的方法做us级延时吗?


eric2013 发表于 2020-10-13 10:30:48

100us延时,测量只有20us,这个锅DWT不被,因为EventRecoder 默认也是用那个的DWT,而你测试不准,大概率是你没有正常设置MDK Option的Core时钟与芯片主频匹配导致的。

lhaoyue 发表于 2020-10-13 10:51:56

我用示波器看了,100usdelay是准确的,但EventRecoder测量不对,core时钟设置的是对的,EventRecoder用了好久了,估计和bootloader有关,程序是bootloader后再运行app的,boot和app都用的rtx

eric2013 发表于 2020-10-13 16:07:17

lhaoyue 发表于 2020-10-13 10:51
我用示波器看了,100usdelay是准确的,但EventRecoder测量不对,core时钟设置的是对的,EventRecoder用了好 ...

他测量的时候有个最大值,最小值,平均值之类的,过一会后,看平均值比准。

lhaoyue 发表于 2020-10-15 09:20:20

eric2013 发表于 2020-10-13 16:07
他测量的时候有个最大值,最小值,平均值之类的,过一会后,看平均值比准。

找到问题了,是因为开了LTO优化,导致EventRecorder所在的内存区被init了,所以数据不对。取消LTO就可以了,但编译后的代码也变大了,不懂分散文件加载,暂时不知道怎么在LTO优化下保证加载正确。MDK 5.30

eric2013 发表于 2020-10-15 10:29:15

lhaoyue 发表于 2020-10-15 09:20
找到问题了,是因为开了LTO优化,导致EventRecorder所在的内存区被init了,所以数据不对。取消LTO就可以 ...
帮你测试了,确实是我前面说的,开启LTO后,过一会看平均值是正常的。

lhaoyue 发表于 2020-10-15 10:56:55

eric2013 发表于 2020-10-15 10:29
帮你测试了,确实是我前面说的,开启LTO后,过一会看平均值是正常的。

还费心硬汉测试,多谢硬汉!
想问下硬汉,你这边开启LTO后会报下面这个警告吗?
.\APP\APP.sct(16): warning: L6314W: No section matches pattern EventRecorder.o(ZI).
我这编译会报这个警告,进入debug也会提示这个警告。
然后EventRecorder就不正常,有时候时间测试正常,有时候不正常,rtx监控也是显示不显示的。

eric2013 发表于 2020-10-16 10:25:47

lhaoyue 发表于 2020-10-15 10:56
还费心硬汉测试,多谢硬汉!
想问下硬汉,你这边开启LTO后会报下面这个警告吗?
.\APP\APP.sct(16): wa ...
没问题啊,你是不是做分散加载设置了

lhaoyue 发表于 2020-10-16 15:22:03

eric2013 发表于 2020-10-16 10:25
没问题啊,你是不是做分散加载设置了

硬汉,你的Target这个页面是怎么配置的

lhaoyue 发表于 2020-10-16 15:33:14

http://www.armbbs.cn/forum.php?mod=image&aid=62351&size=300x300&key=baf46f4cb246e7f9&nocache=yes&type=fixnone
我参考官方给EventRecorder单独开了一块ram,指定了EventRecorder.c在ram2中。

佛云猪 发表于 2020-10-16 18:21:34

lhaoyue 发表于 2020-10-16 15:33
我参考官方给EventRecorder单独开了一块ram,指定了EventRecorder.c在ram2中。

因为你开启了 LTO 导致的, 你可以把 SCT文件修改一下, 把 原先 的    EventRecorder.o (+ZI)改为 *.o(.bss.noinit) 试试   

佛云猪 发表于 2020-10-16 18:24:17

或者如下
RW_IRAM3 0x24070000 UNINIT 0x00010000{
   EventRecorder.o (+ZI)
   *.o(.bss.noinit)
}
这样不管是否开启 LTO, 都能让 EventRecorder 正常, 但是告警始终存在, 可以不管

lhaoyue 发表于 2020-10-19 09:54:06

佛云猪 发表于 2020-10-16 18:24
或者如下
RW_IRAM3 0x24070000 UNINIT 0x00010000{
   EventRecorder.o (+ZI)


太感谢您了,这样修改确实可以,虽然编译会有警告,但调试没有警告,而且所有功能都正常,us级延时也能测量准确了,谢谢!

lhaoyue 发表于 2020-10-19 09:56:56

佛云猪 发表于 2020-10-16 18:21
因为你开启了 LTO 导致的, 你可以把 SCT文件修改一下, 把 原先 的    EventRecorder.o (+ZI)改为 *.o(. ...

按照这样修改,编译也不会有警告,调试功能也正常,谢谢!

lhaoyue 发表于 2020-10-19 09:58:15

佛云猪 发表于 2020-10-16 18:24
或者如下
RW_IRAM3 0x24070000 UNINIT 0x00010000{
   EventRecorder.o (+ZI)


这些相关的知识是分散文件加载吗?我得学习学习
页: [1]
查看完整版本: 问下RTX5做us级延时(阻塞)有好用的方法吗?