看板 ASM 關於我們 聯絡資訊
各為先進你們好~ 小弟目前再做一台機器 需要有斷電後能保存重要參數的功能 功能大概是每當系統有更新資料時就自動備份資料 以備斷電複電時將資料讀回,確保系統可以有連續性 的運作,不用每當斷電復電就要重新設定一次系統 的各個參數,而小弟雖然有做備份電源,但因為為了 延長備份電源的供電持久性,所以電源只供應RTC,其 他重要的參數由於資料量過多,所以我採用了一個EEPROM 來紀錄,現在問題來了! 我要斷電複電後要怎麼去判定這筆資料是新的還是舊的? 需要判定的原因是因為我有些資料是有相關性的! 若是一筆資料是新的一筆資料是舊的!那讀出來給系統去 運作後會的到錯誤的結果!所以我需要去判定這幾筆資料 中是否有舊的資料?有的話則必須將此區塊資料都放棄! 重新讀取別的區塊的資料! 我想到的做法:一塊記憶體區塊存份新資料 另一塊是存放上次的舊資料 斷電復電後則先判斷新資料是存在哪一塊記憶體 再將此塊記憶體的資料讀出並提供給系統運算 但仔細想想總覺得這樣的做法似乎很浪費時間和記憶體的空間, 不知道各為先進是否有更好的做法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.128.66
ksmrt0123:就算資料只有1 byte 還是有可能在寫入時斷電造成錯誤 04/22 18:06
ksmrt0123:這個要先想清楚再考慮其它的 04/22 18:07
easypro:把RTC寫在前面來做判斷,在偵測到低電壓時馬上寫入 04/22 20:14
waynecone:什麼叫做把RTC寫在前面?有點不懂大大的意思! 04/22 21:11
waynecone:k大!很多傳輸也有資料傳輸錯誤的情況~我想要做的就是能 04/22 21:19
waynecone:避開取到錯誤的值!我總部可能連續兩塊記憶體的資料都是 04/22 21:20
waynecone:的吧! 04/22 21:20
waynecone:錯 04/22 21:20
ksmrt0123:你預計怎樣避開取到錯誤的值? 04/23 01:12
ksmrt0123:為何你認為連續兩塊記憶體不會都是錯的? 04/23 01:13
ruemann:為何不設計check sum or crc之類的方法來確認資料正確性? 04/23 01:51
WolfLord:我是給MCU一個0.1F的電容器,確保斷電的ISR可以備份REGIS 04/23 02:41
waynecone:其實一開始我有考慮過使用CRC的方法!只不過看了維基和一 04/24 02:21
waynecone:些資料後還是搞不懂CRC到底在做什麼?至於check sum可否 04/24 02:22
waynecone:可否稍微跟我解釋一下時什麼意思?抱歉!我還是個大菜鳥 04/24 02:23
waynecone:麻煩了= =" 04/24 02:24
waynecone:W大!你說再MCU端接一個0.1F的電容可以大概描述是怎麼接 04/24 02:25
waynecone:的嗎?是接在資料線上嗎?這樣做不會影響波型嗎?? 04/24 02:26
ruemann:他是說在MCU的VCC上接一個.1F的大電容,在斷電時確保電源 04/24 02:38
ruemann:足夠寫完這些事情 04/24 02:39
ruemann:check sum就是把你一連串的資料加總後得到一個值,用這個 04/24 02:39
ruemann:值來確認這一串資料是正確的,CRC也是相同的概念 04/24 02:40
ruemann:只是當check sum計算出來是相符時,仍然有機會前面的資料 04/24 02:40
ruemann:有錯但沒有被偵測出來,CRC則比較能保證錯誤出現時能偵測 04/24 02:41
ruemann:到,所以CRC的計算也比較複雜 04/24 02:41
WolfLord:RUEMANN正姐 :P 04/24 10:49
kikiqqp:一般低階MCU用CRC太複雜也太耗運算,不過既然是check sum 04/26 21:59
kikiqqp:當然可以自己用簡單的數學寫出個類似的玩意 04/26 21:59
stool100:CRC用查表法 不會太耗 04/26 22:50
WolfLord:查表? ROM比較值錢吧...就移位加而已哪來耗運算? 04/26 22:59
lion21:可參考關鍵詞搜尋"CRC運算的查表法原理" 只是方法之一 04/28 10:14