全局变量覆盖问题
DA1468x
7个月前
全局变量覆盖问题
发布的mahmed10610分 3回复嗨对话框
我们正在开发基于DA14681的定制板,运行SDK 1.0.14。
问题是,在我的代码是基于PxpReporter,我正在做一些特定的BLE任务在高速。我在BLE上执行高速数据传输。在那之后,我的代码中的一个全局变量,得到一个垃圾值。
经过一些研究,我发现在c++中使用全局变量,不是一个好的实践,因为它可以从任何地方访问和覆盖。然后我把全局变量从uint8_t转换为INITIALISED_PRIVILEGED_DATA uint8_t,然后它工作得很好。
所以我有两个问题:
1 - INITIALISED_PRIVILEGED_DATA有某种受保护的内存吗?如果是,那么我应该将所有的全局变量转换为INITIALISED_PRIVILEGED_DATA吗?
2 -使用全局变量是一个好的实践还是一个坏的实践?从对话DA14681的编程角度来看?
7个月前
是的,我理解ret ram帮助当我们从睡眠中醒来,但我的问题是,编译器的优化是在INITIALISED_PRIVILEGED_DATA或不是?
因为仅仅通过将一个普通的全局变量更改为INITIALISED_PRIVILEGED_DATA,它就不会得到垃圾……这让我认为可以在某种意义上保护这个内存不被覆盖。
7个月前
嗨mahmed106,
请看一下这些部分。查找任何SDK示例(例如ble_adv示例)中的ld,并搜索RetRAM0部分。privileged_data_init存储在retain - ram中。此外,这里所有的东西都进入了保留的RAM:
RETENTION_INIT0收集应该放在保留RAM中的所有代码和(非零初始化的)数据。
RETENTION_RAM0收集应该放在保留RAM中的所有零初始化数据。
RETENTION_BLE用于BLE ROM代码使用的硬编码数据区域。请不要再放别的东西了。
因此,为了将变量放入RAM的保留部分,您应该使用以下部分之一
Retention_mem_rw - privileged_data_rw - privileged_data_zi - retention_mem_zi
h文件中的宏可以用于将变量放置在所需的部分中。
当使用INITIALISED_PRIVILEGED_DATA时,变量将存储到privileged_data_init中,这是Ret-RAM的一个区域。
如果您正在使用任何一种睡眠模式,那么当设备唤醒时,如果全局变量没有存储到Ret-RAM中,那么它的值将不会被保留。
关于你的第二个问题,是应用程序特定的,取决于你试图做什么。
谢谢,PM_Dialog