C語言實現(xiàn)自動分配地址的示例
一.背景介紹
在我們嵌入式軟件開發(fā)工作中,地址分配是很重要的一部分內(nèi)容,而本文要介紹的自動分配地址方法的優(yōu)點有兩個。
(1)在兩個已分配地址的數(shù)據(jù)中給新數(shù)據(jù)分配地址時修改點較少。
(2)被分配的地址之間不易沖突,不會產(chǎn)生越界的錯誤。
二.應(yīng)用舉例
比如我們當(dāng)前想實現(xiàn)的功能是是把幾個不同的數(shù)據(jù)存儲到EEPROM里面,存儲的數(shù)據(jù)分別叫做數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3。它們3個數(shù)據(jù)分別占用100個字節(jié)的大小。存儲的基地址是0,那么常規(guī)思路如下:
//數(shù)據(jù)長度 #define LEN_FIRST_DATA 100 #define LEN_SECOND_DATA 100 #define LEN_THIRD_DATA 100 //數(shù)據(jù)地址 #define ADR_FIRST_DATA 0 #define ADR_SECOND_DATA 100 #define ADR_THIRD_DATA 200
如果我們想在在兩個數(shù)據(jù)的中插入新的數(shù)據(jù),那么就需要修改插入新數(shù)據(jù)之后的所有宏,這樣處理造成的問題是當(dāng)宏的數(shù)量過多會極大地浪費時間,因此我們實際工作中采用自動分配地址的寫法來避免這種問題。
1. 自動分配地址寫法一
我們可以在宏定義時讓第一個的數(shù)據(jù)的地址 = 基地址 ,第二個的數(shù)據(jù)的地址 = 第一個數(shù)據(jù)的地址 + 第一個數(shù)據(jù)的長度,第三個的數(shù)據(jù)的地址 = 第二個數(shù)據(jù)的地址 + 第二個數(shù)據(jù)的長度,依次類推。這樣在插入新元素時就只需修改兩處即可。
//數(shù)據(jù)長度 #define LEN_FIRST_DATA 100 #define LEN_SECOND_DATA 100 #define LEN_THIRD_DATA 100 //數(shù)據(jù)地址 #define ADR_BASE_DATA 0 #define ADR_FIRST_DATA ADR_BASE_DATA #define ADR_SECOND_DATA ADR_FIRST_DATA + LEN_FIRST_DATA #define ADR_THIRD_DATA ADR_SECOND_DATAZ + LEN_SECOND_DATA
2. 自動分配地址寫法二
還有一種更加明智的寫法,就是將EE地址整體作為一個結(jié)構(gòu)體,然后使用強制轉(zhuǎn)換的技巧就可以直接獲取分配好的數(shù)據(jù)地址數(shù)據(jù),具體寫法如下。
typedef struct
{
unsigned char _FirstData[100];
unsigned char _SecondData[100];
unsigned char _ThirdData[100];
}St_Data
#define GET_ADDR(data) ((unsigned int)&((St_Data*)ADR_BASE_DATA)->data))這樣寫的話讀取EE地址只需要調(diào)用GET_ADDR(data)即可,這個宏的作用就是通過數(shù)據(jù)直接返回一個4字節(jié)unsigned int類型的地址,比如我們想獲取第一個數(shù)據(jù)的EE地址,就可以直接調(diào)用GET_ADDR(_FirstData)。
從我個人來說的話第二種方法更好,不僅省去了大量的宏定義,而且插入新元素時的修改點只有一處,代碼的可讀性也更好。
到此這篇關(guān)于C語言實現(xiàn)自動分配地址的示例的文章就介紹到這了,更多相關(guān)C語言 自動分配地址內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言實現(xiàn)繪制LoveBeat愛心曲線的示例代碼
這篇文章主要為大家詳細介紹了如何溧陽C語言實現(xiàn)繪制LoveBeat愛心曲線,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03
C++實現(xiàn)LeetCode(61.旋轉(zhuǎn)鏈表)
這篇文章主要介紹了C++實現(xiàn)LeetCode(61.旋轉(zhuǎn)鏈表),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
如何在C++中實現(xiàn)一個正確的時間循環(huán)器詳解
這篇文章主要給大家介紹了關(guān)于如何在C++中實現(xiàn)一個正確的時間循環(huán)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

