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)不再提示

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

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-03-08 11:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

主要內(nèi)容:

1.指針變量及例子

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

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

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

1指針變量及例子

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

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

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

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

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

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

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

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

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

結(jié)合公式理解

上一篇文章【STM32位帶操作】列出了關(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),位帶操作其實就操作指針變量???

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

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

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

答案:輸出低。

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

4位帶操作另一種宏定義

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

上面框起來的定義適合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這種方式。(不管是標(biāo)準(zhǔn)外設(shè)庫還是HAL庫都有這樣定義)。

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

    關(guān)注

    2310

    文章

    11162

    瀏覽量

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

    關(guān)注

    0

    文章

    42

    瀏覽量

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

    關(guān)注

    0

    文章

    17

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    指針與函數(shù)詳解

    。 2、函數(shù)指針函數(shù)指針,本質(zhì)上他是一個指針,并不是一個函數(shù)。在C語言中有些概念是一脈相承的,之前的推文《指針與數(shù)組》,數(shù)組指針
    發(fā)表于 01-23 06:02

    C語言重點—指針

    ,然后再講解指針int *p,再舉一反三,搞懂int **p和int ***p,學(xué)會指針。 搞懂int *p,int **p和int ***p,完全學(xué)會指針?。。?! 二. 理解一個變量
    發(fā)表于 01-22 08:23

    函數(shù)指針介紹

    y);int * fun(int x,int y);int* fun(int x,int y); 函數(shù)指針,其本質(zhì)是一個指針變量,該指針指向這個函數(shù)??偨Y(jié)來說,函數(shù)
    發(fā)表于 01-21 08:11

    值傳遞、指針傳遞、引用傳遞介紹

    進(jìn)行操作,也就是說,即使形參的值發(fā)生改變,實參的值也完全不受影響。   2、指針傳遞:指針傳遞其實是值傳遞的一種,它傳遞的是地址。值傳遞過程中,被調(diào)函數(shù)的形參作為被調(diào)函數(shù)的局部變量來處理,即在函數(shù)的棧
    發(fā)表于 01-21 06:48

    函數(shù)指針與回調(diào)函數(shù)解讀

    變量存放的是一個地址,在32單片機(jī)中,任何類型的指針變量都存放的是一個大小為4字節(jié)的地址。 inta; < = > void cal_sum(void
    發(fā)表于 01-19 07:34

    指針難學(xué)的4點原因分析

    難點1. 討厭的星號 定義指針變量p時,都會加個*號。在用到指針變量p時,也會加個*號。比如以下代碼: int main() { int *p; p = malloc(sizeo
    發(fā)表于 01-16 06:12

    指針的基礎(chǔ)

    1. int va; 這是一個整型變量,32CPU的話,占有32個bite 2. int *va; 這是一個整型指針變量,用于存放一個整型變量
    發(fā)表于 12-15 06:06

    函數(shù)指針指針函數(shù)的區(qū)別

    在學(xué)習(xí)arm過程中發(fā)現(xiàn)這“指針函數(shù)”與“函數(shù)指針”容易搞錯,所以今天,我自己想一次把它搞清楚,找了一些資料,和大家的一些總結(jié),整理到此。和大家分享。   首先它們之間的定義:   1、指針函數(shù)是指
    發(fā)表于 12-12 06:34

    函數(shù)指針的概念

    函數(shù)指針是指向函數(shù)的指針變量。 通常我們說的指針變量是指向一個整型、字符型或數(shù)組等變量,而函數(shù)
    發(fā)表于 12-11 08:10

    如何用函數(shù)指針調(diào)用函數(shù)

    給大家舉一個例子: int Func(int x);/*聲明一個函數(shù)*/ int (*p) (int x);/*定義一個函數(shù)指針*/ p = Func; /*將Func函數(shù)的首地址賦給指針變量
    發(fā)表于 12-11 06:26

    帶操作的分析

    個字節(jié),“*8”表示一個字節(jié)中有8個比特。 四、讀寫操作的機(jī)制 在位區(qū)中,雖然每個比特都映射到別名區(qū)的一個字,但別名區(qū)的字只有LSB最低
    發(fā)表于 11-18 07:01

    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ù)手冊,更有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ū)動器的 10 MHz - 1.0 GHz 六數(shù)字衰減器(0.5 dB LSB,31.5 dB 范圍) skyworksinc

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

    電子發(fā)燒友網(wǎng)為你提供()0.7-4.0 GHz 五數(shù)字衰減器,串轉(zhuǎn)并行驅(qū)動器 (0.5 dB LSB)相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有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ū)動器 (0.5 dB <b class='flag-5'>LSB</b>) skyworksinc

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

    電子發(fā)燒友網(wǎng)為你提供()DC-3.0 GHz 六數(shù)字衰減器,串行或并行驅(qū)動器 (0.5 dB LSB)相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有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ū)動器 (0.5 dB <b class='flag-5'>LSB</b>) skyworksinc