我希望将时间差值存放到RAM2K中,然后系统每次使用时间时都是RTC时间加差值。
https://www.cnblogs.com/debugdabiaoge/p/16617533.html
按照上述方法,我在RAM2K中存下来这个差值数据:
但是第一次断电后启动,我连续打印了两次数据,发现存在问题(变量为uint64_t类型):
--------------------结构体定义
__attribute__((section(".RAM2KSTART"))) StubUserInfo_t stubUserInfo = {0};
---------------------结构体声明
typedef struct StubUserInfo {
? ? uint64_t timeSyncData;
? ? uint8_t drinkData[1528];
} StubUserInfo_t;
// 下电后的用户存储数据区(最多在V2.0库中使用1536字节)
extern StubUserInfo_t stubUserInfo;
---------------------------main函数
? ? /* 如果时间未同步,修改状态为需要RTC同步,代表需要蓝牙设置时间 */
? ? // BUG 存在问题
? ? PRINT("time sync:%lu\n", stubUserInfo.timeSyncData);
? ? // stubUserInfo.timeSyncData = 0;
? ? PRINT("time sync:%lu\n", stubUserInfo.timeSyncData);
? ? if (stubUserInfo.timeSyncData == 0UL) {
? ? ? ? deviceState = kStateWaitRtcSync;
? ? ? ? UART1_SendString("\ntime nsync\n", 12);
? ? } else {
? ? ? ? /* 如果时间已经同步,将关闭蓝牙功能 */
? ? ? ? UART1_SendString("\ntime sync!\n", 12);
? ? ? ? bleCloseRf(0);
? ? }
我发现第一次打印的数值和第二次并不同,并且按理来说要为0值,但并没有,不知道什么原因。
我想实现的效果就是在烧录后,系统启动时数值为0,此时系统会进入需要RTC同步的状态。之后设置变量差值后,系统会每次在上面代码中检测是否有这个差值,有则保持原状,没有则进入同步状态。
并且,我发现我在RAM2K中存储的上面结构体最大空间为1836个字节,并没有手册提到的2048个字节,因为一旦超过大小,编译就会有错,也想知道这个原因。
最后,希望知道下电睡眠时,如果保持RAM2K有电,是否数据依然能保持。