最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)分配地址的寫(xiě)法來(lái)避免這種問(wèn)題。

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

我們可以在宏定義時(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)度,依次類(lèi)推。這樣在插入新元素時(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)分配地址寫(xiě)法二

還有一種更加明智的寫(xiě)法,就是將EE地址整體作為一個(gè)結(jié)構(gòu)體,然后使用強(qiáng)制轉(zhuǎn)換的技巧就可以直接獲取分配好的數(shù)據(jù)地址數(shù)據(jù),具體寫(xiě)法如下。

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))

這樣寫(xiě)的話讀取EE地址只需要調(diào)用GET_ADDR(data)即可,這個(gè)宏的作用就是通過(guò)數(shù)據(jù)直接返回一個(gè)4字節(jié)unsigned int類(lèi)型的地址,比如我們想獲取第一個(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)文章

  • VC小技巧匯總之對(duì)話框技巧

    VC小技巧匯總之對(duì)話框技巧

    這篇文章主要介紹了VC小技巧匯總之對(duì)話框技巧,非常實(shí)用!對(duì)于進(jìn)行VC開(kāi)發(fā)有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07
  • C++如何獲取鼠標(biāo)點(diǎn)擊位置

    C++如何獲取鼠標(biāo)點(diǎn)擊位置

    這篇文章主要介紹了C++如何獲取鼠標(biāo)點(diǎn)擊位置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++ Boost Archive超詳細(xì)講解

    C++ Boost Archive超詳細(xì)講解

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開(kāi)發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-12-12
  • C語(yǔ)言實(shí)現(xiàn)繪制LoveBeat愛(ài)心曲線的示例代碼

    C語(yǔ)言實(shí)現(xiàn)繪制LoveBeat愛(ài)心曲線的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何溧陽(yáng)C語(yǔ)言實(shí)現(xiàn)繪制LoveBeat愛(ài)心曲線,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • C++遞歸與迭代兩種編程范式的對(duì)比與實(shí)踐應(yīng)用

    C++遞歸與迭代兩種編程范式的對(duì)比與實(shí)踐應(yīng)用

    遞歸(Recursion)是指函數(shù)通過(guò)調(diào)用自身來(lái)解決問(wèn)題的一種方法而迭代 (Iteration)是通過(guò)循環(huán)結(jié)構(gòu)(如 for、while)重復(fù)執(zhí)行一段代碼來(lái)解決問(wèn)題的方法,本文給大家介紹C++遞歸與迭代兩種編程范式的對(duì)比與實(shí)踐應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • C++實(shí)現(xiàn)LeetCode(61.旋轉(zhuǎn)鏈表)

    C++實(shí)現(xiàn)LeetCode(61.旋轉(zhuǎn)鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(61.旋轉(zhuǎn)鏈表),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼

    C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++驅(qū)動(dòng)bash的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • 使用C++實(shí)現(xiàn)鏈表元素的反轉(zhuǎn)

    使用C++實(shí)現(xiàn)鏈表元素的反轉(zhuǎn)

    反轉(zhuǎn)鏈表是鏈表操作中一個(gè)經(jīng)典的問(wèn)題,也是面試中常見(jiàn)的考題,本文將從思路到實(shí)現(xiàn)一步步地講解如何實(shí)現(xiàn)鏈表的反轉(zhuǎn),幫助初學(xué)者理解這一操作,我們將使用C++代碼演示具體實(shí)現(xiàn),同時(shí)分析時(shí)間復(fù)雜度和空間復(fù)雜度,需要的朋友可以參考下
    2025-02-02
  • C++11之后的decltype類(lèi)型指示符詳解

    C++11之后的decltype類(lèi)型指示符詳解

    為了滿足這一要求,C++11?新標(biāo)準(zhǔn)引入了另一種類(lèi)型說(shuō)明符?decltype?,它的作用是選擇并返回操作數(shù)的數(shù)據(jù)類(lèi)型,這篇文章主要介紹了C++11之后的decltype類(lèi)型指示符,需要的朋友可以參考下
    2023-01-01
  • 如何在C++中實(shí)現(xiàn)一個(gè)正確的時(shí)間循環(huán)器詳解

    如何在C++中實(shí)現(xiàn)一個(gè)正確的時(shí)間循環(huán)器詳解

    這篇文章主要給大家介紹了關(guān)于如何在C++中實(shí)現(xiàn)一個(gè)正確的時(shí)間循環(huán)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論

周口市| 渭源县| 六安市| 灵武市| 治多县| 安岳县| 东兴市| 盐亭县| 东阿县| 江西省| 木兰县| 临夏市| 奉化市| 晋中市| 通海县| 永嘉县| 岳阳县| 康平县| 永川市| 大安市| 安岳县| 阜平县| 宜昌市| 南乐县| 塔城市| 胶州市| 那曲县| 克东县| 垦利县| 仙桃市| 蓝田县| 五台县| 商河县| 荆州市| 石屏县| 右玉县| 响水县| 乐至县| 驻马店市| 元氏县| 叙永县|