在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MCU上的無鎖原子讀操作

            MCU上的無鎖原子讀操作

            作者: 時間:2016-11-17 來源:網(wǎng)絡 收藏
            原子讀操作是在MCU并發(fā)編程中常用的操作,簡單舉個例子來闡述問題:

            我們使用RTOS或裸機狀態(tài)編程時,必然需要一個全局時鐘基準,通常是在一個定時器中斷中累加實現(xiàn),簡化代碼如下:

            static unsigned long volatile __jiffies = 0; /* 全局時鐘基準節(jié)拍累加器 */

            ISR_TIMER() /* 定時中斷服務函數(shù) */
            {
            ++__jiffies;
            /* 其它代碼...: */
            }

            對于其中的__jiffies變量,就是全局時間基準,程序中其它地方都會對其進行原子讀操作來判斷時間,典型的接口實現(xiàn)如下:

            unsigned long get_jiffies(void)
            {
            unsigned long tmp;

            CLOCK_IRQ_DIS(); /* 關定時中斷 */
            tmp = __jiffies;
            CLOCK_IRQ_EN(); /* 開定時中斷 */

            return tmp;
            }

            請注意,其中關于對中斷的開關是對該定時中斷中所有代碼會帶來影響。如果在RTOS中,關中斷的時間是一種重要性能指標,決定了整個系統(tǒng)的中斷快速響應能力。
            在此假設一個最艱難的架構,8位機(AVR、51等等),其上只有8位單字節(jié)數(shù)據(jù)的讀寫是單指令原子的,其中unsigned long型在這樣的架構下是32位8字節(jié)。

            根據(jù)各位朋友提出情況,進行說明:

            1、有朋友認為讀操作沒必要關中斷.

            這個顯然不可能,當你讀了32位變量任何一個字節(jié)的時候,剩下的7個字節(jié)都可能改變。

            2、認為在中斷函數(shù)建立數(shù)據(jù)拷貝

            這個理由同上,無論如何復制,都難以避免讀的瞬間數(shù)據(jù)被破壞

            3、建立單字節(jié)原子鎖

            該體系必須支持測試清零指令,而且就算支持。如果中斷里發(fā)現(xiàn)鎖被占有了,那這個周期還能進行+1操作么?無論是用變量緩存還是丟棄,所記時間都不準了。


            實現(xiàn)如下:
            unsigned long get_jiffies(void)
            {
            unsigned long tmp;

            do {
            tmp = __jiffies;
            } while(tmp != __jiffies);

            return tmp
            }

            簡單得大家可能都不相信,可以滿足任何MCU架構完成如上對__jiffies變量的操作(必須單核),大家可以仔細想想。
            無鎖單讀單寫隊列是MCU上經(jīng)常用的,對中斷通信接口的緩沖非常方便可靠。以此為基礎,可跨平臺實現(xiàn)。


            關鍵詞: MCU無鎖原子讀操

            評論


            技術專區(qū)

            關閉