《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > DSP編程技巧之:不得不看的編譯指示

DSP編程技巧之:不得不看的編譯指示

2015-09-18
關鍵詞: DSP 編程技巧

  編譯指示(Pragma Directives)可能是所有的預處理指令中最復雜的了,它的作用是設定編譯器的狀態或者是指示編譯器完成一些特定的動作。#pragma指令對編譯器給出了如何處理特定的函數、對象和代碼段的方法,在保持與C/C++語言完全兼容的情況下,給出主機(比如C28x)或操作系統(比如DSP/BIOS)專有的特征。這些編譯指示的使用較為復雜,但是我們還必須要了解它們,因為它們是程序中必不可少的東西,例如#pragma DATA_SECTION ( symbol , " section name ");這樣的。但是往往講解它們的資料又不多(因為大部分資料集中在入門指南上面),所以在此我們就總結一下針對C28x編譯器的pragma指令,再遇到它們的時候就不會一頭霧水了。
  1. CHECK_MISRA
  它的作用與在編譯器選項中使用--check_misra是相同的,都是對特定源文件使能MISRA-C:2004規則檢查(汽車工業軟件可靠性聯會),使用方法是:
  #pragma CHECK_MISRA (" {all|required|advisory|none|rulespec} ");
  其中的rulespec是具體MISRA中的規則,使用方法請參考DSP編程技巧之12-揭開編譯器神秘面紗之代碼規范MISRA-C。
  2. CLINK
  CLINK指令可用于某段代碼或者某個數據符號,使用之后會在包含被作用符號的段中產生一個.clink指示,表明在條件鏈接的情況下,如果這個段沒有被其它任何段引用的話,這個段可以被移除,從而減小鏈接輸出文件的尺寸。使用方法是:
  #pragma CLINK (symbol )
  3. CODE_ALIGN
  CODE_ALIGN用來沿著特定的對齊參數constant來對齊函數(從而可以讓CPU更快尋址,更快執行指令)。當我們希望函數從特定的邊界開始的時候,這個指令非常有用。參數constant必須是2的冪(偶數對齊),使用方法是:
  C代碼: #pragma CODE_ALIGN ( func, constant );
  C++代碼: #pragma CODE_ALIGN ( constant );
  注:在本文中,在C和C++代碼中,指令使用方法一樣時,不分別寫出,如不一樣則分C代碼和C++代碼分別寫出。C代碼中的#pragma指令一般需指定函數名,也即其作用域;C++代碼中的#pragma指令一般不帶有函數名,其作用域為緊鄰該指令后面的函數;下同。
  4. CODE_SECTION
  CODE_SECTION是較為常見的指令,默認情況下,代碼被存放在.text段中,使用此指令則用來指定并改變某段代碼所分配的段,其使用方法是:
  C代碼: #pragma CODE_SECTION (symbol , "section name ")
  C++代碼: #pragma CODE_SECTION (" section name ")
  例如:
  char bufferA[80];
  char bufferB[80];
  #pragma CODE_SECTION(funcA, "codeA")
  char funcA(int i);
  char funcB(int i);
  void main()
  {
  char c;
  c = funcA(1);
  c = funcB(2);
  }
  char funcA (int i)
  {
  return bufferA[i];
  }
  char funcB (int j)
  {
  return bufferB[j];
  }

  5. DATA_SECTION
  DATA_SECTION可能是使用最多的pragma指令了,它用來定義存儲某個符號所使用的段,使用方法是:
  C代碼: #pragma DATA_SECTION ( symbol , " section name ");
  C++代碼: #pragma DATA_SECTION (" section name ");
  例如:
  #pragma DATA_SECTION(bufferB, "my_sect")
  char bufferA[512];
  char bufferB[512];
  6. 與診斷信息有關的Pragma
  診斷信息一般包括:提醒,警告,錯誤和不提示等幾個級別,使用與診斷信息有關的Pragma和使用相關的編譯器選項的結果是一樣的,其使用方法以及們的對應關系如下:
  Pragma對應的編譯器選項
  有關診斷信息的含義,請參考DSP編程技巧之7---揭開編譯器神秘面紗之預處理與診斷。
  7. FAST_FUNC_CALL
  使用這個指令,會在編譯時調用快速匯編指令FFC,而不是傳統的CALL指令來完成函數的跳轉,其使用方法是:
  #pragma FAST_FUNC_CALL ( func );
  它的使用范圍是受限的:僅限于調用返回LB *XAR7指令的匯編程序。例如:
  ;匯編程序
  _add_long:
  ADD ACC, *-SP[2]
  LB *XAR7
  //調用匯編的C程序
  #pragma FAST_FUNC_CALL (add_long);
  long add_long(long, long);
  void foo()
  {
  long x, y;
  x = 0xffff;
  y = 0xff;
  y = add_long(x, y);
  }
  除此之外,如果使用該指令,編譯器會輸出警告信息,并忽略其指示。
  8. FUNC_EXT_CALLED
  在我們啟用程序級別的優化選項時(-O3),所有未直接或者簡介被main函數調用的函數都將被優化掉,但是這些函數也有可能被我們定義的某些匯編代碼使用到,所以使用FUNC_EXT_CALLED可以在編譯時保留這些代碼,其使用方法是:
  C代碼: #pragma FUNC_EXT_CALLED ( func );
  C++代碼: #pragma FUNC_EXT_CALLED;

  9. FUNCTION_OPTIONS
  使用這個選項可以在編譯C/C++代碼中的某些函數時,使用額外的編譯器的命令行選項,實現與在命令行中輸入相關的命令同樣的效果。其使用方法是:
  C代碼: #pragma FUNCTION_OPTIONS ( func, "additional options" );
  C++代碼: #pragma FUNCTION_OPTIONS( "additional options" );
  10. INTERRUPT
  使用這個選項可以在C代碼中直接操作中斷,其使用方法是:
  C代碼: #pragma INTERRUPT ( func );
  C++代碼: #pragma INTERRUPT ;
  被該指令直接操作的函數將使用IRP(中斷返回指針)來返回值。
  在使用FPU時,中斷分為兩種:高優先級中斷HPI和低優先級中斷LPI,其中HPI使用快速的上下文存儲機制,不能被嵌套,LPI則與普通的C28x中斷機制一樣,并且可以被嵌套。此時可以增加第二個參數來控制:
  C代碼: #pragma INTERRUPT ( func , {HPI|LPI} );
  C++代碼: #pragma INTERRUPT ( {HPI|LPI} );
  在DSP/BIOS和SYS/BIOS HWI對象中,不能使用INTERRUPT指令,因為Hwi_enter/Hwi_exit宏和Hwi解包器已經包含了該函數,此時使用該指令會產生負面的效果。
  11. MUST_ITERATE
  使用這個指令的情況下,我們確信某個for循環能夠執行指定的次數。使用這個指令能夠幫助編譯器確定循環的次數和最佳的實現方式,從而減小代碼的尺寸。其使用方法是:
  #pragma MUST_ITERATE ( min, max, multiple );
  min是循環的最小次數,max是最大執行次數,multiple則是循環次數的整數倍,如果這其中某個參數不存在,則可以省略,例如:
  #pragma MUST_ITERATE(5); /* 最少循環5次 */
  #pragma MUST_ITERATE(5, , 5); /* max參數省略;循環次數是5的倍數次(至少1倍) */
  pragma MUST_ITERATE(8, 48, 8);
  /* 循環此時可能為8, 16, 24, 32, 40, 48 */
  12. NO_HOOKS
  該指令阻止在調用函數時自動產生進入鉤子和退出鉤子,使用方法是:
  C代碼: #pragma NO_HOOKS ( func );
  C++代碼: #pragma NO_HOOKS;


  13. RESET_MISRA
  顧名思義,這個指令會把MISRA-C:2004規則檢查恢復到它原先的設定狀態。例如,某條規則在命令行里被使能,但是在某段代碼中被屏蔽了(某些原因導致它無法通過規則檢查),使用該指令會規則檢查重新使能。使用方法是:
  #pragma RESET_MISRA (" {all|required|advisory|rulespec} ")
  14. RETAIN
  使用這個指令,可以避免某些符號在條件鏈接時被優化掉,從而在輸出文件中保留它。使用方法是:
  #pragma RETAIN ( symbol )
  這個指令與我們的第二條,CLINK的效果是整好相反的。
  15. SET_CODE_SECTION與SET_DATA_SECTION
  這兩條指令用來設置其后所有聲明的段。使用方法是:
  C代碼: #pragma SET_CODE_SECTION ("section name")
  C++代碼: #pragma SET_DATA_SECTION ("section name")
  例如:
  #pragma SET_DATA_SECTION("mydata")
  int x;
  int y;
  #pragma SET_DATA_SECTION()
  其中的x和y都被會放入我們指定的段mydata中,直到我們使用空參數SET_DATA_SECTION(),之后的代碼或數據才會被放入默認的段之中。
  16. UNROLL
  UNROLL是“攤開”的意思,這個指令與for/while相關,意思是把n次的循環給展開,從而有個n份同樣的代碼。循環展開,是一種犧牲程序的尺寸來加快程序的執行速度的優化方法??梢允謩泳幊掏瓿桑部捎删幾g器自動優化完成。循環展開通過將循環體代碼復制多次實現。循環展開能夠增大指令調度的空間,減少循環分支指令的開銷。循環展開可以更好地實現數據預取技術。其使用方法是:
  #pragma UNROLL( n );
  只有在編譯器認為n是安全的(即展開之后確實都能執行),才能執行此操作。

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美日韩中文| 日韩视频在线一区| 91久久精品国产91久久| 欧美亚洲视频一区二区| 日韩午夜免费| 亚洲一区二区网站| 亚洲性图久久| 欧美精品18| 国产主播一区| 久久欧美中文字幕| 欧美日韩一区二区三区在线| 亚洲第一色中文字幕| 久久aⅴ国产紧身牛仔裤| 裸体丰满少妇做受久久99精品| 欧美调教视频| 国产一区二区三区四区| 亚洲精品一区二区三区在线观看| 亚洲女人av| 国产精品美女| 久久久av网站| 日韩视频在线一区二区三区| 欧美亚洲综合网| 精品二区视频| 亚洲欧美日韩中文播放| 欧美在线1区| 国产日韩精品一区| 亚洲电影有码| 国产一区av在线| 欧美一区二区视频观看视频| 国产一区二区三区久久久| 久久久综合香蕉尹人综合网| 亚洲国产婷婷| 中国日韩欧美久久久久久久久| 欧美系列电影免费观看| 在线免费观看一区二区三区| 国产一区二三区| 欧美一区二区啪啪| 激情综合网址| 亚洲欧美激情一区| 欧美天堂亚洲电影院在线观看| 一区二区三区.www| 欧美色视频一区| 国产亚洲女人久久久久毛片| 欧美日韩国产首页| 久久综合国产精品| 一本到高清视频免费精品| 欧美a级一区| 欧美日韩成人综合天天影院| 免费成人在线观看视频| 久久久久久亚洲精品不卡4k岛国| 欧美一区二区在线看| 影音先锋久久| 亚洲一区3d动漫同人无遮挡| 欧美日韩综合视频网址| 欧美三级午夜理伦三级中文幕| 亚洲在线一区二区三区| 亚洲理论在线观看| 欧美一区二区国产| 国产综合视频在线观看| 久久久亚洲综合| 亚洲网站视频| 久久精品夜夜夜夜久久| 久久久久99| 国产一区二区三区在线观看精品| 欧美极品在线视频| 永久域名在线精品| 亚洲一区在线直播| 另类av一区二区| 国产一区二区三区在线免费观看| 一本一本久久a久久精品综合麻豆| 91久久久久久久久久久久久| 欧美性色综合| 欧美在线观看www| 欧美日韩国产免费| 亚洲二区视频| 亚洲一区二区视频| 欧美大片在线看免费观看| 尤妮丝一区二区裸体视频| 欧美激情四色| 欧美精选在线| 国产午夜精品一区二区三区视频| 亚洲视频在线观看网站| 娇妻被交换粗又大又硬视频欧美| 亚洲人成人77777线观看| 亚洲精品久久久久久久久久久久| 欧美母乳在线| 久久久久国产精品麻豆ai换脸| 很黄很黄激情成人| 国产精品白丝黑袜喷水久久久| 欧美精品久久天天躁| 最新日韩精品| 国产精品影院在线观看| 欧美激情导航| 欧美精品日韩综合在线| 欧美激情视频网站| 亚洲影院在线| 国产欧美日韩三级| 亚洲精品欧美精品| 国产精品亚洲一区二区三区在线| 亚洲毛片在线看| 久久精品夜夜夜夜久久| 欧美日韩国产成人精品| 欧美在线播放高清精品| 久久久久久久久久码影片| 国产一区二区三区不卡在线观看| 一本色道久久综合亚洲精品按摩| 久久大香伊蕉在人线观看热2| 亚洲欧美激情诱惑| 亚洲国产成人久久| 欧美日韩在线一区二区三区| 亚洲人午夜精品| 亚洲桃色在线一区| 精品88久久久久88久久久| 欧美三级欧美一级| 激情视频一区二区三区| 亚洲精品国偷自产在线99热| 亚洲视频在线一区观看| 99国产精品视频免费观看一公开| 亚洲婷婷国产精品电影人久久| 欧美在线黄色| 欧美激情无毛| 欧美手机在线视频| 亚洲免费久久| 欧美mv日韩mv国产网站app| 亚洲午夜精品久久久久久app| 午夜久久资源| 亚洲国产婷婷| 午夜精品久久久久久久男人的天堂| 久久av一区二区三区亚洲| 国产女主播视频一区二区| 亚洲美女免费精品视频在线观看| 欧美大片在线观看一区| 国产精品豆花视频| 狼人天天伊人久久| 日韩午夜电影在线观看| 国产精品一区二区在线| 欧美一区二区三区啪啪| 一区二区视频免费完整版观看| 欧美大色视频| 久久久精品五月天| 欧美精品尤物在线| 亚洲激情电影在线| 国产精品美女久久久久久久| 欧美精品在线播放| 欧美激情一区二区三区成人| 国产日韩在线视频| 国产欧美日本| aa国产精品| 国产日韩在线不卡| 日韩性生活视频| 国产亚洲在线| 久久精品91| 巨胸喷奶水www久久久免费动漫| 欧美黑人在线观看| 欧美精品一区二区高清在线观看| 国产精品国产三级国产普通话三级| 精品99一区二区| 蜜臀99久久精品久久久久久软件| 国产一区视频在线观看免费| 久久精品在线观看| 日韩一级裸体免费视频| 久久精品国产99国产精品| 欧美激情第3页| 欧美丰满高潮xxxx喷水动漫| 伊人久久大香线| 亚洲福利视频免费观看| 亚洲少妇在线| 久久久久久999| 国产精品一区视频网站| 亚洲二区视频| 国产喷白浆一区二区三区| 亚洲色诱最新| 亚洲看片免费| 亚洲一区二区在线播放| 99国内精品久久| 99re6热在线精品视频播放速度| 久久久一本精品99久久精品66| 欧美一区日韩一区| 欧美午夜精品久久久久久久| 欧美精品久久久久a| 在线观看欧美日韩| 99亚洲视频| 国内自拍视频一区二区三区| 狠狠色狠狠色综合日日91app| 欧美精品粉嫩高潮一区二区| 亚洲福利在线看| 国产日韩精品一区观看| 国产三级精品三级| 国产精品www.| 精品不卡视频| 久久一区中文字幕| 一区二区三区久久久| 国产精品久久久久99| 在线免费精品视频| 欧美一区二区视频观看视频| 红桃视频一区| 国产精品久久97| 一区一区视频| 欧美好骚综合网| 欧美日韩性生活视频| 中国女人久久久| 国产亚洲制服色| 在线观看视频一区二区欧美日韩| 亚洲免费在线电影| 久久在线免费观看| 久久综合久色欧美综合狠狠| 亚洲欧美日韩综合一区| 欧美国产精品专区| 欧美高清你懂得| 久久久久成人精品| 欧美丝袜一区二区| 美女黄毛**国产精品啪啪| 国产精品日韩精品| 久久亚洲欧美国产精品乐播| 国产欧美一区二区精品秋霞影院| 欧美18av| 欧美日韩在线观看一区二区三区| 久久尤物视频| 国产亚洲日本欧美韩国| 国产精品麻豆va在线播放| 性色av一区二区三区| 久久综合久色欧美综合狠狠| 亚洲精品综合精品自拍| 国产一区二区三区免费观看| 久久久久久网站| 欧美福利在线观看| 亚洲欧美日韩国产成人精品影院| 亚洲一区免费| 国产精品国产亚洲精品看不卡15| 国产日韩精品在线观看| 久久精品人人做人人综合| 国产亚洲成精品久久| 亚洲欧美经典视频| 在线不卡免费欧美| 久久久久久久久久码影片| 亚洲欧美日韩国产一区| 久久国产精品久久久久久久久久| 久久综合久久综合九色| 亚洲黄页视频免费观看| 欧美aⅴ99久久黑人专区| 国产免费一区二区三区香蕉精| 在线精品视频免费观看| 亚洲久久在线| 国产亚洲女人久久久久毛片| 噜噜爱69成人精品| 羞羞答答国产精品www一本| 亚洲伊人色欲综合网| 国产精品久久久久av免费| 国产欧美日韩亚州综合| 欧美日韩在线一区二区| 香蕉成人啪国产精品视频综合网| 欧美精品一卡| 在线观看视频免费一区二区三区| 国产精品国色综合久久| 欧美日韩综合网| 欧美国产一区视频在线观看| 国产一区二区电影在线观看| 激情欧美一区二区| 亚洲国产精品黑人久久久| 亚洲作爱视频| 国产美女一区| 亚洲精品视频啊美女在线直播| 国产一区二区高清视频| 亚洲高清资源综合久久精品| 91久久香蕉国产日韩欧美9色| 国产乱理伦片在线观看夜一区| 国产精品中文在线| 亚洲一区二区综合| 在线日本成人| 亚洲影视在线播放| 国产欧美69| 欧美日韩免费高清一区色橹橹| 亚洲第一免费播放区| 欧美一区二区视频观看视频| 国产精品久久久久久av下载红粉| 欧美在线综合视频| 欧美日产国产成人免费图片| av成人福利| 久久中文字幕导航| 欧美一区二区三区视频免费| 国产亚洲午夜高清国产拍精品| 精品69视频一区二区三区| 久久伊伊香蕉| 国产精品久久久| 99riav1国产精品视频| 欧美一级片在线播放| 欧美三级午夜理伦三级中文幕| 午夜精品久久久久久久白皮肤| 欧美大片国产精品| 欧美日韩中文精品| 中文一区字幕| 欧美日本一道本| 麻豆精品一区二区av白丝在线| 伊人久久婷婷色综合98网| 亚洲免费观看高清完整版在线观看熊| 欧美激情综合网| 狠狠网亚洲精品| 一本色道久久综合亚洲精品高清| 欧美成人综合网站| 欧美紧缚bdsm在线视频| 99视频有精品| 亚洲第一中文字幕在线观看| 国产主播一区二区| 永久91嫩草亚洲精品人人| 欧美精选午夜久久久乱码6080| 浪潮色综合久久天堂| 欧美 日韩 国产一区二区在线视频| 免费不卡在线观看av| 国产精品黄色在线观看| 性欧美办公室18xxxxhd| 国产亚洲午夜高清国产拍精品| 亚洲国产成人porn| 久久久精品国产免费观看同学| 欧美一区二区在线免费观看| 亚洲天堂av在线免费观看| 欧美国产日韩一区二区三区| 欧美在线影院| 国产精品狼人久久影院观看方式| 亚洲精品久久久久久一区二区| 久久精品视频在线看| 欧美sm极限捆绑bd| 久久久.com| 国产视频在线一区二区| 欧美日韩成人一区二区三区| 久久免费视频一区| 亚洲电影免费在线观看| 欧美日韩国产免费| 国产精品电影在线观看|