[問題] 關於微控制器中的指標寫法

看板C_and_CPP作者 (--)時間7年前 (2016/11/19 09:58), 編輯推噓6(6017)
留言23則, 9人參與, 最新討論串1/3 (看更多)
請教大家,在微控制器ARM的STM32Lxx.h有以下指標寫法 #define GPIOB_BASE (0x0c00) #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef; int main(void) { GPIOB->CRH &= 0xFFFFFFF0; GPIOB->CRH |= 0x00000003; } 其中的指標寫法: #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) 請問大家,有沒有簡單的example code可以協助理解這種寫法? 我找了很多網路資料都沒有多說 在正規C語言中這種寫法的關鍵字是什麼?查得到C語言正規教材嗎? 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.140.214 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1479520688.A.9B9.html

11/19 10:06, , 1F
0x0c00的位置轉型成GPIP_TypeDef的指標
11/19 10:06, 1F

11/19 10:07, , 2F
那個記憶體位置似乎都是固定的
11/19 10:07, 2F

11/19 10:13, , 3F
那個雁該是去查 GPIO 對應的 Address bit 所得到結果,
11/19 10:13, 3F

11/19 10:14, , 4F
翻 SPEC 應就可得到
11/19 10:14, 4F

11/19 10:14, , 5F
更正一下, Address Register bit.
11/19 10:14, 5F

11/19 10:15, , 6F
請教大家#define RCC (*((uint32_t*)0x400253FC))
11/19 10:15, 6F

11/19 10:16, , 7F
似乎比較常見,兩者差異是?
11/19 10:16, 7F

11/19 10:17, , 8F
你需要把指標特性重 k 一遍
11/19 10:17, 8F

11/19 10:18, , 9F
回E大:那的確是固定位置,但它到底怎麼用C語言角度解讀?
11/19 10:18, 9F

11/19 10:20, , 10F
你應該注意力先放在,CRL,CRH,IDR在你的code對應到的FW是
11/19 10:20, 10F

11/19 10:20, , 11F
什麼作用、什麼意思,這7個變數明顯是規格所定下來的GPIO
11/19 10:20, 11F

11/19 10:21, , 12F
Register,可能會有一份文件寫 Addr[0:3]-> GPIO Reg. CRL
11/19 10:21, 12F

11/19 10:21, , 13F
Addr[4:8]->Reg CRH 之類的
11/19 10:21, 13F

11/19 12:21, , 14F
看起來只是cast 而已
11/19 12:21, 14F

11/19 13:02, , 15F
就只是指標而已 沒什麼特別的關鍵字 頂多加上轉型
11/19 13:02, 15F

11/19 17:01, , 16F
這不是指標結構嘛 ?
11/19 17:01, 16F

11/19 19:28, , 17F
就指標轉型阿
11/19 19:28, 17F

11/20 00:41, , 18F

11/20 01:13, , 19F
就只是不想每次重寫 定義一個macro 不是
11/20 01:13, 19F

11/20 02:13, , 20F
我猜一下,你可能沒開過 debugger 看過指標裡面裝什麼
11/20 02:13, 20F

11/20 02:13, , 21F
這也沒什麼啊,不就是把一個記憶體位址轉型成指標以後
11/20 02:13, 21F

11/20 02:13, , 22F
就再拿去操作嗎
11/20 02:13, 22F

11/20 02:15, , 23F
關鍵字:巨集、指標、轉型
11/20 02:15, 23F
文章代碼(AID): #1OBx6mcv (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1OBx6mcv (C_and_CPP)