• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      飛思卡爾KEA128微控制器位帶技術(shù)的應(yīng)用解析

      2016-11-08 08:36:06李躍華王宜懷
      計算機(jī)應(yīng)用與軟件 2016年10期
      關(guān)鍵詞:微控制器字節(jié)中斷

      李躍華 王宜懷

      1(南通大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院 江蘇 南通 226019)2(蘇州大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院 江蘇 蘇州 215006)

      ?

      飛思卡爾KEA128微控制器位帶技術(shù)的應(yīng)用解析

      李躍華1,2王宜懷2

      1(南通大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院江蘇 南通 226019)2(蘇州大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院江蘇 蘇州 215006)

      在嵌入式系統(tǒng)開發(fā)中,對內(nèi)存的訪問需使用“讀-改-寫”操作,至少會生成三條機(jī)器指令,不適合執(zhí)行速度要求較高場合,此外還可能導(dǎo)致多任務(wù)間共享資源的“互鎖”問題。詳細(xì)解析了KEA128微控制器硬件提供的位帶技術(shù)對SRAM_U內(nèi)存位操作的工作機(jī)制。實例對比分析和應(yīng)用結(jié)果表明,利用位帶技術(shù)可以降低代碼占用空間,減少程序執(zhí)行的機(jī)器指令周期,適合程序員在高級編程中使用該技術(shù)實現(xiàn)對位的快速“原子操作”,提高程序運行速度。

      SRAM_U位帶區(qū)位帶別名區(qū)原子操作互鎖

      0 引 言

      在嵌入式編程中,通常情況下對RAM的操作,只能進(jìn)行整字節(jié)讀取/寫入。一般需要進(jìn)行“讀-改-寫”操作,即讀內(nèi)存賦給臨時變量,然后對臨時變量進(jìn)行修改,最后將臨時變量結(jié)果寫回內(nèi)存[1]。這樣編譯后會生成多條指令,執(zhí)行的指令周期長,代碼占用空間也大。在嵌入式應(yīng)用中經(jīng)常會出現(xiàn)執(zhí)行效率要求較高的場景,尤其是對RAM的頻繁操作需要提高運行速度。使用普通的讀取/寫入方法,會產(chǎn)生較多的機(jī)器指令代碼,降低系統(tǒng)的運行效率。此外,在多任務(wù)共享資源的“互鎖”解決方案中也需要對位的操作特殊處理,實現(xiàn)對位的快速“原子操作”。KEA128微控制器是飛思卡爾針對汽車市場最新開發(fā)的微控制器(MCU),有非常廣泛的應(yīng)用范圍。由于芯片的高可靠性,也大量應(yīng)用于一般的工業(yè)控制系統(tǒng)中。KEA128微控制器內(nèi)部具有位帶技術(shù)這種位操作機(jī)制,從硬件上提供了對位帶別名區(qū)外設(shè)地址空間用“讀-改-寫”的操作方式來實現(xiàn)位操作[2]。硬件設(shè)計采用相對比較復(fù)雜的映射機(jī)制,一般程序員在編程時不會使用,而在高級編程中使用該技術(shù)實現(xiàn)對位的快速操作。本文通過詳細(xì)解析位帶技術(shù)要點及其與普通位操作方法的比較,并給出實際應(yīng)用案例場景,為其他編程人員提供參考。使用這種機(jī)制能夠降低總線的占用率和CPU執(zhí)行時間,提高系統(tǒng)的運行速度,降低系統(tǒng)的功耗。本文的研究是在國家自然科學(xué)基金資助下開展的,該項目的熒光投影數(shù)據(jù)采集檢測模塊,需大量處理內(nèi)存中的采集數(shù)據(jù),對于程序的代碼空間和運行時間要求較高。使用普通位操作技術(shù)很難達(dá)到較好的效果,利用本文位帶技術(shù)設(shè)計的評估系統(tǒng)為基金項目中數(shù)據(jù)檢測模塊的研究做了一定的探索。

      1 KEA128微控制器位帶技術(shù)機(jī)制概述

      KEA128微控制器的SRAM(16 KB)分為兩部分:SRAM_L(4 KB)和SRAM_U(12 KB)。硬件機(jī)制提供利用“位帶別名區(qū)”對SRAM_U“位帶區(qū)”的對應(yīng)位置1或清0操作[2]。位帶別名區(qū)的32位字地址的寫操作與SRAM_U上的目標(biāo)位的“讀-改-寫”操作作用相同,但僅需一個指令周期。利用“位帶別名區(qū)”的98 304字地址編號實現(xiàn)對12 KB 的SRAM_U的98 304個位的操作,位帶別名區(qū)地址空間(0x22000000-0x2205FFFF,384 KB,98 304字)對應(yīng)SRAM_U位帶區(qū)(0x20000000-0x20002FFFF,12 KB)的12×1024×8=98 304個位。位帶別名區(qū)只支持簡單的置1和清0寫操作,目的是方便對位的快速原子操作[3,4]。

      “位帶別名區(qū)”操作實質(zhì)是一種內(nèi)存映射關(guān)系。硬件將SRAM_U“位帶區(qū)”的存儲單元按“位”映射到對應(yīng)“位帶別名區(qū)”的32 位“字”上,“位帶別名區(qū)”中的一個32位地址,對應(yīng)“位帶區(qū)”一個地址中的一個位[2,3]。按“字”訪問“位帶別名區(qū)”的存儲單元時,就相當(dāng)于訪問“位帶區(qū)”對應(yīng)“位”。對“位帶別名區(qū)”地址的訪問等同于對真實地址的某個位的訪問?!拔粠^(qū)”與“位帶別名區(qū)”的映射關(guān)系如圖1所示。

      圖1 “位帶區(qū)”和“位帶別名區(qū)”的映射關(guān)系

      通過位帶技術(shù)映射存儲空間之后,編寫程序時可以方便實現(xiàn)位操作?!拔粠e名區(qū)”第0位的值決定寫入目標(biāo)位的值,為1代表向目標(biāo)位寫1;為0代表目標(biāo)位清0。可以通過向“位帶別名區(qū)”寫0x00000000,表明目標(biāo)位清0;寫0x00000001表明目標(biāo)位置1。根據(jù)KEA128微控制器位帶區(qū)“位”與位帶別名區(qū)“字”的對應(yīng)關(guān)系,位帶別名區(qū)地址的計算方法[6]為:位帶別名區(qū)地址= 位帶別名區(qū)基地址+ 位帶區(qū)字節(jié)偏移量×32 + 位偏移量×4。設(shè)SRAM_U“位帶區(qū)”的地址為X,需要置1或清0的位為m(0≤m≤31),可以通過公式計算出“位帶別名區(qū)”的地址為:0x22000000+(X-0x20000000)×32+m×4。

      2 KEA128微控制器位帶技術(shù)應(yīng)用機(jī)制解析

      2.1不同方法操作SRAM_U解析

      2.1.1普通方法操作SRAM_U

      一般情況下,如何修改內(nèi)存中的一位?如果要求是改動一位,不能影響其他位。以32位字長為例進(jìn)行解析,設(shè)目標(biāo)地址為0x20002FF0,改動其第16位為“0”的方法如下[5]:

      1) 讀一個字:讀出0x20002FF0-0x20002FF3中內(nèi)容到變量temp中:

      temp=(*( volatile unsigned long int *)(unsigned long int)0x20002FF0);

      2) 改一個位:將temp中的第16位清0:

      temp=temp&(0xFFFEFFFF);

      3) 寫一個字:將temp寫回目標(biāo)地址:

      (*(volatile unsigned long int *)(unsigned long int)0x20002FF0)=temp;

      這就是通常所說的“讀-改-寫”操作,即讀內(nèi)存賦給臨時變量,然后對臨時變量進(jìn)行修改,最后將臨時變量結(jié)果寫回內(nèi)存。

      2.1.2位帶技術(shù)操作SRAM_U

      如果我們使用KEA128微控制器硬件機(jī)制所提供的“位帶別名區(qū)”將SRAM_U“位帶區(qū)”地址為0x20002FF0的內(nèi)存單元第16位變成“0”,僅需一步寫操作就可以實現(xiàn):

      (*(volatile unsigned long int *)(unsigned long int)0x2205FE40)=0;

      其中“位帶別名區(qū)”的地址0x2205FE40可以通過公式0x22000000+(0x20002FF0-0x20000000)×32+16×4計算得到。

      2.2實例對比分析

      為了充分說明位帶技術(shù)的優(yōu)勢,我們在Kinetis Design Studio 2.0.0編譯環(huán)境中對上述代碼反匯編進(jìn)行對比。可以發(fā)現(xiàn),使用位帶技術(shù)比原有“讀-改-寫”方法的代碼空間要小,執(zhí)行效率更高。通過“位帶別名區(qū)”的寫操作就可以實現(xiàn)對SRAM_U“位帶區(qū)”中位的操作,將位操作的“讀-改-寫”過程變?yōu)橹挥小皩憽钡牟僮?,提高了程序的運行效率。

      普通方法操作SRAM_U的機(jī)器碼:

      //SARM_U位帶區(qū)讀一個字

      temp=(*( volatile unsigned long int *)(unsigned long int)0x20002FF0);

      80e:4b36 ldrr3, [pc, #216]; (8e8 )

      810:681b ldrr3, [r3, #0]

      812:60fb strr3, [r7, #12]

      //改一個位

      temp=temp&(0xFFFEFFFF);

      814:68fa ldrr2, [r7, #12]

      816:4b35 ldrr3, [pc, #212]; (8ec )

      818:4013 andsr3, r2

      81a:60fb strr3, [r7, #12]

      //SARM_U位帶區(qū)寫一個字

      (*( volatile unsigned long int *)(unsigned long int)0x20002FF0)=temp;

      81c:4b32 ldrr3, [pc, #200]; (8e8 )

      81e:68fa ldrr2, [r7, #12]

      820:601a strr2, [r3, #0]

      位帶技術(shù)操作SRAM_U的機(jī)器碼:

      //位帶別名區(qū)寫一個字

      (*( volatile unsigned long int *)(unsigned long int)0x2205FE40)=0x00000000;

      822:4b33 ldrr3, [pc, #204]; (8f0 )

      824:2200 movsr2, #0

      826:601a strr2, [r3, #0]

      3 利用位帶技術(shù)編程要點

      3.1位帶技術(shù)使用的RAM區(qū)域

      SRAM_U作為普通內(nèi)存區(qū)時,一般被用來存儲全局變量、臨時變量(堆??臻g)等。當(dāng)SRAM_U用作位帶區(qū)時,僅需使用其中很小一部分區(qū)域用作位帶區(qū),其余大部分仍然用作普通內(nèi)存區(qū)。如果地址隨意使用,位帶區(qū)和普通內(nèi)存區(qū)會出現(xiàn)重疊,從而出現(xiàn)使用混亂,發(fā)生錯誤。為此,我們一般在鏈接文件(.LD)中修改堆棧大小和堆棧SP指針,將堆棧的最高地址向小端移動,根據(jù)實際項目需要,留出部分高端地址空間給SRAM_U位帶區(qū)使用。

      3.2使用volatile關(guān)鍵字

      在C語言編程設(shè)計中使用位帶技術(shù)時,所訪問的存儲器單元必須使用關(guān)鍵字volatile 來加以定義[6]。該關(guān)鍵字用于規(guī)定C 編譯器不允許對其限定的變量進(jìn)行優(yōu)化處理,編譯后的程序每次需要存儲或讀取這個變量的時候,都會直接從變量地址中讀取數(shù)據(jù)。如果沒有volatile關(guān)鍵字,則編譯器可能優(yōu)化讀取和存儲,可能暫時使用寄存器中的值。如果這個變量被別的程序更新了的話,將出現(xiàn)不一致的現(xiàn)象。

      4 位帶技術(shù)應(yīng)用案例

      4.1解決多任務(wù)間共享資源的“互鎖”問題

      在嵌入式系統(tǒng)設(shè)計中,多任務(wù)間共享資源會出現(xiàn)“互鎖”問題,采用普通的“讀-改-寫”操作可能會出現(xiàn)紊亂情況[7]。

      比如,利用內(nèi)存中一個字節(jié),用作狀態(tài)標(biāo)記位。在多個中斷服務(wù)程序中,根據(jù)不同的響應(yīng)中斷設(shè)置對應(yīng)的狀態(tài)標(biāo)記位;主程序根據(jù)狀態(tài)標(biāo)記位去執(zhí)行不同的程序段,然后清除對應(yīng)的狀態(tài)標(biāo)記位。下面利用兩種方法來操作狀態(tài)標(biāo)記位,并采用位帶技術(shù)來解決使用普通方法可能存在的“互鎖”問題。

      4.1.1使用普通方法

      采用普通的“讀-改-寫”操作需要 3 條指令,導(dǎo)致這中間留有兩個能被中斷的空當(dāng),于是可能會出現(xiàn)狀態(tài)標(biāo)記位的紊亂情況。假設(shè)當(dāng)主程序main中狀態(tài)標(biāo)記位值為0b00000001,需要清除第0位,正處于“讀”-“改”間隔或“改”-“寫”間隔的時候發(fā)生isr_one中斷,中斷響應(yīng)后對需要第1位置1。此時,isr_one中斷服務(wù)程序中讀取到狀態(tài)標(biāo)記位值仍然為0b00000001,然后進(jìn)行修改、寫入后變?yōu)?b00000011。退出中斷isr_one服務(wù)例程,返回到mian主程序中,繼續(xù)執(zhí)行“讀”、“改”操作的后續(xù)“寫”指令。由于發(fā)生中斷前已經(jīng)讀取了狀態(tài)標(biāo)記位的值為0b00000001,修改后為0b00000000,此時會將0b00000000的值寫回狀態(tài)標(biāo)記位,isr_one中斷服務(wù)程序中所做的修改動作就會丟失,達(dá)不到程序所設(shè)計的效果。同樣的紊亂情況可能出現(xiàn)在多任務(wù)的執(zhí)行環(huán)境中。其實上述的情況可以看作是多任務(wù)的一個特例:主程序mian是一個任務(wù),isr_one是另一個任務(wù),這兩個任務(wù)并發(fā)執(zhí)行[7]。示例程序說明如下:

      主程序Main中:

      Flag&=~(1<<0);

      //清除標(biāo)記位第0位

      //該語句實際上為3條復(fù)合語句;假設(shè)Flag變量對應(yīng)地址為:0x20002FF0

      Flag=(*( volatile unsignedchar *)(unsigned long int)0x20002FF0);

      //此處可能會被isr_one中斷

      Flag=temp&(0xFE);

      //清除第0位

      //此處可能會被isr_one中斷

      (*(volatile unsignedchar *)(unsigned long int)0x20002FF0)=Flag;

      isr_one中斷服務(wù)程序中:

      Flag|=(1<<1);

      //標(biāo)記位第1位置1

      //該語句實際上為3條復(fù)合語句

      Flag=(*( volatile unsignedchar *)(unsigned long int)0x20002FF0);

      Flag=temp|(0x02);

      //第1位置1

      (*(volatile unsignedchar *)(unsigned long int)0x20002FF0)=Flag;

      4.1.2使用位帶技術(shù)方法

      利用位帶技術(shù)的好處是在多任務(wù)中,可以實現(xiàn)共享資源在任務(wù)間的“互鎖”訪問。多任務(wù)的共享資源必須滿足一次只有一個任務(wù)訪問它,即所謂的“原子操作”。通過使用位帶技術(shù),就可以避免上例中的紊亂情況。位帶操作把這個“讀-改-寫”操作變成一個硬件級別支持的原子操作,不能被中斷。上述main中對狀態(tài)標(biāo)記位第0位的清0操作采用位帶技術(shù)后,執(zhí)行完清0操作后才會去相應(yīng)isr_one中斷,執(zhí)行對應(yīng)的服務(wù)例程完成狀態(tài)標(biāo)記位第1位的置1操作,這樣就不會出現(xiàn)上述紊亂情況。示例程序說明如下:

      主程序Main中:

      //計算出SRAM_U:0x20002FF0,第0位,對應(yīng)的位帶別名區(qū)地

      //址:0x2205FE00

      //計算出SRAM_U:0x20002FF0,第1位,對應(yīng)的位帶別名區(qū)地

      //址:0x2205FE04

      //清除標(biāo)記位第0位

      (*(volatile unsigned long int *)(unsigned long int) 0x2205FE00)=0;

      isr_one中斷服務(wù)程序中:

      //標(biāo)記位第1位置1

      (*(volatile unsigned long int *)(unsigned long int) 0x2205FE04)=1;

      4.2利用位帶技術(shù)提高LED點陣數(shù)量的編程實例

      在嵌入式系統(tǒng)設(shè)計中,對于內(nèi)存的訪問操作十分頻繁。下面以筆者設(shè)計的一個實際項目案例來說明位帶技術(shù)在內(nèi)存訪問控制上的優(yōu)勢。

      所設(shè)計的單色16×16點陣LED屏移動顯示控制系統(tǒng)中,LED點陣屏采用動態(tài)掃描方案,使用MCU進(jìn)行控制掃描。在屏幕點亮前需要將內(nèi)存中一個字節(jié)的數(shù)據(jù)一位一位串行送入控制芯片74HC595中[8],對于送一個字節(jié)數(shù)據(jù),程序段需要反復(fù)調(diào)用執(zhí)行。在設(shè)計中使用了兩種方法進(jìn)行編程,各有優(yōu)劣,下面就以實際案例程序進(jìn)行分析說明。

      4.2.1內(nèi)存數(shù)據(jù)移位法

      該方法利用循環(huán)實現(xiàn)將內(nèi)存*data變量中的數(shù)據(jù)和i變量進(jìn)行與操作,i初值為0b1000000。循環(huán)首次判斷*data最高位的值,如果是0則將一位數(shù)據(jù)0送入595;如果是1則將一位數(shù)據(jù)1送入595,然后將i右移1位,判斷下一位。循環(huán)8次實現(xiàn)將一個字節(jié)中的數(shù)據(jù)逐位送入595芯片。利用C語言的基本位操作語句實現(xiàn),程序可讀性和可移植性較好。

      void LED_Sendbyte(uint_8 *data)

      {uint_8 i,j;

      //GPIOA組寄存器的D16位對應(yīng)PORTC0,決定PORTC0引腳

      //的控制,依次類推

      volatile uint_32 *PC=(uint_32*)0x400FF000u;

      //將一個字節(jié),送入595(數(shù)據(jù)上線)

      i=0b10000000;

      //為了取字節(jié)中的一位

      for (j = 1; j <=8 ; j++)

      //對一個字節(jié)循環(huán)

      { *PC &= ~(1<<16);

      //使CLK為0

      ((*data&i)==0)?(*PA |= 0b00010000):(*PA &=0b11101111);

      //CLK產(chǎn)生上升沿,使數(shù)據(jù)送到595移位寄存器

      *PC |= (1<<16);

      //使CLK為1

      //i右移一位,為取data_byte字節(jié)中的一位做準(zhǔn)備

      i=i>>1;

      }

      }

      4.2.2位帶技術(shù)法

      該方法是利用位帶技術(shù)訪問存儲空間,修改鏈接文件中堆棧SP地址_estack = 0x20003000-0x20,空出32個字節(jié)用于位帶區(qū),防止內(nèi)存的訪問沖突[9]。利用語句volatile uint_32 *temp=(uint_32*)0x20002FF0定義將需要送入595芯片的內(nèi)存數(shù)據(jù)存入SRAM_U位帶區(qū)的固定地址0x20002FF0處。通過位帶技術(shù)可以直接訪問位帶區(qū)所對應(yīng)的位帶別名區(qū),根據(jù)公式可以計算出SRAM_U位帶區(qū)0x20002FF0的一個字節(jié)8個位所對應(yīng)的位帶別名區(qū)的映射地址為:0x2205FE1C-0x2205FE00。程序通過對位帶別名區(qū)的地址讀取判斷,實現(xiàn)將0或1一位數(shù)據(jù)送入595芯片。

      編譯后會生成極少代碼,尤其大大減少了程序執(zhí)行的指令周期,提高程序運行速度。程序設(shè)計時可以利用宏定義預(yù)先計算出對應(yīng)的映射地址,在程序中直接使用宏,增加程序的可讀性和可維護(hù)性。

      void LED_Sendbyte( )

      {//GPIOA組寄存器的D16位對應(yīng)PORTC0,決定PORTC0引腳的

      //控制,依次類推

      volatile uint_32 *PC=(uint_32*)0x400FF000u;

      //送出第7位,送入595(數(shù)據(jù)上線)

      *PC &= ~(1<<16);

      //使CLK為0

      ((*(volatile uint_32 *) (uint_32)0x2205FE1C)==0)?(*PA |= 0b00010000):(*PA &=0b11101111);

      //CLK產(chǎn)生上升沿,使數(shù)據(jù)送到595移位寄存器

      *PC |= (1<<16);

      //使CLK為1

      //送出第6位,送入595(數(shù)據(jù)上線)

      *PC &= ~(1<<16);

      //使CLK為0

      ((*(volatile uint_32 *) (uint_32)0x2205FE18)==0)?(*PA |= 0b00010000):(*PA &=0b11101111);

      //CLK產(chǎn)生上升沿,使數(shù)據(jù)送到595移位寄存器

      *PC |= (1<<16);

      //使CLK為1

      //依次送出第5、4、3、2、1、0位,送入595(數(shù)據(jù)上線)

      //后續(xù)程序段由于篇幅關(guān)系,此處省略。重復(fù)上述程序段,只需將

      //位帶別名區(qū)的地址依次修改為: 0x2205FE14、0x2205FE10、0x2205

      //FE0C、0x2205FE08、0x2205FE04、0x2205FE00即可。

      }

      4.2.3實現(xiàn)技術(shù)性能比較

      隨著KEA128微控制器所控制的16×16點陣LED屏數(shù)量的增多,所顯示點陣漢字字節(jié)數(shù)(一塊屏幕顯示一個漢字,需要送入32字節(jié)的數(shù)據(jù)給74HC595)急劇上升,上述LED_Sendbyte“字節(jié)數(shù)據(jù)上線”函數(shù)代碼的重復(fù)運行次數(shù)會急劇增加。筆者使用Kinetis Design Studio 2.0.0編譯軟件對上述兩種程序代碼進(jìn)行編譯,下載至芯片。在KEA128芯片使用內(nèi)部時鐘運行于24 MHz時[3],以點陣LED屏顯示內(nèi)容不閃爍為標(biāo)準(zhǔn),實際測試了兩種技術(shù)方法最大所支持的點陣LED屏數(shù)量和反匯編所生產(chǎn)的機(jī)器指令數(shù)目,如表1所示。

      表1 不同技術(shù)方法性能對比

      從表1可知,位帶技術(shù)法比內(nèi)存移位法程序執(zhí)行效率提高了213%,所生成的機(jī)器指令數(shù)目減少了57%。使用位帶技術(shù)訪問內(nèi)存的程序代碼執(zhí)行效率遠(yuǎn)高于普通內(nèi)存訪問方法。在上述實際案例項目中使用位帶技術(shù)優(yōu)化代碼進(jìn)行控制掃描,使用單塊MCU就可以實現(xiàn)控制64塊點陣屏的漢字的移動顯示,從而可以節(jié)省硬件成本。

      5 結(jié) 語

      本文介紹了飛思卡爾KEA128微控制器硬件所支持的位帶技術(shù),通過實例分析驗證了技術(shù)的優(yōu)越性;給出解決多任務(wù)間共享資源的“互鎖”問題和位帶技術(shù)提高LED點陣數(shù)量的編程實際應(yīng)用案例,為其他編程人員提供參考。在嵌入式程序設(shè)計中使用位帶技術(shù),比使用普通C語言實現(xiàn)相同功能的代碼,可以提高M(jìn)CU的位操作性能,減少C代碼的指令大小,減少程序運行時間,提高了指令執(zhí)行效率。本文所采用的KEA128芯片在汽車電子應(yīng)用中會出現(xiàn)快速控制汽車電子器件的情況,使用位帶技術(shù)尤其適合嵌入式系統(tǒng)中對SRAM_U快速位操作的場合,對于在內(nèi)核資源緊張的時候可以給用戶提供一個精簡代碼和提高程序執(zhí)行速度的手段。其能夠降低總線的占用率和CPU執(zhí)行時間,降低系統(tǒng)的功耗。

      [1] 張吉豫,劉先華,譚明星,等.一種針對位操作密集應(yīng)用的擴(kuò)展指令自動選擇方法[J].電子學(xué)報,2012,40(2):209-214.

      [2] Freescale.KEA128 Sub-Family Reference Manual Rev 2[EB/OL].2014:223-240.http://www.Freescale.com.

      [3] Freescale.KEA128 Sub-Family Data Sheet Rev 4[EB/OL].2014:20-21.http://www.Freescale.com.

      [4] ARM.Cortex-M0+Devices Generic User Guide[EB/OL].2012:54-57.http://www.ARM.com.

      [5] Hilewitz Y,Lee R B.A new basis for shifters in general-Purpose processors for existing and advanced bit manipulations[J].IEEE Transactions on Computers,2009,58(8):1035-1048.

      [6] 唐飛,王陳寧,查長禮.位帶技術(shù)在STM32程序設(shè)計中的應(yīng)用[J].安慶師范學(xué)院學(xué)報:自然科學(xué)版,2014,20(1):54-57,76.

      [7] 王曉春,劉興東.嵌入式實時操作系統(tǒng)任務(wù)的同步與互斥機(jī)制[J].計算機(jī)測量與控制,2004,12(6):578-580.

      [8] 張飆.LED顯示屏控制器設(shè)計研究[J].計算機(jī)應(yīng)用與軟件,2011,28(3):188-190.

      [9] 王宜懷,朱仕浪,郭蕓.嵌入式技術(shù)基礎(chǔ)與實踐—ARM Cortex-M0+ Kinetis L系列微控制器[M].3版.北京:清華大學(xué)出版社,2013.

      ANALYSING APPLICATION OF BIT-BAND IN FREESCALE’S KEA128 MICROCONTROLLER

      Li Yuehua1,2Wang Yihuai2

      1(SchoolofComputerScienceandTechnology,NantongUniversity,Nantong226019,Jiangsu,China)2(SchoolofComputerScienceandTechnology,SoochowUniversity,Suzhou215006,Jiangsu,China)

      When developing embedded system, “read-modify-write” operations have to be used to access the memory, and this will produce at least three machine instructions, and is not suitable for the occasions requiring high implementation speed. In addition this may also lead to the problem of "interlocking" in sharing resources between multi-tasks. This paper analyses in detail the working mechanism of bit-band technique, which is provided by KEA128 microcontroller’s hardware, on bit operations of SRAM_U memory. By comparative analysis of examples and application results it is shown that the use of bit-band technology can reduce the space occupied by the code, as well as reduce the machine instruction cycle of program execution, and is suitable for programmers to use this technology in advanced programming to achieve fast "atomic operation" on bits and to improve the speed of program execution as well.

      SRAM_UBit-band regionAliased bit-band regionAtomic operationInterlock

      2015-06-16。國家自然科學(xué)基金項目(60871086);南通市應(yīng)用研究項目(BK2012068)。李躍華,副教授,主研領(lǐng)域:嵌入式與物聯(lián)網(wǎng)技術(shù)。王宜懷,教授。

      TP391

      A

      10.3969/j.issn.1000-386x.2016.10.048

      猜你喜歡
      微控制器字節(jié)中斷
      No.8 字節(jié)跳動將推出獨立出口電商APP
      No.10 “字節(jié)跳動手機(jī)”要來了?
      物聯(lián)網(wǎng)技術(shù)在微控制器實驗教學(xué)中的應(yīng)用
      電子制作(2017年14期)2017-12-18 07:07:58
      簡談MC7字節(jié)碼
      跟蹤導(dǎo)練(二)(5)
      千里移防,衛(wèi)勤保障不中斷
      解放軍健康(2017年5期)2017-08-01 06:27:44
      Atmel針對新一代物聯(lián)網(wǎng)應(yīng)用發(fā)布全新32位微控制器
      最新STM32設(shè)計工具增加對混合信號微控制器的支持
      意法半導(dǎo)體(ST)推出世界首款基于ARM Cortex-M7的STM32 F7系列微控制器
      AT89C51與中斷有關(guān)的寄存器功能表解
      金坛市| 布拖县| 日喀则市| 康保县| 玉田县| 福清市| 汨罗市| 惠州市| 冷水江市| 黄梅县| 吉首市| 青州市| 郯城县| 龙海市| 锦州市| 酉阳| 通城县| 南汇区| 北安市| 昌图县| 黔南| 永顺县| 寻甸| 监利县| 辽宁省| 平安县| 樟树市| 拜泉县| 滦南县| 松江区| 浦北县| 龙江县| 永兴县| 淮北市| 措勤县| 温州市| 霍邱县| 都安| 福鼎市| 三台县| 皮山县|