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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

嵌入式系统开发过程中遇到的——volatile

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式系统开发过程中遇到的——volatile 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嵌入式 系統開發過程中遇到的—— volatile

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

#define IOPIN (*((volatile unsigned long *) 0xE0028000)) 為例:

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

volatile 類型是這樣的,其數據確實可能在未知的情況下發生變化。比如:

l ????????? 硬件設備的終端更改了它,現在硬件設備往往也有自己的私有內存地址,比如顯存,他們一般是通過映象的方式,反映到一段特定的內存地址當中,這樣,在某些條件下,程序就可以直接訪問這些私有內存了。

l ????????? 共享的內存地址,多個程序都對它操作的時候。你的程序并不知道,這個內存何時被改變了。如果不加這個 voliatile 修飾,程序是利用 cache 當中的數據,那個可能是過時的了,加了 voliatile ,就在需要用的時候,程序重新去那個地址去提取,保證是最新的。歸納起來如下:

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

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

對于 ((volatile unsigned long *) 0xE0028000) 為隨硬件需要定義的一種地址,前面加上 “*” 指針,表示該地址上的內容,整個定義用字符串 IOPIN 代替,調用的時候直接對指向的地址寄存器寫內容既可,非常方便(可以參考 vivi 的代碼)。

這實際上正體現了內存映射機制的方便性。 其中 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 地址所指向的值,而是直接用 第一次讀出的值( cache ),如果這樣,那這個循環可能是個死循環 。用了 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

?

總結

以上是生活随笔為你收集整理的嵌入式系统开发过程中遇到的——volatile的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产玖玖| 亚洲三级小视频 | 淫妹妹影院 | 免费日本在线 | 中文字幕少妇在线三级hd | 国产又色又爽又黄的 | 欧美日韩精品一区二区 | 久久成人精品视频 | 国产精品视频h | 性――交――性――乱睡觉 | 一区二区手机在线 | 无码人妻丰满熟妇区毛片蜜桃精品 | 男人操女人动态图 | 永久精品 | 欧美在线视频免费观看 | 天天操操夜夜操操 | 欧美入口 | 在线观看中文字幕视频 | 中文字幕在线观看视频一区 | 国产中文字幕视频 | 欧美理论在线观看 | 国产精品香蕉在线 | 熟妇高潮精品一区二区三区 | 淫品色影院 | 亚洲xx站| 国产视频污在线观看 | 亚洲天堂资源网 | zzjizzji亚洲日本少妇 | 日本在线观看免费 | 国产视频久久久久 | 欧美a级在线 | 欧美成人aaaaⅴ片在线看 | 黄色精品一区 | 亚洲成av人在线观看 | 尤物视频免费观看 | 欧美一二三区 | 亚洲欧美日韩偷拍 | 17c在线观看 | 亚洲天堂2020 | 国产91精品在线观看 | 伊人久久久久久久久久久久久 | 久久精品99国产 | 国产免费黄色大片 | 精品人妻一区二区三区蜜桃 | 黑色丝袜吻戏亲胸摸腿 | 岛国大片在线 | 亚洲一区二区三区免费视频 | 在线观看免费中文字幕 | 中文字幕永久在线 | 超碰成人网 | 天天综合91| 亚洲一区二区精品视频 | 欧美日韩在线国产 | 网友自拍咪咪爱 | 成人视屏在线观看 | 毛片一区 | 女生脱裤子让男生捅 | 国产在线高潮 | 激情无码人妻又粗又大 | 九色视频在线播放 | 国产精品免费视频观看 | 国自产拍偷拍精品啪啪一区二区 | 深夜福利在线播放 | 中文无码一区二区三区在线观看 | 国产吞精囗交免费视频网站 | 亚洲第一精品在线观看 | 国产亚洲精品久久久久久久 | 五月天综合 | 欧美人体视频一区二区三区 | 欧美zozo | 中文字幕25页 | 久久久精品人妻av一区二区三区 | 日韩中文字幕在线一区 | 午夜精品久久久久久久四虎美女版 | 九一av| 成人午夜视频在线播放 | 国产精品乱码一区二三区小蝌蚪 | 强伦轩人妻一区二区电影 | 亚洲精品国产成人无码 | 国产三级精品三级在线观看 | 夜夜天天干 | 国产拍拍拍 | 成人免费做受小说 | 成人国产精品久久 | 二区三区偷拍浴室洗澡视频 | yw在线观看 | 欧美123区| 中文字幕区| 亚洲熟妇无码一区二区三区 | 午夜精品三级久久久有码 | 欧美韩一区二区 | 天堂网视频在线观看 | 国产一区二区色 | 日本偷拍一区 | 99国产精品久久久久久久成人 | 五月婷婷欧美 | 在线网站av| 日本性xxxxx 免费毛片视频网站 | 中文字幕在线播放第一页 |