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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-08 11:53 ? 次閱讀

主要內容:

1.指針變量及例子

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

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

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

1指針變量及例子

前面文章【STM32位帶操作】牽涉到的一個重要知識點就是指針變量。

這種位帶映射操作,就是操作映射過后的地址,其實就是操作指針變量。

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

指針變量是一種特殊的變量,它不同于一般的變量,一般變量存放的是數(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”,只是強制轉換成(uint32_t *)這種指針類型。

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

前面有一個朋友問過我關于指針變量的問題,看到這里,相信你應該知道使用指針變量,直接打印指針就可以判斷指針是否越界。

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

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

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

結合公式理解

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

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

對比截圖中第一個p賦的值,就是片上外設的計算公式。

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

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

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

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

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

答案:輸出低。

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

4位帶操作另一種宏定義

有通過昨天的兩個公式,可以推出下圖的公式:

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

LED另外一種定義:

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

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

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

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

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

    關注

    2264

    文章

    10854

    瀏覽量

    354298
  • LSB
    LSB
    +關注

    關注

    0

    文章

    37

    瀏覽量

    13234
  • 指針變量
    +關注

    關注

    0

    文章

    17

    瀏覽量

    7227
收藏 人收藏

    評論

    相關推薦

    C語言指針詳細解析

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

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

    在嵌入式開發(fā)領域,函數(shù)指針、指針函數(shù)、數(shù)組指針指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率和質量至關重要。一、
    的頭像 發(fā)表于 08-10 08:11 ?612次閱讀
    面試???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ù)組

    面試中的高頻問題:指針函數(shù)與函數(shù)指針,你能完美應對嗎?

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

    指針式萬用表的使用方法

    的機械調零螺釘,使指針與零刻度線重合。歐姆調零則是在測量電阻前對電阻檔進行電氣零校準,通過調整歐姆檔零調節(jié)旋鈕,使指針指在歐姆標度尺零
    的頭像 發(fā)表于 05-09 18:23 ?1517次閱讀

    字符型、指針型等變量等該如何初始化

     對于數(shù)值類型的變量往往初始化為0,但對于其他類型的變量,如字符型、指針型等變量等該如何初始化呢?
    的頭像 發(fā)表于 03-18 11:02 ?1208次閱讀

    函數(shù)指針與回調函數(shù)的應用實例

    通常我們說的指針變量是指向一個整型、字符型或數(shù)組等變量,而函數(shù)指針是指向函數(shù)。 函數(shù)指針可以像一般函數(shù)一樣,用于調用函數(shù)、傳遞參數(shù)。
    的頭像 發(fā)表于 03-07 11:13 ?360次閱讀
    函數(shù)<b class='flag-5'>指針</b>與回調函數(shù)的應用實例

    C語言的指針用法

    C語言編程中善用指針可以簡化一些任務的處理,而對于一些任務(比如動態(tài)內存分配),必須要有指針才行的。也就是說精通C指針編程是很有必要的,幫助你成為一名優(yōu)秀的Cer。
    發(fā)表于 03-05 14:22 ?305次閱讀
    C語言的<b class='flag-5'>指針</b>用法

    怎么理解指針指針?

    怎么理解指針指針?其實這個概念并不難,只是把它放到實際應用中,容易造成困擾。
    的頭像 發(fā)表于 02-23 16:46 ?1028次閱讀
    怎么理解<b class='flag-5'>指針</b>的<b class='flag-5'>指針</b>?

    結構體與指針的關系

    在C語言中,結構體(Struct)是一種用戶自定義的數(shù)據(jù)類型,它允許您將不同類型的數(shù)據(jù)項組合在一起,以便形成一個更復雜的數(shù)據(jù)結構。結構體可以包含多個成員變量,每個成員變量可以是不同的數(shù)據(jù)類型。而結構
    的頭像 發(fā)表于 01-11 08:00 ?919次閱讀
    結構體與<b class='flag-5'>指針</b>的關系

    函數(shù)指針指針函數(shù)是不是一個東西?

    函數(shù)指針的本質是指針,就跟整型指針、字符指針一樣,函數(shù)指針指向的是一個函數(shù)。
    的頭像 發(fā)表于 01-03 16:35 ?490次閱讀
    函數(shù)<b class='flag-5'>指針</b>和<b class='flag-5'>指針</b>函數(shù)是不是一個東西?

    數(shù)組和指針不相同嗎?數(shù)組和指針有哪些區(qū)別

    數(shù)組就是指針,指針就是數(shù)組,這樣的言論在評論區(qū)看到不下于10次。
    的頭像 發(fā)表于 12-13 16:34 ?1256次閱讀
    數(shù)組和<b class='flag-5'>指針</b>不相同嗎?數(shù)組和<b class='flag-5'>指針</b>有哪些區(qū)別

    函數(shù)指針的基本概念和語法

    函數(shù)指針是一種非常強大的編程工具,它可以讓我們以更加靈活的方式編寫程序。在本文中,我們將介紹 8 個函數(shù)指針的高級應用場景,并貼出相應的代碼案例和解釋。
    的頭像 發(fā)表于 12-12 09:33 ?423次閱讀

    數(shù)組與指針不能混用的情況

    指針的基本概念。數(shù)組是一組相同類型的元素的集合,而指針是一個變量,它存儲了一個地址,該地址指向內存中的某個位置。在 C/C++ 中,數(shù)組名稱可以當作指向數(shù)組第一個元素的指針來使用。這
    的頭像 發(fā)表于 12-07 13:46 ?558次閱讀

    TIA Portal平臺變量指針化該如何去使用呢?

    指針化是屬于間接尋址的一種類型。使用間接尋址時,應首先在運行系統(tǒng)中確定所用變量。定義一個變量列表,而非單個變量。
    的頭像 發(fā)表于 11-27 11:33 ?1169次閱讀
    TIA Portal平臺<b class='flag-5'>變量</b><b class='flag-5'>指針</b>化該如何去使用呢?

    指針是什么

    ,口語中說的指針通常指的是指針變量。 1.2 內存 內存是電腦上特別重要的存儲器,計算機中程序的運行都是在內存中進行的。所以為了有效的使用內存,就把內存劃分成一個個小的內存單元,每個內
    的頭像 發(fā)表于 11-24 15:50 ?1936次閱讀
    <b class='flag-5'>指針</b>是什么