色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

單片機位帶牽涉的指針變量問題

jf_pJlTbmA9 ? 來源:strongerHuang ? 作者:strongerHuang ? 2023-09-27 15:18 ? 次閱讀

之前為大家分享的《Cortex-M位帶操作的原理》,雖然現(xiàn)在不常用位帶操作了,但里面很多知識點值得學(xué)習(xí)和了解。

指針變量及例子

位帶操作牽涉到的一個重要知識點就是指針變量。

這種位帶映射操作,就是操作映射過后的地址,其實就是操作指針變量(存放地址的變量)。
指針變量是一種特殊的變量,它不同于一般的變量,一般變量存放的是數(shù)據(jù)本身,而指針變量存放的是數(shù)據(jù)的地址。《摘自百度百科【指針變量】》
指針變量的例子:

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”,只是強制轉(zhuǎn)換成(uint32_t *)這種指針類型。

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

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

指針變量---位帶操作

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

wKgaomUDz8eAbg41AAEpaapon1c549.jpg

提示:上圖中對p的賦值,其實是一樣的(在STM32中),都是0x42210184。
結(jié)合公式理解:

之前文章《位帶操作原理》列出了關(guān)于片上外設(shè)區(qū)計算公式:

AliasAddr = 0x42000000+(A-0x40000000)*32 + n*4
對比截圖中第一個p賦的值,就是片上外設(shè)的計算公式。

第二個p只是對代碼優(yōu)化了:“ ”到“-”的優(yōu)化,可以看編譯器相關(guān)手冊。
第4個p就是上一節(jié)代碼中值,有沒有發(fā)現(xiàn),位帶操作其實就操作指針變量啊?
這樣相比讀出寄存器,再 或者|再寫入寄存器的效率要高多啦?
位帶別名區(qū)最低有效位

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

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

位帶操作另一種宏定義

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

wKgaomUDz8mAdg6vAACDF7HQhCU831.jpg

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

#define LED BIT_ADDR((GPIOA_BASE+ 12),1)
這種定義需要注意:+12,其實是ODR相對GPIOA的基地址的偏移地址。
我曾在這里遇到的坑:我將STM32F1的移植到F4上,出現(xiàn)了問題,我找了半天才發(fā)現(xiàn)由于這個偏移地址不一樣導(dǎo)致的。
STM32F1的ODR偏移是12,而F4的ODR偏移是20。所以,建議大家使用GPIOA->ODR這種方式。(不管是標準外設(shè)庫還是HAL庫都有這樣定義)。

來源:strongerHuang

免責聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理(聯(lián)系郵箱:cathy@eetrend.com)。

審核編輯 黃宇

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

    關(guān)注

    242

    文章

    23347

    瀏覽量

    662421
  • 單片機
    +關(guān)注

    關(guān)注

    6042

    文章

    44617

    瀏覽量

    637584
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    481

    瀏覽量

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

    關(guān)注

    0

    文章

    17

    瀏覽量

    7241
收藏 人收藏

    評論

    相關(guān)推薦

    keil中單片機C編程指針變量的關(guān)系

    指針變量注:keil中單片機C編程若指針沒有指向提前聲明的變量,會產(chǎn)生混亂eg:情景一:情景二:Type *p,*q;Type *p,*q
    發(fā)表于 07-14 08:35

    在keil中單片機C編程的指針變量有何關(guān)系

    在keil中單片機C編程的指針變量有何關(guān)系?指針自身地址和指針所指地址分別是什么?
    發(fā)表于 10-19 09:30

    基于51單片機指針設(shè)計

    51單片機-指針1. 指針變量a的指針=變量a的地址再定義一個
    發(fā)表于 11-18 06:45

    單片機指針變量的相關(guān)資料分享

    單片機C語言變量分別有char型,int型,long型,float型等,它們分別占用內(nèi)存為1個單元,2單元,4單元,4單元等,另外數(shù)組和字符串則占用了內(nèi)存某段連續(xù)的單元。這些變量的共同特征是它們都裝
    發(fā)表于 11-30 08:05

    單片機教程十四:單片機位操作指令

    單片機教程十四:單片機位操作指令 前面那些流水燈的例程,我們已經(jīng)習(xí)慣了“位”一位就是一盞燈的亮和滅,而我們學(xué)的指令卻全都是用“字節(jié)”
    發(fā)表于 05-15 23:09 ?1647次閱讀

    單片機視頻教程07:變量

    《手把手教你學(xué)單片機單片機視頻教程07:變量 單片機視頻教程07:變量 1、局部變量,在函數(shù)內(nèi)
    發(fā)表于 08-21 09:35 ?1.2w次閱讀
    <b class='flag-5'>單片機</b>視頻教程07:<b class='flag-5'>變量</b>

    單片機的結(jié)構(gòu)體和指針等資料說明

    本文檔的主要內(nèi)容詳細介紹的是單片機的結(jié)構(gòu)體和指針等資料說明包括了:單片機的常量,單片機變量,構(gòu)造類型:數(shù)組,構(gòu)造類型:結(jié)構(gòu)體,構(gòu)造類型:
    發(fā)表于 12-05 17:23 ?17次下載
    <b class='flag-5'>單片機</b>的結(jié)構(gòu)體和<b class='flag-5'>指針</b>等資料說明

    單片機的常量和變量與數(shù)組的詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是單片機的常量和變量與數(shù)組的詳細資料說明包括了:單片機的常量,單片機變量,構(gòu)造類型:數(shù)組,構(gòu)造類型:結(jié)構(gòu)體,構(gòu)造
    發(fā)表于 12-11 17:36 ?13次下載
    <b class='flag-5'>單片機</b>的常量和<b class='flag-5'>變量</b>與數(shù)組的詳細資料說明

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

    指針變量,位指針,LSB最低有效位······
    的頭像 發(fā)表于 03-08 11:53 ?2543次閱讀

    教你如何輕松寫單片機指針

    摘要:大家想過沒有我們用keil寫單片機的代碼,你的函數(shù)啊、變量啊最終都放在了哪里?我們一直說的內(nèi)存五區(qū),到底是哪五區(qū)?到底放在芯片的哪個地方呢?還有為什么你學(xué)完C語言指針和結(jié)構(gòu)體,32單片機
    的頭像 發(fā)表于 06-17 16:08 ?3167次閱讀
    教你如何輕松寫<b class='flag-5'>單片機</b>的<b class='flag-5'>指針</b>

    51單片機-指針方法-串口實例

    51單片機-指針1. 指針變量a的指針=變量a的地址再定義一個
    發(fā)表于 11-12 09:51 ?33次下載
    51<b class='flag-5'>單片機</b>-<b class='flag-5'>指針</b>方法-串口實例

    單片機C語言之指針變量

    單片機C語言變量分別有char型,int型,long型,float型等,它們分別占用內(nèi)存為1個單元,2單元,4單元,4單元等,另外數(shù)組和字符串則占用了內(nèi)存某段連續(xù)的單元。這些變量的共同特征是它們都裝
    發(fā)表于 11-21 09:06 ?15次下載
    <b class='flag-5'>單片機</b>C語言之<b class='flag-5'>指針</b><b class='flag-5'>變量</b>

    STM32位帶引申的指針變量問題

    位帶操作牽涉到的一個重要知識點就是指針變量。這種位映射操作,就是操作映射過后的地址,其實就是操作指針
    發(fā)表于 02-08 15:57 ?3次下載
    STM32位帶引申的<b class='flag-5'>指針</b><b class='flag-5'>變量</b>問題

    單片機入門必知 | C與單片機C不一樣?

    單片機c語言比起普通C語言增加了一些基本的指令,變量的賦值是16進制,當然單片機c語言只牽涉到普通c語言的基礎(chǔ)部分。
    發(fā)表于 02-09 11:18 ?2次下載
    <b class='flag-5'>單片機</b>入門必知 | C與<b class='flag-5'>單片機</b>C不一樣?

    單片機指針變量及例子

    這種位映射操作,就是操作映射過后的地址,其實就是操作指針變量(存放地址的變量)。 指針變量
    發(fā)表于 12-29 13:52 ?761次閱讀
    主站蜘蛛池模板: 欧美写真视频一区 | 我和妽妽在厨房里的激情区二区 | 免费夜里18款禁用软粉色 | 午夜福到在线2019 | 国产盗摄一区二区 | 2022年国产精品久久久久 | 久久99影院| 秋霞成人午夜鲁丝一区二区三区 | 久久中文字幕亚洲精品最新 | 四川老师边上网课边被啪视频 | 欧美精品中文字幕亚洲专区 | 亚洲午夜精品A片久久软件 亚洲午夜精品A片久久不卡蜜桃 | 成人天堂资源WWW在线 | FREE性丰满白嫩白嫩的HD | 亚洲haose在线观看 | 诱受H嗯啊巨肉各种play | 出轨的妻子在线观看 | 夜夜狂射影院欧美极品 | 2021国产在线视频 | 蜜桃日本免费观看MV | 三级全黄的视频在线观看 | 久久久伊人影院 | 一区二区三区国产亚洲网站 | a级男女性高爱潮高清试看 A级毛片无码久久精品免费 | 国产精品外围在线观看 | 这里只有精品在线视频 | 亚洲午夜精品A片久久WWW软件 | 国产ts在线 | 久草视频在线观看免费4 | www.亚洲天堂 | 天天躁日日躁狠狠躁AV麻豆 | 天天国产在线精品亚洲 | 纯肉宠文高h一对一 | 97国产蝌蚪视频在线观看 | 久久99AV无色码人妻蜜柚 | 后式大肥臀国产在线 | 久久精品男人影院 | 在线视频久久只有精品第一日韩 | 丰满饥渴老太性hd | 国产在线观看香蕉视频 | 我要搞av|