資料介紹
分享到:標簽:嵌入式 工業4.0
如果有幾個設置參數需要存儲到Flash中,我們一般會怎么存儲呢?將不同的參數都存儲到不同的頁中,還是將這幾個參數捆綁成一種結構體,每次修改都同時寫入一次呢?
將參數存儲到固定的地址,則每個參數都將占用Flash的一個塊。而將全部參數捆綁一起存入Flash塊中,那么只有一個參數修改時,也需要將全部參數一起存一遍。那么有什么更好的方法嗎?
前段時間學習Msos,看到其中使用的參數存儲的方法設計的很好,它將參數的變量地址與值,一同存儲入Flash中。出彩之處是使用參數的變量地址來標記不同的變量。
一、數據結構
這種存儲方式使用兩個數據結構:
typedef struct
{
uint Address; //參數變量的地址
uint Data; //參數變量的值
}CellStruct;
要存儲某個變量,需要將這個變量的地址和它的值一同存儲到存儲區。這種存儲方式的核心就是這個數據結構。這樣就可以使用*((uint *)(Address)) = Data 直接將存儲值賦值給對應的變量。簡單的說就是根據地址值來標記各個不同的參數。
2.存儲區的數據結構
typedef struct {
二、代碼解析
這種存儲方式的使用兩個函數:
讀取存儲區中的變量值并更新變量的值
變量的存儲函數
2.1 參數的讀取
流程圖如上,主要步驟如下:
根據Flash中存寫的變量地址,更新變量的值;
將Flash中存寫的地址值存入臨時數組中,并根據地址值判斷是否存在重復存儲的無效數據,并將無效數組失效;
清空Flash存儲區,將臨時數組中有效的變量重新存入Flash中。
通過這些步驟,將存儲區中存儲的變量讀出,并將存儲區中的重復的無效數據清除。下面是源代碼:
#define pUint(address) *((uint *)(address)) #define PageSize 1024 //Stm32F103R8T6 1Page=1024Byte #define ParameterAddress (FLASH_BASE + (63 * 1024)) #define ParameterSpace PageSize / 4 / 2 static void ReadAllParameter(void) { bool CleanFlag; int i, j;
2.2 參數的寫入
參數的寫入就很簡單了,根據數據結構中的寫入點,將變量的地址與值寫入Flash中。
static bool WriteParameter(void * dataPointer)
2.3 使用方法
使用方法:
每次上電啟動時,調用讀取全部變量的函數;
修改某個參數的時候,調用寫參數函數;
三、注意事項
在讀取參數時,需要在RAM中建立一個ParameterSpace大小的數組,如果這個值太大,會超過棧的大小,使得內存溢出。因此存儲區不能開辟的太大。
四、總結
這種方式使用簡便,尤其是在更新變量值時,根據存儲的變量地址更新相應的值。其實其本質與我們使用變量名來標記不同的變量是一樣的。不過也有缺點:
首先其同時存儲變量的地址與變量的值,相當于多使用一倍的存儲空間;
像上面的注意事項中說的,存儲區不能開辟的過大,否則會使臨時數組超過棧的大小。
?
如果有幾個設置參數需要存儲到Flash中,我們一般會怎么存儲呢?將不同的參數都存儲到不同的頁中,還是將這幾個參數捆綁成一種結構體,每次修改都同時寫入一次呢?
將參數存儲到固定的地址,則每個參數都將占用Flash的一個塊。而將全部參數捆綁一起存入Flash塊中,那么只有一個參數修改時,也需要將全部參數一起存一遍。那么有什么更好的方法嗎?
前段時間學習Msos,看到其中使用的參數存儲的方法設計的很好,它將參數的變量地址與值,一同存儲入Flash中。出彩之處是使用參數的變量地址來標記不同的變量。
一、數據結構
這種存儲方式使用兩個數據結構:
typedef struct
{
uint Address; //參數變量的地址
uint Data; //參數變量的值
}CellStruct;
要存儲某個變量,需要將這個變量的地址和它的值一同存儲到存儲區。這種存儲方式的核心就是這個數據結構。這樣就可以使用*((uint *)(Address)) = Data 直接將存儲值賦值給對應的變量。簡單的說就是根據地址值來標記各個不同的參數。
2.存儲區的數據結構
typedef struct {
二、代碼解析
這種存儲方式的使用兩個函數:
讀取存儲區中的變量值并更新變量的值
變量的存儲函數
2.1 參數的讀取
流程圖如上,主要步驟如下:
根據Flash中存寫的變量地址,更新變量的值;
將Flash中存寫的地址值存入臨時數組中,并根據地址值判斷是否存在重復存儲的無效數據,并將無效數組失效;
清空Flash存儲區,將臨時數組中有效的變量重新存入Flash中。
通過這些步驟,將存儲區中存儲的變量讀出,并將存儲區中的重復的無效數據清除。下面是源代碼:
#define pUint(address) *((uint *)(address)) #define PageSize 1024 //Stm32F103R8T6 1Page=1024Byte #define ParameterAddress (FLASH_BASE + (63 * 1024)) #define ParameterSpace PageSize / 4 / 2 static void ReadAllParameter(void) { bool CleanFlag; int i, j;
2.2 參數的寫入
參數的寫入就很簡單了,根據數據結構中的寫入點,將變量的地址與值寫入Flash中。
static bool WriteParameter(void * dataPointer)
2.3 使用方法
使用方法:
每次上電啟動時,調用讀取全部變量的函數;
修改某個參數的時候,調用寫參數函數;
三、注意事項
在讀取參數時,需要在RAM中建立一個ParameterSpace大小的數組,如果這個值太大,會超過棧的大小,使得內存溢出。因此存儲區不能開辟的太大。
四、總結
這種方式使用簡便,尤其是在更新變量值時,根據存儲的變量地址更新相應的值。其實其本質與我們使用變量名來標記不同的變量是一樣的。不過也有缺點:
首先其同時存儲變量的地址與變量的值,相當于多使用一倍的存儲空間;
像上面的注意事項中說的,存儲區不能開辟的過大,否則會使臨時數組超過棧的大小。
?
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式系統系列叢書-時間觸發嵌入式系統設計模式 0次下載
- 嵌入式多媒體卡eMMC存儲芯片介紹 47次下載
- FPGA中嵌入式塊存儲器的設計
- 嵌入式詳解
- 嵌入式論文
- 嵌入式系統定義
- 嵌入式系統與嵌入式PLC
- 嵌入式系統與嵌入式PLC 27次下載
- 嵌入式硬件系統教程之嵌入式存儲技術的詳細資料說明 14次下載
- 怎么樣才能入門嵌入式嵌入式未來的發展方向是怎樣的
- 基于嵌入式主機上的USB海量存儲設備類 6次下載
- 嵌入式主機上的USB海量存儲設備類
- 嵌入式存儲器內建自修復技術 53次下載
- 嵌入式SATA存儲系統的研究
- 嵌入式存儲器發展現狀
- 嵌入式fpga是什么意思 992次閱讀
- fpga是嵌入式嗎 1767次閱讀
- 什么是嵌入式系統?嵌入式系統的具體應用 2096次閱讀
- 基于μC/OS嵌入式操作系統的嵌入式數據管理設計 1178次閱讀
- 什么是嵌入式技術 1w次閱讀
- 嵌入式應用框架EAF詳解 2699次閱讀
- 關于嵌入式系統以及嵌入式平臺下的學科分工詳解 1855次閱讀
- 嵌入式系統的特點大匯總 5743次閱讀
- 隨機存儲器在嵌入式操作系統中的應用設計詳解 1315次閱讀
- 一文知道嵌入式存儲交換技術的可靠性如何增加 1905次閱讀
- 嵌入式行業發展狀況_嵌入式行業人才需求_嵌入式系統就業前景分析 2.3w次閱讀
- 基于Nand Flash 存儲技術的嵌入式linux 系統設計 1520次閱讀
- 學習嵌入式要什么基礎 4060次閱讀
- 典型的嵌入式系統設計 2650次閱讀
- 嵌入式存儲器的設計方法和策略 1790次閱讀
下載排行
本周
- 1TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 2開關電源基礎知識
- 5.73 MB | 6次下載 | 免費
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設計
- 0.60 MB | 3次下載 | 免費
- 5基于FPGA的光纖通信系統的設計與實現
- 0.61 MB | 2次下載 | 免費
- 6基于FPGA的C8051F單片機開發板設計
- 0.70 MB | 2次下載 | 免費
- 751單片機窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費
- 8基于51單片機的RGB調色燈程序仿真
- 0.86 MB | 2次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33564次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21548次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6653次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537796次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191185次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183278次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多