在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎樣使用Arduino EEPROM在重啟后保存數據

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-28 10:38 ? 次閱讀

您知道Arduino在關閉時可以存儲數據嗎?草圖不存儲在閃存中。我說的是EEPROM中的可變數據。加入我的行列,向我展示如何讀寫它,以及它可以為您的項目做什么。

如果您不熟悉Arduino,請確保閱讀我們的初學者指南。

什么是EEPROM?

EEPROM代表電可擦可編程只讀存儲器。這是一種非易失性存儲器。如果您不了解任何含義,請不要擔心。即使沒有電源,它也可以簡單地存儲數據(與RAM不同,RAM需要電力才能保留任何數據)。

EEPROM內置于眾多處理器中,例如Matrix Creator Pi HAT中使用的現場可編程門陣列(FPGA)。所有的Arduino都有EEPROM,但容量因型號而異。請務必查看我們的購買指南以獲取有關每塊板的更多詳細信息。

工作原理

使用 Fowler-Nordheim隧道對EEPROM進行電擦除和編程。您無需了解技術細節即可使用它?;厩疤崾怯秒妬砀亩M制數據(什么是二進制)??梢噪娮臃绞阶x取,擦除和重寫。

幸運的是,Arduino語言可以輕松更改數據,而無需任何計算機科學學位。

預期壽命

雖然在Arduino中易于使用EEPROM,但壽命確實有限。 EEPROM指定可處理100,000個讀/擦除周期。這意味著您可以在EEPROM變得不穩定之前寫入并擦除/重寫數據100,000次。實際上,取決于每個處理器的容差,Atmel(Arduino“芯片”的制造商)半導體可以處理更多或更少的循環次數。

一旦某個位置被寫入并擦除了太多次,它就會開始變得不可靠。它可能無法返回正確的數據,也可能無法返回相鄰位的值。

這聽起來像很多次寫入,但是如果以編程方式進行讀取和寫入(在《例如,strong》 loop )。讀取數據不會降低芯片質量,僅寫入會。您可以無憂無慮地從EEPROM讀取數據!

請務必注意,此限制適用于每個內存位置。您的Arduino在EEPROM中可能有1,000個或更多可用的存儲位置,因此,如果您對一個位置寫入太多次,則只會影響該位置,而不會影響其他位置。稍后,我將討論耗損均衡,它可以通過均勻分配數據來減少EEPROM的耗損-SSD可以利用這一點。

它有什么用?

EEPROM對于您的Arduino項目非常有用。由于即使斷電也能記住數據,因此您可以存儲Arduino的狀態。也許您可以建造一個可以記住其位置或剩余多少“彈藥”的激光轉塔。您可以使用它來控制設備,并記錄設備被激活的次數。

EEPROM最適合諸如設置或高分的事情。如果要定期寫入復雜數據,則可以考慮使用以太網屏蔽(具有內置SD插槽)或Raspberry Pi。

讀寫

現在,理論已成為現實,讓我們看看如何讀寫一些數據!首先,包括庫(Arduino IDE隨附):

#include

現在寫入一些數據:

EEPROM.write(0, 12);

這會將數字 12 寫到EEPROM位置 0 。每次寫入需要3.3毫秒( ms ,1000ms = 1秒)。請注意,您不能寫字母( char ),只允許從0到255的數字。這就是為什么EEPROM非常適合設置或高分,但不適用于播放器名稱或單詞的原因。可以使用這種方法存儲文本(您可以將字母表中的每個字母映射到一個數字),但是您將需要具有多個存儲位置-每個字母一個位置。

以下是您的閱讀方式該數據:

EEPROM.read(0);

零是您之前寫入的地址。如果您以前沒有寫過地址,它將返回最大值( 255 )。

有一些更有用的方法可用。假設您想存儲小數位或字符串:

EEPROM.put(2,“12.67”);

這會將數據寫入多個位置,這很容易編寫,但仍然很方便。您仍需要跟蹤已寫入的位置數,以免意外覆蓋數據!您必須使用 get 方法再次檢索此數據:

float f = 0.00f;

EEPROM.get(2, f);

get中的值存儲在浮點型 f 變量。請注意,如何使用 0.00f 作為值進行初始化。 f 使編譯器知道您可能希望在此變量中存儲大量數字,因此它會在編譯過程中設置一些其他配置。

Arduino網站上的EEPROM文檔還有更多示例。

磨損平衡

磨損平衡是一種用于減少磨損并延長EEPROM壽命的技術。如果您僅在一個小型項目上工作,則不必擔心這一點。

保存EEPROM壽命的最簡單方法是限制您的寫入到特定位置。您可以通過先讀取地址來完成此操作,如果您要寫入的值已經存在,則無需再次寫入(請記住,讀取數據無害)。操作方法如下:

int safeWrite(int data, address) {

if(EEPROM.read(address) != data) {

EEPROM.write(address, data);

}

}

這是相當簡單的代碼,但是僅適用于整數!不用重新發明輪子,而是使用Arduino EEPROM庫中內置的功能:

EEPROM.update(address, val);

此方法與 write 方法,盡管它可能會大大減少所需的寫入次數!

如果您需要寫入大量數據,并且擔心芯片消耗wearing盡,則可以跟蹤進行多少次寫入,盡管這會使用更多數據。這是偽代碼的粗略實現:

var address = 0

var writeCount = 0

if(writeCount 》 75,000)

writeCount = 0

address += 1

EEPROM.write(address, data)

您將需要將地址和writeCount存儲在EEPROM中(并且writeCount需要在地址位置之間劃分)。在大多數情況下,將不需要此級別的保護。 Arduino也是如此便宜,因此您可能會發現購買備份更容易!

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • EEPROM
    +關注

    關注

    9

    文章

    1083

    瀏覽量

    83329
  • Arduino
    +關注

    關注

    189

    文章

    6493

    瀏覽量

    190191
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何從CYUSB3014-BZXCT讀取/寫入EEPROM固件?

    我有一個 CYUSB3014-BZXCT 芯片,其中保存EEPROM 數據。 我還有第二個空的 CYUSB3014,我想將第一個芯片的 EEPROM
    發表于 05-07 06:46

    如何優化EEPROM數據存儲策略

    EEPROM(Electrically Erasable Programmable Read-Only Memory,電可擦除可編程只讀存儲器)是一種非揮發性存儲器,可以沒有電源的情況下保持數據
    的頭像 發表于 12-16 17:21 ?1233次閱讀

    嵌入式系統中使用EEPROM的優缺點

    同時也存在一些局限性。以下是EEPROM嵌入式系統中使用的優缺點分析: 優點 非易失性存儲 : EEPROM中的數據斷電
    的頭像 發表于 12-16 16:57 ?853次閱讀

    EEPROM嵌入式系統中的應用 EEPROM數據保護技術解析

    于存儲設備的配置參數,如網絡設置、用戶偏好設置等。這些參數系統重啟仍然需要保持不變,因此EEPROM提供了一個理想的存儲
    的頭像 發表于 12-16 16:37 ?2614次閱讀

    ADS1293EVM保存數據時候,始終只能保存CH1的數據,而其他chanel的數據卻無法保存到txt文件下,怎么解決?

    我購買了ADS1293EVM開發板,使用官方軟件時候,無論我怎樣設置,無論開啟了幾個通路,當我點保存數據時候,始終只能保存CH1的
    發表于 11-29 06:38

    異常重啟怎么破?多方排查,原因竟然是。。。

    ?又是異常重啟。。。讓人摸不到頭腦。 這幾天,看到客戶上報了重啟問題,說是查不出原因。 重啟現象是 ——有極個別設備在工作中不定時反復異常重啟,大部分設備正常;反復
    的頭像 發表于 10-14 07:04 ?714次閱讀
    異常<b class='flag-5'>重啟</b>怎么破?多方排查<b class='flag-5'>后</b>,原因竟然是。。。

    PGA309EVM-USB寫入EEPROM再讀取都是0,為什么?

    使用PGA309EVM-USB評估板及其配套軟件模擬校正測試,按 continue 寫入EEPROM,可以打開cal results 文件,里面的EEPROM都有
    發表于 08-15 06:42

    為什么無法nodemcu和arduino mega之間交換數據

    您好,我正在嘗試通過 UART arduino mega 和 nodemcu 之間交換數據(使用 arduino IDE 對兩者進行編程)。 我將
    發表于 07-19 12:15

    Arduino放回了一個空的schetch,重新打開了程序不斷重啟的原因?

    Arduino 和 FLASH_DOWNLOAD_TOOLS_V3.6.3 ESP07S 我將其作為照片 1 上傳,程序不斷重啟為錯誤https://pastebin.com/zclfugqt
    發表于 07-10 07:22

    plc存儲器中的程序斷電如何保存

    本文將深入探討可編程邏輯控制器(PLC)斷電情況下如何保存程序。我們將從PLC的基本概念入手,逐步分析存儲器類型、程序保存機制、斷電保護措施以及實際應用中的注意事項。 引言 可編程邏輯控制器
    的頭像 發表于 07-01 09:55 ?3330次閱讀

    玩轉EEPROM——全面指南

    玩轉EEPROM——全面指南 EEPROM(電可擦除可編程只讀存儲器)是一種能夠斷電保存數據
    的頭像 發表于 07-01 09:36 ?4677次閱讀
    玩轉<b class='flag-5'>EEPROM</b>——全面指南

    掌握EEPROM:綜合指南

    掌握EEPROM:綜合指南 EEPROM(Electrically Erasable Programmable Read Only Memory,電可擦可編程只讀存儲器)是一種非易失性存儲器,即使
    的頭像 發表于 07-01 09:34 ?4805次閱讀
    掌握<b class='flag-5'>EEPROM</b>:綜合指南

    ESP32使用Arduino啟用藍牙編譯固件過大,怎樣縮減大小呢?

    ESP32使用Arduino啟用藍牙編譯固件過大,怎樣縮減大小,日志級別已經最低了,分區不能動,已經是1.9M的OTA分區配置了,怎樣還能縮減大小,藍牙功能能否裁剪
    發表于 06-28 11:27

    EVASH Ultra EEPROM激光打印機中的應用

    Read-Only Memory)是一種非易失性存儲器,具有以下關鍵優勢: 數據持久性 :即使斷電的情況下,數據也能長期保存。 可擦寫性 :允
    的頭像 發表于 06-27 08:16 ?598次閱讀

    使用idf.py命令方式編譯,怎樣才能編譯arduino的庫,并且項目中可調用?

    在編譯過程中,提示找不到對應的頭文件。 請問使用idf.py命令方式編譯,怎樣才能編譯arduino的庫,并且項目中可調用。
    發表于 06-13 06:56
    主站蜘蛛池模板: 天天狠天天天天透在线 | 免费的黄视频 | 婷婷午夜天 | 天使色| 天天躁夜夜躁狠狠躁 | 色视频网| 天堂网在线资源 | 天天爽天天爽 | 天天操夜夜添 | 开心色99×xxxx| 午夜黄色大片 | 久久精品99无色码中文字幕 | 免费一级欧美片片线观看 | 狂捣猛撞侍卫攻双性王爷受 | 视频在线观看网站 | 114毛片免费观看网站 | 卡2卡三卡四卡精品公司 | 欧美1819| 欧美伦理影院 | 亚洲精品影视 | 免费看真人a一级毛片 | 日本黄页网址 | 色骚综合| 日韩成人免费观看 | 新激情五月 | 日韩欧美国产电影 | 伊人久久大香线蕉综合影 | 男人j进入女人j视频大全 | 亚洲成在人线久久综合 | 伊人不卡久久大香线蕉综合影院 | 99热这里只有精品一区二区三区 | 人人艹人人插 | 大杳蕉伊人狼人久久一本线 | 青草91视频免费观看 | bt天堂在线最新版www | 色天天躁夜夜躁天干天干 | 男啪女色黄无遮挡免费视频 | 99色在线观看 | 手机毛片在线 | 三级三级三级网站网址 | 国产特黄 |