我希望將時(shí)間差值存放到RAM2K中,然后系統(tǒng)每次使用時(shí)間時(shí)都是RTC時(shí)間加差值。
https://www.cnblogs.com/debugdabiaoge/p/16617533.html
按照上述方法,我在RAM2K中存下來(lái)這個(gè)差值數(shù)據(jù):
但是第一次斷電后啟動(dòng),我連續(xù)打印了兩次數(shù)據(jù),發(fā)現(xiàn)存在問(wèn)題(變量為uint64_t類(lèi)型):
--------------------結(jié)構(gòu)體定義
__attribute__((section(".RAM2KSTART"))) StubUserInfo_t stubUserInfo = {0};
---------------------結(jié)構(gòu)體聲明
typedef struct StubUserInfo {
? ? uint64_t timeSyncData;
? ? uint8_t drinkData[1528];
} StubUserInfo_t;
// 下電后的用戶(hù)存儲(chǔ)數(shù)據(jù)區(qū)(最多在V2.0庫(kù)中使用1536字節(jié))
extern StubUserInfo_t stubUserInfo;
---------------------------main函數(shù)
? ? /* 如果時(shí)間未同步,修改狀態(tài)為需要RTC同步,代表需要藍(lán)牙設(shè)置時(shí)間 */
? ? // BUG 存在問(wèn)題
? ? 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 {
? ? ? ? /* 如果時(shí)間已經(jīng)同步,將關(guān)閉藍(lán)牙功能 */
? ? ? ? UART1_SendString("\ntime sync!\n", 12);
? ? ? ? bleCloseRf(0);
? ? }
我發(fā)現(xiàn)第一次打印的數(shù)值和第二次并不同,并且按理來(lái)說(shuō)要為0值,但并沒(méi)有,不知道什么原因。
我想實(shí)現(xiàn)的效果就是在燒錄后,系統(tǒng)啟動(dòng)時(shí)數(shù)值為0,此時(shí)系統(tǒng)會(huì)進(jìn)入需要RTC同步的狀態(tài)。之后設(shè)置變量差值后,系統(tǒng)會(huì)每次在上面代碼中檢測(cè)是否有這個(gè)差值,有則保持原狀,沒(méi)有則進(jìn)入同步狀態(tài)。
并且,我發(fā)現(xiàn)我在RAM2K中存儲(chǔ)的上面結(jié)構(gòu)體最大空間為1836個(gè)字節(jié),并沒(méi)有手冊(cè)提到的2048個(gè)字節(jié),因?yàn)橐坏┏^(guò)大小,編譯就會(huì)有錯(cuò),也想知道這個(gè)原因。
最后,希望知道下電睡眠時(shí),如果保持RAM2K有電,是否數(shù)據(jù)依然能保持。