欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語(yǔ)言實(shí)現(xiàn)自動(dòng)分配地址的示例

 更新時(shí)間:2024年11月26日 10:26:07   作者:電腦玩家飲水機(jī)  
本文介紹了兩種自動(dòng)分配地址的方法,包括通過(guò)宏定義實(shí)現(xiàn)地址分配和將EE地址作為一個(gè)結(jié)構(gòu)體,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一.背景介紹

在我們嵌入式軟件開(kāi)發(fā)工作中,地址分配是很重要的一部分內(nèi)容,而本文要介紹的自動(dòng)分配地址方法的優(yōu)點(diǎn)有兩個(gè)。

(1)在兩個(gè)已分配地址的數(shù)據(jù)中給新數(shù)據(jù)分配地址時(shí)修改點(diǎn)較少。

(2)被分配的地址之間不易沖突,不會(huì)產(chǎn)生越界的錯(cuò)誤。

二.應(yīng)用舉例

比如我們當(dāng)前想實(shí)現(xiàn)的功能是是把幾個(gè)不同的數(shù)據(jù)存儲(chǔ)到EEPROM里面,存儲(chǔ)的數(shù)據(jù)分別叫做數(shù)據(jù)1,數(shù)據(jù)2,數(shù)據(jù)3。它們3個(gè)數(shù)據(jù)分別占用100個(gè)字節(jié)的大小。存儲(chǔ)的基地址是0,那么常規(guī)思路如下:

//數(shù)據(jù)長(zhǎng)度
#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

如果我們想在在兩個(gè)數(shù)據(jù)的中插入新的數(shù)據(jù),那么就需要修改插入新數(shù)據(jù)之后的所有宏,這樣處理造成的問(wèn)題是當(dāng)宏的數(shù)量過(guò)多會(huì)極大地浪費(fèi)時(shí)間,因此我們實(shí)際工作中采用自動(dòng)分配地址的寫法來(lái)避免這種問(wèn)題。

1. 自動(dòng)分配地址寫法一

我們可以在宏定義時(shí)讓第一個(gè)的數(shù)據(jù)的地址 = 基地址 ,第二個(gè)的數(shù)據(jù)的地址 = 第一個(gè)數(shù)據(jù)的地址 + 第一個(gè)數(shù)據(jù)的長(zhǎng)度,第三個(gè)的數(shù)據(jù)的地址 = 第二個(gè)數(shù)據(jù)的地址 + 第二個(gè)數(shù)據(jù)的長(zhǎng)度,依次類推。這樣在插入新元素時(shí)就只需修改兩處即可。

//數(shù)據(jù)長(zhǎng)度
#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. 自動(dòng)分配地址寫法二

還有一種更加明智的寫法,就是將EE地址整體作為一個(gè)結(jié)構(gòu)體,然后使用強(qiáng)制轉(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)即可,這個(gè)宏的作用就是通過(guò)數(shù)據(jù)直接返回一個(gè)4字節(jié)unsigned int類型的地址,比如我們想獲取第一個(gè)數(shù)據(jù)的EE地址,就可以直接調(diào)用GET_ADDR(_FirstData)。

從我個(gè)人來(lái)說(shuō)的話第二種方法更好,不僅省去了大量的宏定義,而且插入新元素時(shí)的修改點(diǎn)只有一處,代碼的可讀性也更好。

到此這篇關(guān)于C語(yǔ)言實(shí)現(xiàn)自動(dòng)分配地址的示例的文章就介紹到這了,更多相關(guān)C語(yǔ)言 自動(dòng)分配地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論