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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

浅谈单片机中变量访问的互斥

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈单片机中变量访问的互斥 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文以stm32為硬件平臺,淺談一下變量訪問的互斥。

假設是裸板,主程序和中斷服務程序都對某個變量進行修改,那么很可能造成數據的不一致。查了一下,主要有兩種解決方法:第一種是關中斷,在訪問公共資源的時候,先把中斷關掉,等訪問完畢,再打開中斷。這樣就避免了中斷程序和主程序的競態。第二種是自己做一個互斥鎖。

怎么做互斥鎖呢?其實互斥是要依賴與硬件的,如果硬件沒有相關的指令或者機制,那就不好辦了。

在x86上,可以用匯編指令XCHG做一個互斥鎖,但是stm32上就沒有這個指令。在翻閱了《Cortex-M3權威指南》后,我有個發現。下面總結一下:

互斥訪問分為加載和存儲,對應的指令對是LDREX/STREX,LDREXH/STREXH,LDREXB/STREXB,分別對應字,半字,字節。

LDREX/STREX的語法格式為:

LDREX ? ?Rxf, ? ?[Rn, #offset] ? ?; 把 (Rn+offset)地址處的內容加載到寄存器 Rxf里

STREX ? ?Rd, Rxf, [Rn, #offset] ;把Rxf的值存儲到(Rn+offset)地址處,這個操作是可以被駁回的(也就是不被執行),如果駁回,Rd的值為1,如果操作成功,Rd的值為0.

在什么情況下會被駁回呢?在執行STREX的時候,僅當在這之前執行過LDREX指令,且在執行過LDREX指令之后沒有其他的STR/STREX指令執行過的時候,才允許執行這個指令。也就是說只有在LDREX執行后的第一條STREX才能成功執行。

這個道理是易于理解的,在讀,改,寫的過程中,我們希望讀的數據是最新的,也就是讀過之后,這個數據不能被別人更新,只能被我更新。如果操作被駁回,說明別人已經修改過了,所以我讀出的數據不是最新的,已經“臟了”。

關于例子文中有,這里就不贅述了。

用這對指令,就可以做一個互斥鎖。怎么做呢?還是以《Cortex-M3權威指南》中的一個例子來說明。

DeviceALocked是一個位于內存中的R/W變量,用于指示設備A是否已經在使用中。任何一個任務,若欲使用設備A,都必須先檢查這個變量的值。如果它的值為零,則表示設備可以使用。在任務獲取到設備A后,它要把DeviceALocked的值改為1,表示設備A已經被占用。在設備A使用完畢后,該任務通過重新清零DeviceALocked來釋放設備A,從而使其它任務可以使用此設備。?

TryToLockDeviceA
LDR ? R1, =DeviceALocked

LDREX?R2, [R1]

CMP ? R2, #0 ? ? ? ? ?;檢查是否已被鎖住?

BNE LockDeviceAFailed


DeviceAIsNotLocked
MOV ? R0, #1 ? ? ? ? ??;準備鎖住設備A
STREX R2, R0, [R1] ? ??;互斥寫

CMP ? R2, #0
BNE LockDeviceAFailed ?;STREX失敗,設備A可能已被鎖;?準備返回成功值

LockDeviceASucceed
MOV ? R0, #0

POP ? {R1, R2, PC} ? ??;子程序返回?

LockDeviceAFailed
MOV ? R0, #1

POP ? {R1, R2, PC} ? ??;子程序返回?





總結

以上是生活随笔為你收集整理的浅谈单片机中变量访问的互斥的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 97人妻人人揉人人躁人人 | 日本天堂免费 | 精品视频久久久 | 成人免费视频国产免费麻豆 | 国产欧美日韩精品一区 | av东方在线 | 久久中文字幕高清 | 午夜影院在线观看18 | 日本少妇网站 | 成人性生生活性生交3 | 一本色道久久88亚洲精品综合 | 少妇喷潮明星 | 国产av无码专区亚洲a∨毛片 | 少妇厨房愉情理伦bd在线观看 | 国产 日韩 欧美 综合 | 16一17女人毛片 | 老司机午夜性大片 | 午夜伊人网 | 中文精品无码中文字幕无码专区 | 欧美一级黄色片在线观看 | 狠狠艹| 一本加勒比波多野结衣 | 中文视频在线观看 | 日本少妇与黑人 | 波多野结衣有码 | 3d动漫啪啪精品一区二区中文字幕 | 欧美亚洲少妇 | 四虎5151久久欧美毛片 | 奇米在线| 国产精品1区 | 亚洲图片二区 | 国产91视频在线 | 午夜国产在线 | 亚洲再线 | 无人码人妻一区二区三区免费 | 俄罗斯美女一级爱片 | 女生下面流水视频 | 久久久精品视频在线观看 | 亚洲欧美经典 | 欧美另类日韩 | 欧洲av一区二区三区 | 性高湖久久久久久久久免费 | 亚洲精品国产视频 | 肉丝袜脚交视频一区二区 | 撕开少妇裙子猛然进入 | 农村老熟妇乱子伦视频 | 超碰666| 99视频在线精品 | 日韩成人不卡 | 加勒比不卡视频 | 国产婷婷一区二区三区 | 两个小y头稚嫩紧窄h文 | 国产男女激情 | 超碰伊人网 | 日本五十熟hd丰满 | 日本中文在线观看 | 欧美国产专区 | 秘密爱大尺度做爰呻吟 | 欧美日韩在线一区二区 | 国产麻豆一区二区三区 | 美女啪啪无遮挡 | 亚洲www| 国产男男gay网站 | 国产香蕉久久 | 国产一级特黄a高潮片 | 国产一级aa大片毛片 | 超碰国产97 | 国产不卡在线播放 | 精品成人中文无码专区 | 国产又粗又长又黄 | 免费a大片| 日韩成人在线看 | 国产精品成人一区二区三区电影毛片 | 国产精品99久久久久久久 | 欧美成人吸奶水做爰 | 自拍偷拍在线播放 | 婷婷精品进入 | 亚洲精品视频免费看 | 国产传媒在线播放 | 香蕉久久久久久 | 国产精品久久久久毛片 | jizz国产视频 | 手机av在线免费观看 | 精品久久久久久中文字幕 | 第一页国产 | 精品人妻少妇嫩草av无码 | 国产不卡一区 | 亚洲欧洲精品一区二区 | 九色91视频| 性猛交富婆╳xxx乱大交天津 | 国偷自产视频一区二区久 | 伦一理一级一a一片 | 亚洲一区二区三区四区 | 真人毛片97级无遮挡精品 | 国产成人av一区二区三区在线观看 | 涩涩视频免费观看 | 三级成人在线 | 性开放的欧美大片 | 久久影院国产 |