全局变量覆盖问题
da1468x.
7个月前
全局变量覆盖问题
张贴了Mahmed106.10分 3回复嗨对话框
我们正在根据DA14681在运行SDK 1.0.14的定制板上工作。
问题是,在我的代码中,基于pxpreporter,i m高速执行一些特定的ble任务。我在BLE上执行高速数据传输。在我的代码中的全局变量之后,得到垃圾值。
在一些研究之后,我发现在C ++中使用全局变量不是一个很好的做法,因为它可以从任何地方访问和覆盖它。然后我将来自uint8_t的全局变量转换为initialised_privileged_data uint8_t,然后它工作正常。
所以我有两个问题:
1 - Initialised_privileged_data是否有某种受保护的内存?如果是,那么我应该将所有全局变量转换为initialised_privileged_data?
2 - 使用全局变量是一种良好的做法或糟糕的做法?来自Dialog DA14681的编程观点?
7个月前
是的,我明白,ret公羊在唤醒睡眠时有助于,但我的问题是编译器的优化是在initialised_privileged_data上完成的?
因为只需将正常的全局变量更改为initialised_privileged_data,所以它没有垃圾,,,让我认为可以在某种意义上保护此内存免受覆盖。
7个月前
嗨mahmed106,
请查看从任何SDK示例(例如BLE_ADV examply)并搜索到REDLAM0部分中的部分。privileged_data_init存储到保留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
portMacro.h文件中的宏可用于将变量放在所需的部分中。
当使用initialised_privileged_data时,该变量将被存储为privileged_data_init,它是RET-RAM的一个区域。
如果您使用的是任何睡眠模式,当设备唤醒时,如果全局变量尚未存储到RET-RAM中,则不会保留其值。
关于您的第二个问题,是特定于应用程序的,取决于您想要做的事情。
谢谢,PM_DIALOG.