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

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

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

指針變量, 位帶指針 ,LSB最低有效位 ······

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-08 11:53 ? 次閱讀

主要內(nèi)容:

1.指針變量及例子

2.指針變量---位帶操作

3.位帶別名區(qū)最低有效位

4.位帶操作另一種宏定義

1指針變量及例子

前面文章【STM32位帶操作】牽涉到的一個(gè)重要知識(shí)點(diǎn)就是指針變量。

這種位帶映射操作,就是操作映射過(guò)后的地址,其實(shí)就是操作指針變量。

指針變量:指存放地址的變量。

指針變量是一種特殊的變量,它不同于一般的變量,一般變量存放的是數(shù)據(jù)本身,而指針變量存放的是數(shù)據(jù)的地址?!墩园俣劝倏啤局羔樧兞俊俊?/p>

指針變量的例子

intmain(void){ uint32_t *p; p = (uint32_t *)(0x42210184); System_Initializes(); while(1) { *p =0; TIMDelay_Nms(500); *p =1; TIMDelay_Nms(500); }}

上面例子中給p指針變量賦的值是“0x42210184”,只是強(qiáng)制轉(zhuǎn)換成(uint32_t *)這種指針類型。

而*p = 0;代表該地址上的數(shù)據(jù)值為0;也就是上面說(shuō)的該地址存放的數(shù)據(jù)為0;

前面有一個(gè)朋友問(wèn)過(guò)我關(guān)于指針變量的問(wèn)題,看到這里,相信你應(yīng)該知道使用指針變量,直接打印指針就可以判斷指針是否越界。

2指針變量---位帶操作

上面代碼中“0x42210184”代表STM32F103系列芯片中PA1的位帶別名地址(就是映射過(guò)去的地址),截一個(gè)圖,大家看看:

提示:上圖中對(duì)p的賦值,其實(shí)是一樣的(在STM32中),都是0x42210184。

結(jié)合公式理解

上一篇文章【STM32位帶操作】列出了關(guān)于片上外設(shè)區(qū)計(jì)算公式:

AliasAddr = 0x42000000+(A-0x40000000)*32 + n*4

對(duì)比截圖中第一個(gè)p賦的值,就是片上外設(shè)的計(jì)算公式。

第二個(gè)p只是對(duì)代碼優(yōu)化了:“&”到“-”的優(yōu)化,可以看編譯器相關(guān)手冊(cè)。

第4個(gè)p就是上一節(jié)代碼中值,有沒(méi)有發(fā)現(xiàn),位帶操作其實(shí)就操作指針變量啊?

這樣相比讀出寄存器,再&或者|再寫入寄存器的效率要高多啦?

3位帶別名區(qū)最低有效位

有朋友發(fā)現(xiàn),*p = 0;這樣操作對(duì)地址0x42210184(PA1輸出)寫入0,PA1輸出低。假如我寫入0x10,那么PA1輸出多少呢?

答案:輸出低。

原因在于:在位帶區(qū)中,每個(gè)比特都映射到別名地址區(qū)的一個(gè)字只有 LSB 有效,也就是最低一位有效。

4位帶操作另一種宏定義

有通過(guò)昨天的兩個(gè)公式,可以推出下圖的公式:

上面框起來(lái)的定義適合RAM和外設(shè)兩種,假如定義一個(gè)LED為PA1,只需要將PA1相關(guān)參數(shù)傳入即可。

LED另外一種定義:

#define LED BIT_ADDR((GPIOA_BASE+ 12),1)

這種定義需要注意:+12,其實(shí)是ODR相對(duì)GPIOA的基地址的偏移地址。

我曾在這里遇到的坑:我將STM32F1的移植到F4上,出現(xiàn)了問(wèn)題,我找了半天才發(fā)現(xiàn)由于這個(gè)偏移地址不一樣導(dǎo)致的。

STM32F1的ODR偏移是12,而F4的ODR偏移是20。所以,建議大家使用GPIOA->ODR這種方式。(不管是標(biāo)準(zhǔn)外設(shè)庫(kù)還是HAL庫(kù)都有這樣定義)。

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

    關(guān)注

    2290

    文章

    11018

    瀏覽量

    362943
  • LSB
    LSB
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    13458
  • 指針變量
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    7300
收藏 人收藏

    評(píng)論

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

    GaAs 數(shù)字衰減器 5 、1 dB LSB 400 MHz-4 GHz skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()GaAs 數(shù)字衰減器 5 、1 dB LSB 400 MHz-4 GHz相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有GaAs 數(shù)字衰減器 5 、1 dB LSB 400 M
    發(fā)表于 05-26 18:33
    GaAs 數(shù)字衰減器 5 <b class='flag-5'>位</b>、1 dB <b class='flag-5'>LSB</b> 400 MHz-4 GHz skyworksinc

    驅(qū)動(dòng)器的 10 MHz - 1.0 GHz 六數(shù)字衰減器(0.5 dB LSB,31.5 dB 范圍) skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()驅(qū)動(dòng)器的 10 MHz - 1.0 GHz 六數(shù)字衰減器(0.5 dB LSB,31.5 dB 范圍)相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有驅(qū)動(dòng)器的 10 MHz
    發(fā)表于 05-26 18:32
    <b class='flag-5'>帶</b>驅(qū)動(dòng)器的 10 MHz - 1.0 GHz 六<b class='flag-5'>位</b>數(shù)字衰減器(0.5 dB <b class='flag-5'>LSB</b>,31.5 dB 范圍) skyworksinc

    0.7-4.0 GHz 五數(shù)字衰減器,串轉(zhuǎn)并行驅(qū)動(dòng)器 (0.5 dB LSB) skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()0.7-4.0 GHz 五數(shù)字衰減器,串轉(zhuǎn)并行驅(qū)動(dòng)器 (0.5 dB LSB)相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有0.7-4.0 GHz 五數(shù)字衰減器,
    發(fā)表于 05-23 18:31
    0.7-4.0 GHz 五<b class='flag-5'>位</b>數(shù)字衰減器,<b class='flag-5'>帶</b>串轉(zhuǎn)并行驅(qū)動(dòng)器 (0.5 dB <b class='flag-5'>LSB</b>) skyworksinc

    DC-3.0 GHz 六數(shù)字衰減器,串行或并行驅(qū)動(dòng)器 (0.5 dB LSB) skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()DC-3.0 GHz 六數(shù)字衰減器,串行或并行驅(qū)動(dòng)器 (0.5 dB LSB)相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有DC-3.0 GHz 六數(shù)字衰減器,
    發(fā)表于 05-23 18:31
    DC-3.0 GHz 六<b class='flag-5'>位</b>數(shù)字衰減器,<b class='flag-5'>帶</b>串行或并行驅(qū)動(dòng)器 (0.5 dB <b class='flag-5'>LSB</b>) skyworksinc

    RTOS中的本地存儲(chǔ)指針使用

    本地存儲(chǔ)指針是RTOS中的一個(gè)重要特性,增強(qiáng)了任務(wù)管理和數(shù)據(jù)處理能力。在RTOS上下文中,本地存儲(chǔ)是指存儲(chǔ)在本地的特定任務(wù)或?qū)ο蟮臄?shù)據(jù)。通常與任務(wù)本地存儲(chǔ)(Task Local Storage,TLS)有關(guān),其中數(shù)據(jù)存儲(chǔ)在任務(wù)控制塊(TCB)中,允許每個(gè)任務(wù)具有私有的、特定于任務(wù)的
    的頭像 發(fā)表于 02-28 16:33 ?873次閱讀
    RTOS中的本地存儲(chǔ)<b class='flag-5'>指針</b>使用

    指針被釋放后就變成了空指針

    指針被釋放后,是不是就變成了空指針?有好多同學(xué)提出了這樣的問(wèn)題。 借用《C專家編程》上面的一段代碼,可以很好的解釋這個(gè)問(wèn)題。 ? ? #include int main(){ char *s
    的頭像 發(fā)表于 01-22 09:23 ?355次閱讀

    ADS1282是32ADC,在計(jì)算對(duì)紋波要求的時(shí)候,LSB按照32計(jì)算,還是按照有效位數(shù)計(jì)算?

    ADS1282是32ADC,那么在計(jì)算對(duì)紋波要求的時(shí)候,LSB按照32計(jì)算,還是按照有效位數(shù)計(jì)算(有效位數(shù)才20
    發(fā)表于 12-04 08:36

    指針數(shù)組和二維數(shù)組有沒(méi)有區(qū)別

    。 首先是指針數(shù)組 s1。 s1 本身是個(gè)一維數(shù)組,數(shù)組有三個(gè)元素,每個(gè)元素都是個(gè)指針。如果是 64 系統(tǒng),三個(gè)指針就占了 24 個(gè)字節(jié)。 使用 sizeof 計(jì)算 s1 的大小,結(jié)
    的頭像 發(fā)表于 11-24 11:12 ?505次閱讀

    C語(yǔ)言指針學(xué)習(xí)筆記

    本文從底層內(nèi)存分析,徹底讓讀者明白C語(yǔ)言指針的本質(zhì)。
    的頭像 發(fā)表于 11-05 17:40 ?593次閱讀
    C語(yǔ)言<b class='flag-5'>指針</b>學(xué)習(xí)筆記

    C語(yǔ)言指針運(yùn)算符詳解

    在C語(yǔ)言中,當(dāng)你有一個(gè)指向數(shù)組中某個(gè)元素的指針時(shí),你可以對(duì)該指針執(zhí)行某些算術(shù)運(yùn)算,例如加法或減法。這些運(yùn)算可以用來(lái)遍歷數(shù)組中的元素,如ptr[i]等價(jià)于*(ptr + i)。然而,如果你的操作使得指針指向了數(shù)組以外的位置(除了數(shù)
    的頭像 發(fā)表于 10-30 11:16 ?723次閱讀

    C語(yǔ)言指針詳細(xì)解析

    的使用全局變量也能解決這個(gè)問(wèn)題。 函數(shù)指針 函數(shù)指針是指指針的函數(shù),函數(shù)指針的本質(zhì)是一個(gè)
    發(fā)表于 09-14 10:03

    面試???1:函數(shù)指針指針函數(shù)、數(shù)組指針指針數(shù)組

    在嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應(yīng)用場(chǎng)景,對(duì)于提升嵌入式程序的效率和質(zhì)量至關(guān)重要。一、
    的頭像 發(fā)表于 08-10 08:11 ?1385次閱讀
    面試???1:函數(shù)<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>函數(shù)、數(shù)組<b class='flag-5'>指針</b>與<b class='flag-5'>指針</b>數(shù)組

    DACx0004四通道16、14、121LSB INL緩沖電壓輸出數(shù)模轉(zhuǎn)換器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《DACx0004四通道16、14、121LSB INL緩沖電壓輸出數(shù)模轉(zhuǎn)換器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-26 09:17 ?0次下載
    DACx0004四通道16<b class='flag-5'>位</b>、14<b class='flag-5'>位</b>、12<b class='flag-5'>位</b>1<b class='flag-5'>LSB</b> INL緩沖電壓輸出數(shù)模轉(zhuǎn)換器數(shù)據(jù)表

    DACx0502雙通道16、14和12 1LSB INL電壓輸出DAC數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《DACx0502雙通道16、14和12 1LSB INL電壓輸出DAC數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-23 10:55 ?1次下載
    DACx0502雙通道16<b class='flag-5'>位</b>、14<b class='flag-5'>位</b>和12<b class='flag-5'>位</b> 1<b class='flag-5'>LSB</b> INL電壓輸出DAC數(shù)據(jù)表

    面試中的高頻問(wèn)題:指針函數(shù)與函數(shù)指針,你能完美應(yīng)對(duì)嗎?

    的內(nèi)存分析,徹底讓大家明白指針的本質(zhì)。建議大家靜下心來(lái)再?gòu)?fù)習(xí)一遍。一、指針變量首先要明白指針是一個(gè)變量,為此寫了如下代碼來(lái)驗(yàn)證之:運(yùn)行后可以
    的頭像 發(fā)表于 06-22 08:11 ?2235次閱讀
    面試中的高頻問(wèn)題:<b class='flag-5'>指針</b>函數(shù)與函數(shù)<b class='flag-5'>指針</b>,你能完美應(yīng)對(duì)嗎?

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品