chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言固件中指針的使用方法

multisim ? 來源:21IC ? 作者:21IC ? 2020-09-26 11:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

使用指針值

修改和取消引用指針

有兩個與指針關(guān)聯(lián)的值。第一個是存儲在指針本身中的存儲地址,第二個是存儲在該存儲地址中的數(shù)據(jù)。要修改存儲在指針變量中的地址,只需使用等號:

RxByte_ptr = 0x40;

復(fù)制代碼

要訪問存儲在指針地址處的數(shù)據(jù),請使用星號。這適用于閱讀和寫作。

ReceivedData = *RxByte_ptr; *TxByte_ptr = TransmitData;

復(fù)制代碼

訪問指針?biāo)赶虻闹捣Q為解引用,星號(與指針一起使用)稱為解引用運算符。

獲取變量的地址

與指針的使用有關(guān)的一個重要細(xì)節(jié)是C“地址”運算符。此符號為&。盡管&附加在普通變量而非指針上,但我仍將其視為“指針運算符”,因為它的使用與指針實現(xiàn)緊密相關(guān)。

當(dāng)在變量名的前面加上&時,程序?qū)⑹褂米兞康牡刂范皇亲兞康闹怠?/p>

即使您不知道特定變量將在內(nèi)存中的位置,這也使您可以將變量的地址放置在指針中。在以下代碼片段中演示了&運算符的用法,該代碼片段還用作基本指針用法的摘要。

《div id=“code_v2m”》

char displayChar; char TestingVariable; char *DisplayChar_ptr; DisplayChar = 0x41; DisplayChar_ptr = &DisplayChar; TestingVariable = *DisplayChar_ptr; *DisplayChar_ptr = 0x42; TestingVariable = DisplayChar;

復(fù)制代碼這是此代碼的逐步說明:

DisplayChar = 0x41;

復(fù)制代碼

現(xiàn)在,DisplayChar變量將保存與ASCII‘A’相對應(yīng)的值。

DisplayChar_ptr = &DisplayChar;

復(fù)制代碼

指針(DisplayChar_ptr)現(xiàn)在保存變量DisplayChar的地址。我們不知道該地址是什么,即我們不知道DisplayChar_ptr中存儲的數(shù)字。此外,我們不需要知道;這是編譯器的業(yè)務(wù),而不是我們的業(yè)務(wù)。

TestingVariable = *DisplayChar_ptr;

復(fù)制代碼

現(xiàn)在,TestingVariable保存DisplayChar變量的值,即0x41。

*DisplayChar_ptr = 0x42;

復(fù)制代碼

我們剛剛使用了指針來修改存儲在與DisplayChar變量對應(yīng)的地址中的值;現(xiàn)在它具有0x42,即ASCII‘B’。

TestingVariable = DisplayChar;

復(fù)制代碼

現(xiàn)在,TestingVariable的值為0x42。

指針?biāo)阈g(shù)

TxByte = *(TxBuffer + 1); TxByte = TxBuffer[1];

復(fù)制代碼

在大多數(shù)情況下,C變量持有一個可以變化的值,指針變量也不例外。用于修改指針值的常見算術(shù)運算是加法(例如TxByte_ptr = TxByte_ptr + 4),減法(TxByte_ptr = TxByte_ptr-4),增量(TxByte_ptr ++)和減量(TxByte_ptr--)。只要兩個指針具有相同的數(shù)據(jù)類型,就可以從另一個指針中減去一個指針。但是,您不能將一個指針添加到另一指針。

指針?biāo)阈g(shù)并不像看起來那樣簡單。假設(shè)您有一個數(shù)據(jù)類型為long的指針。您正在調(diào)試一些代碼,當(dāng)前正在單步執(zhí)行一個例程,該例程會重復(fù)遞增該指針。您在“監(jiān)視”窗口中注意到,指針的值不會隨著每次增加而增加一。這里發(fā)生了什么?

如果您不能輕易想到答案,則應(yīng)該花更多的時間考慮指針的性質(zhì)。此代碼中的指針與長變量(即占用四個字節(jié)內(nèi)存的變量)一起使用。當(dāng)您增加指針時,您實際上并不希望指針的值增加一個內(nèi)存位置(在此假設(shè)內(nèi)存是按字節(jié)組織的)。而是,您希望它增加四個存儲位置,以便它指向下一個long變量。編譯器知道這一點,并相應(yīng)地修改了指針的值。

當(dāng)您向指針添加數(shù)字或從指針減去數(shù)字時,也會發(fā)生同樣的事情。指針中存儲的地址不一定會增加或減少該數(shù)字。相反,它將增加或減少該數(shù)字乘以指針數(shù)據(jù)類型的字節(jié)大小。

指針和數(shù)組

指針和數(shù)組密切相關(guān)。聲明數(shù)組時,實際上是在創(chuàng)建一個常量指針,該常量指針始終保存數(shù)組的起始地址,并且我們用來訪問數(shù)組元素的索引符號也可以與指針一起使用。

例如,假設(shè)您有一個名為TxBuffer的char指針,該指針當(dāng)前保存地址0x30。以下代碼片段顯示了兩種等效的訪問地址0x31處數(shù)據(jù)的方式。

TxByte = *(TxBuffer + 1); TxByte = TxBuffer[1];

復(fù)制代碼

何時使用指針

在本節(jié)中,我想簡要討論兩種編碼情況,它們可以受益于指針的使用,并且與嵌入式應(yīng)用程序特別相關(guān)。

指針與數(shù)組

從上一節(jié)的討論中可以很自然地得出第一個。指針提供了另一種處理以數(shù)組形式存儲的數(shù)據(jù)的方法。在給定例程的上下文中,指針方法可能更直觀或更方便。

但是,在某些情況下,基于指針的實現(xiàn)可以提高代碼速度。我的理解是,在編譯器高度復(fù)雜并且能夠進(jìn)行如此廣泛的優(yōu)化之前,這在過去更為正確。不過,在嵌入式開發(fā)的背景下,我認(rèn)為在某些情況下指針可以提供不可忽略的執(zhí)行速度改進(jìn)。如果您確實試圖達(dá)到執(zhí)行給定代碼部分所需的最小時鐘周期數(shù),那么值得嘗試一下指針。

將指針傳遞給函數(shù)

功能的廣泛使用可幫助您編寫井井有條的模塊化代碼。這是一件好事,盡管C施加了在某些情況下可能很尷尬的限制:一個函數(shù)只能有一個返回值。換句話說,它只能修改一個變量,除非使用指針。

此技術(shù)的工作原理如下:

包括一個指針作為該函數(shù)的輸入之一。

使用&運算符將變量的地址傳遞給函數(shù)。

在函數(shù)內(nèi)部,變量的地址成為指針的值,并且函數(shù)使用解引用運算符修改原始變量的值。

即使原始變量沒有直接通過返回值進(jìn)行修改,該函數(shù)之后的代碼也假定該變量的值已被修改。

這是一個例子:

#define STEPSIZE 3

char IncreaseCnt_and_CheckLED(char *Count)

{

*Count = *Count + STEPSIZE;

IF(LED == TRUE)

return TRUE;

else

return FALSE;

}

int main()

{

char RisingEdgeCount = 0;

char LED_State;

。..

。..

LED_State = IncreaseCnt_and_CheckLED(&RisingEdgeCount);

。..

。..

}

復(fù)制代碼

結(jié)論

我希望您現(xiàn)在對C語言固件中的指針以及如何開始使用它們有一個清晰的了解。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7642

    瀏覽量

    145128

原文標(biāo)題:如何在C語言固件中使用指針

文章出處:【微信號:A1411464185,微信公眾號:multisim】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    C語言重點—指針

    C語言是比較偏底層的語言,為什么他比較偏底層,就是因為他的很多操作都是直接針對內(nèi)存操作的。 這篇我們就來講解C語言的一大特點,也是難點,
    發(fā)表于 01-22 08:23

    請教一個C語言指針問題,求解答

    C語言指針,多多少少還是有些難度的,容易有些混淆。 請教大家下面的這個表達(dá)式是啥意思呢? short (*p)[size] = (short (*)[size])0x8ff00000; 是否為在0x8ff00000地址處分
    發(fā)表于 01-12 08:14

    C語言指針p、*p、&p、*&p、&*p分別代表什么

    C語言中,指針是非常重要的概念。指針是一個變量,其值為另一個變量的地址。使用指針可以直接訪問內(nèi)存中的數(shù)據(jù),這使得
    發(fā)表于 01-07 07:34

    C語言主要特點

    。 3.數(shù)據(jù)類型豐富。C語言提供的數(shù)據(jù)類型包括整形、浮點型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型和共用體類型等,C99又?jǐn)U充了復(fù)數(shù)浮點型、超長整型(long long)和布爾類型(b
    發(fā)表于 01-05 07:41

    C語言回調(diào)函數(shù)原來這么簡單

    ” 這個概念,它是回調(diào)函數(shù)能夠?qū)崿F(xiàn)的重要基礎(chǔ)。 1、函數(shù)指針學(xué)習(xí)過C語言的伙伴都知道,C語言中的靈魂 —
    發(fā)表于 12-30 06:45

    請問C語言中整形溢出的解決方法有哪些?

    C語言中整形溢出的解決方法有哪些?
    發(fā)表于 12-29 07:33

    請問如何實現(xiàn)C語言訪問MCU寄存器?

    單片機(jī)的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語言環(huán)境下對其訪問歸納起來有兩種方法。 采用標(biāo)準(zhǔn)C的強(qiáng)制類型轉(zhuǎn)換和指針
    發(fā)表于 12-26 07:00

    Typedef在C語言中的應(yīng)用

    Typedef 在C語言中頻繁用以聲明一個已經(jīng)存在的數(shù)據(jù)類型的同義字。也可以用預(yù)處理器做類似的事。例如,思考一下下面的例子: #define dPS struct s * typedef
    發(fā)表于 12-22 13:53

    C語言特性

    根據(jù)硬件的差異對少量的底層驅(qū)動代碼進(jìn)行調(diào)整,大大降低了開發(fā)成本和周期。 3、靈活性:底層操作的能手 C 語言支持對底層硬件的直接操作,賦予了開發(fā)者極大的靈活性。開發(fā)者可以通過指針等特性,直接
    發(fā)表于 11-24 07:01

    錫膏的儲存及使用方法詳解

    錫膏是一種常用的焊接輔助材料,廣泛應(yīng)用于電子、電器、通訊、儀表等行業(yè)的焊接工藝中。正確的儲存和使用方法對于保證錫膏的品質(zhì)和焊接效果至關(guān)重要。本文將就錫膏的儲存和使用方法進(jìn)行詳細(xì)介紹,希望能對廣大焊接工作者有所幫助。
    的頭像 發(fā)表于 07-18 17:36 ?1254次閱讀
    錫膏的儲存及<b class='flag-5'>使用方法</b>詳解

    為什么學(xué)了C語言,卻寫不出像樣的項目?

    在學(xué)習(xí)編程的路上,C語言幾乎是每個程序員的“必修課”。不管你是打算從事嵌入式開發(fā)、系統(tǒng)編程,還是想要深入理解操作系統(tǒng)的底層原理,C語言都是一塊重要的基石。然而許多人在學(xué)習(xí)
    的頭像 發(fā)表于 03-14 17:37 ?824次閱讀
    為什么學(xué)了<b class='flag-5'>C</b><b class='flag-5'>語言</b>,卻寫不出像樣的項目?

    PXI-8433/4的規(guī)范使用方法分享

    應(yīng)用中,因兩線制接線配置不當(dāng)導(dǎo)致通訊障。本文將以此問題為入點,系統(tǒng)講解PXI-8433/4的規(guī)范使用方法。
    的頭像 發(fā)表于 03-14 10:38 ?1641次閱讀
    PXI-8433/4的規(guī)范<b class='flag-5'>使用方法</b>分享

    全套C語言培訓(xùn)資料—PPT課件

    全套C語言培訓(xùn)資料,共427頁,13個章節(jié):C語言概述、程序的靈魂—算法、數(shù)據(jù)類型 & 運算符與表達(dá)式、順序程序設(shè)計、選擇結(jié)構(gòu)程序設(shè)計、循環(huán)控制、數(shù)組、函數(shù)、預(yù)處理命令、
    發(fā)表于 03-12 14:50

    數(shù)字萬用表的使用方法詳細(xì)圖解

    使用方法和注意事項。 (1)使用方法 a使用前,應(yīng)認(rèn)真閱讀有關(guān)的使用說明書,熟悉電源開關(guān)、量程開關(guān)、插孔、特 殊插口的作用. b將電源開關(guān)置于 ON位置。 c交直流電壓的測量:根據(jù)需要將量程開關(guān)撥至
    發(fā)表于 03-05 15:15

    精密空調(diào)操作使用方法詳解

    精密空調(diào)操作使用方法詳解
    的頭像 發(fā)表于 02-10 14:44 ?2116次閱讀
    精密空調(diào)操作<b class='flag-5'>使用方法</b>詳解