4 posts / 0 new
Last post
young_dialog
Offline
Last seen:3 years 6 months ago
Joined:2016-05-10 07:14
system SRAM与retention SRAM问题

在我的工程里,主要程序逻辑是:ADC采集完数据后经过一个算法函数处理,然后将数据发送给手机(当然是连接上之后),算法函数algorithm()会占用大量的system SRAM,具体数量不知,因为要发送的数据量比较大,算下来大概1KBytes/s,所以又加了一个buffer(大小1000bytes)用于缓存数据以免数据丢失,问题就出在添加buffer的时候,当buffer放于system SRAM即定义为普通的uint8_t变量时,发现连接之后数据怎么也发不出来,怀疑是system SRAM空间不够了,所以试着将buffer放于retention SRAM即定义为__attribute__((section("retention_mem_area0"), zero_init))的变量时,发现连接之后可以发送数据但是部分数据被修改了,但是当注释掉算法函数algorithm()的时候,数据发送恢复正常,我奇怪的是algorithm()的SRAM空间位于system区域,而buffer的SRAM空间位于retention区域,理论上不会相互影响才对,而且算法函数algorithm()本身不会对数据产生任何影响即不会改变数据内容,可现在的情况确实是改变了!
接着又做了另一个试验,将buffer缩小到500bytes,存储空间仍然是retention SRAM,问题不再出现。

这是什么原因?是两块存储器之间的串扰还是其它什么原因?还有怎么看分别用掉了多系统SRA少M和retention SRAM?谢谢

Young

Device:
Gongyu_Dialog
Offline
Last seen:16 hours 53 min ago
Joined:2016-04-27 07:07
不知道里面有没有涉及动态分配,580现在采用case23

不知道里面有没有涉及动态分配,580现在采用case23 的memory分配模式,详见附件。也可以查看scatter文件,在\DA1458X_SDK_5.0.3\5.0.3\sdk\common_project_files\scatterfiles里面。

RAM的分配结果,可以查看map文件,可以确认一下你提到冲突的两块区域是否相邻。

young_dialog
Offline
Last seen:3 years 6 months ago
Joined:2016-05-10 07:14
好的,谢谢了。

好的,谢谢了。

我想知道怎么实现一个连接间隔发三包数据,BLE最多可以支持一个连接间隔六包数据。谢谢

Young

Gongyu_Dialog
Offline
Last seen:16 hours 53 min ago
Joined:2016-04-27 07:07
一般580是作为slave

一般580是作为slave,那么只能由手机那里的发包速度来决定。