日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

#define GPBCON (*(volatile unsigned *)0x56000010) 的理解

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #define GPBCON (*(volatile unsigned *)0x56000010) 的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

對于不同的計算機體系結構,設備可能是端口映射,也可能是內存映射的。如果系統結構支持獨立的IO地址空間,并且是端口映射,就必須使用匯編語言完成實際對設備的控制,因為C語言并沒有提供真正的“端口”的概念。如果是內存映射,那就方便的多了。

??????????以?#define IOPIN???(*((volatile unsigned long *) 0xE0028000))???為例:作為一個宏定義語句,define是定義一個變量或常量的偽指令。首先(?volatile unsigned long *?)的意思是將后面的那個地址強制轉換成?volatile unsigned long *?,unsigned long *?是無符號長整形,volatile?是一個類型限定符,如const一樣,當使用volatile限定時,表示這個變量是依賴系統實現的,以為著這個變量會被其他程序或者計算機硬件修改,由于地址依賴于硬件,volatile就表示他的值會依賴于硬件。

??????volatile?類型是這樣的,其數據確實可能在未知的情況下發生變化。比如,硬件設備的終端更改了它,現在硬件設備往往也有自己的私有內存地址,比如顯存,他們一般是通過映象的方式,反映到一段特定的內存地址當中,這樣,在某些條件下,程序就可以直接訪問這些私有內存了。另外,比如共享的內存地址,多個程序都對它操作的時候。你的程序并不知道,這個內存何時被改變了。如果不加這個voliatile修飾,程序是利用cache當中的數據,那個可能是過時的了,加了?voliatile,就在需要用的時候,程序重新去那個地址去提取,保證是最新的。歸納起來如下:

1. volatile變量可變?允許除了程序之外的比如硬件來修改他的內容??

2.?訪問該數據任何時候都會直接訪問該地址處內容,即通過cache提高訪問速度的優化被取消?

?

???????對于((volatile unsigned long *) 0xE0028000)為隨硬件需要定義的一種地址,前面加上“*”指針,為直接指向該地址,整個定義約定符號IOPIN代替,調用的時候直接對指向的地址寄存器寫內容既可。這實際上就是內存映射機制的方便性了。其中volatile關鍵字是嵌入式系統開發的一個重要特點。上述表達式拆開來分析,首先(volatile unsigned long *) 0xE0028000的意思是把0xE0028000強制轉換成volatile unsigned long類型的指針,暫記為p,那么就是#define A *p,即A為P指針指向位置的內容了。這里就是通過內存尋址訪問到寄存器A,可以讀/寫操作。

?

對于(volatile unsigned char *)0x20我們再分析一下,它是由兩部分組成:

?1)(unsigned char *)0x20,0x20只是個值,前面加(unsigned char *)表示0x20是個地址,而且這個地址類型是unsigned char?,意思是說讀寫這個地址時,要寫進unsigned char?的值,讀出也是unsigned char?。

?2)volatile,關鍵字volatile?確保本條指令不會因C?編譯器的優化而被省略,且要求每次直接讀值。例如用while((unsigned char *)0x20)時,有時系統可能不真正去讀0x20的值,而是用第一次讀出的值,如果這樣,那這個循環可能是個死循環。用了volatile?則要求每次都去讀0x20的實際值。

?

那么(volatile unsigned char *)0x20是一個固定的指針,是不可變的,不是變量。而char???*u則是個指針變量。

?再在前面加"*":*(volatile unsigned char *)0x20則變成了變量(普通的unsigned char變量,不是指針變量),如果#define i (*(volatile unsigned char *)0x20),那么與unsigned char i是一樣了,只不過前面的i的地址是固定的。

?

那么你的問題就可解答了,(*(volatile unsigned char *)0x20)可看作是一個普通變量,這個變量有固定的地址,指向0x20。而0x20只是個常量,不是指針更不是變量。

轉載于:https://my.oschina.net/u/920274/blog/2251389

總結

以上是生活随笔為你收集整理的#define GPBCON (*(volatile unsigned *)0x56000010) 的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产免费av片在线 | 一区二区三区有限公司 | 国产欧美一区二区三区国产幕精品 | 男女男精品视频站 | 三级a视频 | 小黄网站在线观看 | 色天天 | 欧美全黄 | 色av性av丰满av | 永久av免费 | 精品国产乱码久久久久久蜜臀网站 | 亚洲欧美一区在线 | 日韩久久久久久久久久 | 成人av免费看 | 男女操操视频 | 国产资源一区 | 在线免费a视频 | 亚洲我射av | 久久久青青草 | 亚洲免费黄色 | 久草视 | 日本免费黄色片 | 亚洲国产成人精品女人久久久 | 久久7777 | 亚洲AV蜜桃永久无码精品性色 | www.久久国产 | 欧美xxxxav | 国产免费高清 | 亚欧成人 | 色先锋在线 | 国产成人麻豆免费观看 | 国产日韩欧美综合 | 中文字幕在线影院 | 国产人妻精品午夜福利免费 | 久久精品电影网 | 在线免费观看日韩 | 丰满少妇一区二区三区 | 国产视频手机在线 | 天堂婷婷 | 国产12页 | 国产精品久久77777 | 久久人妻少妇嫩草av | 免费人成又黄又爽又色 | 中文字幕1| 欧美日韩综合视频 | 免费视频二区 | 亚洲奶汁xxxx哺乳期 | 古代玷污糟蹋np高辣h文 | 男人插入女人下面的视频 | www.69视频 | 欧美激情一二区 | 高潮喷水一区二区三区 | 天堂8中文 | 日韩美女免费线视频 | 国产午夜三级 | 韩国伦理片观看 | 国产精品免费视频一区二区 | 91丨九色丨海角社区 | 美国做爰xxxⅹ性视频 | 国产黄色www | 中文亚洲欧美 | 一级片自拍 | 国产tv在线观看 | 亚洲大片在线观看 | 欧美日韩 一区二区三区 | 国产在线观看一区 | 国内自拍第二页 | 日批视频免费观看 | 日本黄色aaa | 国产精品自产拍在线观看 | 国产福利在线 | 欧美黄色aaa| 一区二区三区国产视频 | 老司机在线看片 | 国产精品久久久久久久久免费软件 | 国产网红女主播精品视频 | 二级黄色片 | 久久福利影院 | 国产成年人 | 精品无码一区二区三区的天堂 | 中文字幕h | 亚洲欧美999 | 在线日本中文字幕 | 欧美高清另类 | 天堂网www.| 久久99精品久久久久久 | 久久精品视频久久 | 国产精品99久久久久久大便 | 欧美日本在线看 | av2014天堂 | 91福利免费视频 | 青青青草视频在线 | 不卡视频一区 | 韩国三级在线视频 | 婷婷综合在线视频 | 国产偷拍一区二区 | 欧美 亚洲 一区 | 欧美日韩国语 | 99热成人 |