公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

设备:TC387QP、Tasking、Lauterbach

问题描述:当我使用缓存的 LMU0 内存(0x90040000--0x9005FFFF)作为 DATA/BSS 全局变量时,有两个问题。

1。 对于DATA RAM,如果我在代码中定义一个数组或一个结构,其初始值如下C代码,并且没有覆盖该数组的指令,但是我们发现在正常操作期间无法成功复制该数组(通常应在 _c_init_entry中复制初始值),并且我确认任务生成的复制表是完全正确的。

C 代码:volatile float32 Test_Ram [15] = {415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8};

Trace32 var 观察:volatile float32 Test_Ram [15] = {415.8, 415.8, 415.8, 415.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

2。对于 BSS ram,如果我在代码中定义了一个大型结构变量,我们就会遇到一个问题,即结构的某些元素在任何重置后都无法清除为零(例如 wdg 超时、目标重置中的 trace32 等)。 结构中的大多数元素可以清除为零,但总是有一些元素无法清除。

我们在使用缓存的内存时是否需要注意它们?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Cached-LMU0-RAM-initialization-issue/td-p/674748

0 点赞
4 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

你能提供在缓存的 LMU0 RAM 中使用 BSS RAM 和数据 RAM 的代码吗? 我打算自己进行测试。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Cached-LMU0-RAM-initialization-issue/m-p/675535

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

抱歉,我真的无法发布代码。 但我有更多关于这方面的信息。 如果我在 _c_init _ entry 处添加一个断点。当电脑运行到这里,我禁用缓存,让电脑继续运行时,我上面提到的问题都会消失。顺便说一句,我们在LMU RAM0中确实使用了过多的内存

这就是我在最后一篇文章中提到的原因。 我怀疑缓存的内存是否会影响这一点。

Cached.png

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Cached-LMU0-RAM-initialization-issue/m-p/676284

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

缓存机制似乎对RAM阵列的初始化有影响。 你能为这个问题实施一个解决方法吗?

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Cached-LMU0-RAM-initialization-issue/m-p/677399

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@brinkdong 写道:

设备:TC387QP、Tasking、Lauterbach

问题描述:当我使用缓存的 LMU0 内存(0x90040000--0x9005FFFF)作为 DATA/BSS 全局变量时,有两个问题。

1。 对于DATA RAM,如果我在代码中定义一个数组或一个结构,其初始值如下C代码,并且没有覆盖该数组的指令,但是我们发现在正常操作期间无法成功复制该数组(通常应在 _c_init_entry中复制初始值),并且我确认任务生成的复制表是完全正确的。scarlet 下载

C 代码:volatile float32 Test_Ram [15] = {415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8, 415.8};

Trace32 var 观察:volatile float32 Test_Ram [15] = {415.8, 415.8, 415.8, 415.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

2。对于 BSS ram,如果我在代码中定义了一个大型结构变量,我们就会遇到一个问题,即结构的某些元素在任何重置后都无法清除为零(例如 wdg 超时、目标重置中的 trace32 等)。 结构中的大多数元素可以清除为零,但总是有一些元素无法清除。

我们在使用缓存的内存时是否需要注意它们?


  1. 对于具有初始值的全局变量(例如数组 Test_Ram),启动期间的初始化顺序至关重要。 确保在启动序列的适当阶段(通常在执行主函数之前)完成这些变量的初始化。 验证链接器文件以确认初始化部分已正确放置在内存中。

  2.  

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/Cached-LMU0-RAM-initialization-issue/m-p/677545

0 点赞