怎樣利用好單片機(jī)上的存儲(chǔ)器資源來實(shí)現(xiàn)OD的存儲(chǔ)與訪問
掃描二維碼
隨時(shí)隨地手機(jī)看文章
我們知道OD(對(duì)象字典)是CANopen的核心,所有功能都是圍繞它開展的,是協(xié)議棧的數(shù)據(jù)中心,良好的OD實(shí)現(xiàn)是協(xié)議棧高效穩(wěn)定運(yùn)行的基礎(chǔ),而OD的實(shí)現(xiàn)最基本的一點(diǎn)就是怎么去保存它。因?yàn)镺D的內(nèi)容比較雜,讀寫屬性上,有只讀數(shù)據(jù)、只寫數(shù)據(jù)、可讀寫數(shù)據(jù);保存要求上有非易失和掉電丟失兩種類型;數(shù)據(jù)類型上有字符型、整型、長整型等等;存儲(chǔ)格式上有8位、16位、32位等。其它的不管,本文現(xiàn)只討論怎么利用單片機(jī)的資源去盡量滿足OD的存儲(chǔ)需求。
有人會(huì)以為這還要討論么?只讀的就放在只讀存儲(chǔ)器中,可寫的就放在RAM中,需要掉電保存的就放在非易失可讀寫存儲(chǔ)器中。話是這么說,但實(shí)際上問題很多,羅列如下:
1.對(duì)協(xié)議棧只讀并不表示對(duì)應(yīng)用程序只讀。
2.可讀寫而又掉電保存的數(shù)據(jù)不能放在RAM里。
3.頻繁讀寫的數(shù)據(jù)不能放在非易失存儲(chǔ)器中,因?yàn)榉且资Т鎯?chǔ)器往往速度慢,有寫次數(shù)限制。
4.單片機(jī)資源有限,存取方式和讀寫速度有限值,因此得合理利用。
既然有這些問題,我們先對(duì)OD的數(shù)據(jù)進(jìn)行分析分類:
1.系統(tǒng)只讀參數(shù)。自節(jié)點(diǎn)出廠就無需更改,例如,節(jié)點(diǎn)硬件序列號(hào)、軟硬件版本等。
2.過程數(shù)據(jù)對(duì)象。頻繁讀寫,掉電無需保存。例如,采集的模擬量、待輸出的開關(guān)量。
3.系統(tǒng)配置參數(shù)??勺x寫,偶爾配置,大部分時(shí)間只讀。
基本上所有的OD對(duì)象都可以歸到這三類中去。下面再以AVR單片機(jī)為例說說單片機(jī)的幾類存儲(chǔ)資源以及其特點(diǎn):
類型
運(yùn)行中讀寫屬性
訪問速度
容量
特點(diǎn)
FLASH
程序存儲(chǔ)器
只讀
一般
較大
操作方便但只能放程序和初始化只讀數(shù)據(jù),掉電不丟失
SRAM
數(shù)據(jù)存儲(chǔ)器
讀寫
最快
小
操作方便,速度快,掉電數(shù)據(jù)丟失
EEPROM
數(shù)據(jù)存儲(chǔ)器
讀寫
讀一般,寫很慢
小
操作復(fù)雜,寫速度極慢
看到上面這個(gè)表,你會(huì)馬上把OD的三類數(shù)據(jù)存放位置定下來吧,系統(tǒng)只讀參數(shù)放在FLASH中;過程數(shù)據(jù)對(duì)象放在SRAM中;系統(tǒng)配置參數(shù)放在EEPROM中。
實(shí)際上確實(shí)該如此安排,但是所有問題的解決了?NO,NO,NO!OD中的數(shù)據(jù)對(duì)象是怎么安排進(jìn)存儲(chǔ)器的?系統(tǒng)啟動(dòng)怎么初始化?怎么去訪問?下面提供一種方案:
出廠設(shè)置隨程序一起寫入FLASH,然后系統(tǒng)重器開始運(yùn)行,在軟件初始化過程中,程序?qū)⒊鰪S默認(rèn)的整個(gè)OD對(duì)象從FLASH載入到RAM中去,不論是OD的那種分類的數(shù)據(jù);之后如果判斷是第一次運(yùn)行,將用RAM中屬于的統(tǒng)配置參數(shù)的那一類數(shù)據(jù)去初始化EEPROM,否則用EEPROM中的系統(tǒng)配置參數(shù)去重新覆蓋對(duì)應(yīng)的RAM映像。好了初始化完成,開始運(yùn)行,因?yàn)樗蠴D數(shù)據(jù)都load到RAM中,因此OD對(duì)外可以提供統(tǒng)一快速的數(shù)據(jù)服務(wù)接口,外部的讀操作就是直接讀RAM,寫則是先寫RAM映像,然后再判斷如果是OD的系統(tǒng)配置參數(shù)那一類則同時(shí)更新EEPROM。最后要注意一點(diǎn)就是OD的對(duì)象屬性等信息一定要放在FLASH中,否則將是一個(gè)極大的RAM開銷。
上面方案優(yōu)點(diǎn)是在滿足OD需求的前提下能夠提供統(tǒng)一快速的OD訪問接口;能夠及時(shí)存儲(chǔ)非易失性數(shù)據(jù);并能在軟件上實(shí)現(xiàn)恢復(fù)出廠設(shè)置的操作而不增加額外的出廠設(shè)置備份空間(在EEPROM中置一標(biāo)志就行了,自己去想)。明顯的優(yōu)點(diǎn)也意味著明顯的缺點(diǎn),就是占用較多RAM空間,只讀數(shù)據(jù)和非易失性數(shù)據(jù)都要映射到RAM中,浪費(fèi)了一部分RAM,這將使得本來就緊張的RAM資源更加緊張,好在一般節(jié)點(diǎn)上的OD內(nèi)容一般不多,而且現(xiàn)在RAM非常便宜。
上面的方案同樣適用于其他單片機(jī),基本上現(xiàn)在的單片機(jī)上都有FLASH和RAM,而即使有的單片機(jī)沒有EEPROM,但是本身FLASH區(qū)是可以運(yùn)行中在線寫入的,也可以當(dāng)EEPROM用(但此時(shí)最好就不要來一個(gè)寫一個(gè)了,因?yàn)镕LASH是頁擦除的,比較耗時(shí)間,因此建議做成批量寫入方式,OD的0x1010和0x1011對(duì)象有涉及),實(shí)在不行還可以外擴(kuò)。