《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > DSP編程技巧之:非?!瓣P鍵”的關鍵字

DSP編程技巧之:非?!瓣P鍵”的關鍵字

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

  什么是“關鍵字”?關鍵字就是已被C語言本身使用,不能作其它用途使用的字,例如關鍵字不能用作變量名、函數名等。那“關鍵字”到底有多關鍵?簡單得說,就是如果不掌握它們的使用方法,程序就不能按照我們的設計產生預期的結果。C28x的編譯器支持所有的標準C89的關鍵字,包括const、volatile和register,標準的C99關鍵字,包括inline和restrict,以及支持TI自定義的擴展關鍵字__cregister、__asm,和__interrupt;對于FPU的操作,還支持restrict關鍵字。接下來我們就看一下幾個常用關鍵字的用法,包括const,cregister,far,__interrupt等。在前面的一篇文章DSP編程技巧之15-使用代碼優化時必須考慮的五大問題中,我們已經描述了volatile和restrict的用法,在此不再重復描述。
  1. const
  const關鍵字用來定義值不會發生變化/不允許被改變的變量、數組等,即相當于這些變量、數組是“只讀”的。通常情況下,const定義的全局變量會存放在cmd文件定義的.const段中,而.const段一般會被鏈接器分配到ROM或者FLASH存儲,而不是RAM中;考慮到片上ROM/FLASH的空間通常比RAM的空間大,且RAM的空間經常會比較緊張,這種存儲分配方式是很有優勢的。但是在兩種情況下const定義的全局變量仍然會被分配到RAM的地址空間中,包括:
  1) 使用const定義變量的同時還使用了volatile關鍵字,例如volatile const int x,volatile類型的變量是默認存放在RAM中的,volative const也會被分配到RAM中;程序中無法對volative const定義的常量進行修改(但是某些情況下外部程序可以對其修改)。
  2) 在函數的作用域內,對象被自動的存儲。
  在使用const關鍵字的時候,其位置是非常重要的,例如:
  int * const p = &x; //指針p為constant類型(p不可變),指向的內容為可變的int類型變量
  const int * q = &x; //指針q為可變的,指向constant的int類型
  使用const關鍵字,我們可以定義內容較多的常數型數據表(例如一個100點的自定義數學表),并把它們分配到ROM/Flash中,例如
  const int digits[] = {0,1,2,3,4,5,6,7,8,9};
  通常情況下我們會直接使用#define來預定義某些符號的值,那#define與const的區別是什么? const定義的只讀變量在程序運行過程中只有一份拷貝(比如它存放在ROM中,有固定的地址),而#define定義的宏常量在內存中有若干個拷貝。#define宏是在預編譯階段進行替換,而const修飾的只讀變量是在編譯的時候確定其值。#define宏沒有類型,而const修飾的只讀變量具有特定的類型(該是啥類型還是啥類型,只不過其值為只讀的)。const 的好處是引入了常量的概念,讓我們不要去修改不該修改的內存;當我們不小心嘗試改變const變量的值時,編譯器就可以給出相關的錯誤信息提醒我們了。

  2. cregister
  使用cregister關鍵字,當我們定義的該類型的對象與C28x的標準的控制寄存器匹配時,編譯器會自動產生相關的代碼去控制對應的寄存器,使得我們可以在高級編程語言C/C++中對寄存器進行控制;如果不匹配則產生編譯器錯誤。目前可匹配此類型的寄存器包括:
  其定義方式為;
  extern cregister volatile unsigned int IFR;
  extern cregister volatile unsigned int IER;
  cregister類型只能對整形或者指針類型進行定義,并且只在本文件的作用域內生效,它既不能在函數內定義,也不能被用在浮點類型、結構體或者共同體類型上面。如果cregister類型定義的變量是可以被外部控制修改的,那么該變量也必須同時使用volatile類型進行聲明。
  在定義了寄存器之后,我們就可以直接使用寄存器的名字了,但是還有以下的限制(如果不按照規范來,則會有“Illegal use of control register”的錯誤提示):
  1)IFR是不能直接寫的,它的置位操作只能通過“或”操作(操作符是|)進行修改,且操作數必須是立即數,它的復位操作只能被“與”操作(操作符是&)進行修改,例如:
  IFR |= 0x4;
  IFR &= 0x0800
  2)IER寄存器除了通過“或”操作或者“與”操作進行修改之外,也可直接賦值,例如:
  IER = x;
  IER |= 0x100;
  printf("IER = %x\n", IER);
  3. far
  默認情況下,C/C++的編譯器只支持到低64K的存儲空間,且所有的指針都默認為16位的。但是C28x的存儲空間一般都在16bit以上,此時通過使用far類型,C代碼中的指針可以為22bit寬(需要兩個存儲單元來存儲),并支持對高達4M的存儲空間的存取。(在C++中,不支持far關鍵字,對高地址的存取是通過使用在編譯器選項中開啟large memory model選項實現的。)

  當一個變量被定義為far類型時,它被存儲在高于64K的地址范圍中,此時far類型的全局變量不再保存在.bss段中,而是保存在一個新的段,即.ebss中,相同的道理,far類型的const變量也被保存到.econst段中。注意:只有全局變量和靜態變量可以被定義為far類型,函數中的非靜態變量(自動存儲對象)因為被分配到棧中,被自動當near類型來處理。對于結構體,如果結構體被聲明為far類型,則全部成員都會自動繼承為far類型。舉例如下;
  int far *ptr; // 指針指向far類型的int,但是指針本身是near類型的
  int * far ptr; // 指針指向near類型的int,但是指針本身是far類型的
  int far * far ptr; //指針和指向的內容都是far類型的
  int far *memcpy_ff(far void *dest, const far void *src, int count);
  // 函數的參數為兩個far類型的指針,且返回值也為far類型的指針
  int *far func();// 錯誤:far類型只能用于數據,不能用于函數
  //因為程序地址空間本身就是22位的
  最后需要注意的是,目前對于兩個far類型指針相減的操作,其結果是16位的指針。
  4. _interrupt
  __interrupt用來聲明一個函數是中斷處理函數;在嚴格的ANSIC/C++模式下,也可以使用interrupt關鍵字來代替。中斷處理函數要遵循特殊的寄存器保存規則和退出順序,從而保證代碼的安全。在C/C++程序中產生中斷時,所有被中斷子程序使用,或者被中斷子程序調用的函數使用的狀態都需要被保留。此外,__interrupt定義的函數不能有參數,也沒有返回值,即:
  __interrupt void int_handler()
  {
  unsigned int flags;
  ...
  }
  唯一特殊的是c_int00函數,它是C/C++程序的入口點,被系統保留為默認的復位中斷函數,并在其中調用main函數。因為c_int00函數不被任何函數所調用,所以它不需要保存任何狀態(畢竟是在復位和初始化狀態)。
  在DSP/BIOS和SYS/BIOS HWI對象中,不需要使用__interrupt關鍵字,因為Hwi_enter/Hwi_exit宏和Hwi解包器已經包含了該函數,此時使用__interrupt關鍵字會產生負面的效果。

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話: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>
          老司机午夜免费精品视频| 久久都是精品| 欧美韩国一区| 欧美成人小视频| 欧美日韩激情小视频| 亚洲国产精品久久久久秋霞影院| 久久久久国产一区二区三区四区| 一区在线电影| 午夜欧美理论片| 国产一区二区三区在线观看视频| 国产九色精品成人porny| 久久精品中文字幕免费mv| av成人动漫| 久久精品1区| 久久精品噜噜噜成人av农村| 欧美日韩精品伦理作品在线免费观看| 久久性天堂网| 久久视频在线视频| 女女同性女同一区二区三区91| 亚洲视频1区| 亚洲免费影视第一页| 夜夜嗨av一区二区三区网页| 欧美日韩国产综合久久| 欧美成人午夜剧场免费观看| 国产精品久久久99| 国产精品h在线观看| 欧美日韩国产精品一区| 国产精品毛片va一区二区三区| 嫩草影视亚洲| 亚洲高清网站| 亚洲国产老妈| 欧美中日韩免费视频| 一区二区欧美日韩| 亚洲激情一区二区三区| 日韩一区二区电影网| 久久夜色精品一区| 亚洲欧美在线网| 免费在线一区二区| 国产精品大片免费观看| 久久网站免费| 欧美日韩国内自拍| 亚洲片区在线| 老司机免费视频久久| 欧美69视频| 亚洲精品日韩精品| 国产精品福利av| 欧美成人精品不卡视频在线观看| 蜜桃av一区二区在线观看| 韩日午夜在线资源一区二区| 日韩视频一区| 国产精品久久婷婷六月丁香| 欧美freesex交免费视频| 一本色道**综合亚洲精品蜜桃冫| 欧美电影专区| 国产精品一区二区黑丝| 美女日韩欧美| 国产美女扒开尿口久久久| 亚洲一区二区三区精品在线| 尤物九九久久国产精品的特点| 性欧美video另类hd性玩具| 欧美日韩在线一区二区三区| 欧美日韩你懂的| 国产精品美女在线观看| 欧美高清在线观看| 亚洲大胆人体在线| 一区二区日韩欧美| 久久精品日韩| 亚洲在线第一页| 久久久久一本一区二区青青蜜月| 免费在线欧美视频| 久久影视三级福利片| 欧美成人福利视频| 亚洲欧美日韩国产中文| 欧美成人一区二免费视频软件| 99精品视频免费| 欧美精品一区二区精品网| 欧美激情综合亚洲一二区| 亚洲一区视频在线观看视频| 国产亚洲女人久久久久毛片| 亚洲激情欧美激情| 国产精品久久久久久影视| 国产精品福利久久久| 裸体丰满少妇做受久久99精品| 欧美精品一区二区三| 狂野欧美一区| 国产欧美精品| 黄页网站一区| 国产欧美婷婷中文| 亚洲视频精品在线| 欧美大片免费久久精品三p| 欧美精品日本| 国产精品久久久久av免费| 欧美视频二区| 国产一区二区三区四区五区美女| 欧美日韩精品一区二区三区| 欧美日韩一区二区三区四区在线观看| 亚洲视屏在线播放| 在线成人中文字幕| 欧美日韩免费高清一区色橹橹| 亚洲综合色婷婷| 久久久伊人欧美| 亚洲国产日韩在线| 激情一区二区| 一区二区日本视频| 亚洲欧美日韩电影| 亚洲精品1区| 欧美激情一区二区| 国产精品一区二区久久久久| 国模叶桐国产精品一区| 久久精品国产综合精品| 黑丝一区二区| 欧美a级理论片| 欧美日本韩国在线| 另类av一区二区| 欧美 亚欧 日韩视频在线| 在线免费观看日本一区| 欧美电影在线观看完整版| 欧美片第一页| 你懂的亚洲视频| 欧美在线视频观看| 欧美日韩1234| 国产在线日韩| 老**午夜毛片一区二区三区| 国产精品国产成人国产三级| 欧美成在线观看| 狠狠色狠狠色综合系列| 欧美大片一区二区三区| 欧美高清你懂得| 国产精品初高中精品久久| 久久99在线观看| 久久不射2019中文字幕| 免费不卡视频| 久久久久久久一区| 欧美亚洲一区| 国产欧美日韩在线播放| 欧美午夜视频在线| 国产精品家庭影院| 亚洲美女精品久久| 亚洲精品视频在线观看免费| 欧美伦理91i| 欧美国产成人在线| 亚洲午夜精品久久久久久浪潮| 国产精品黄视频| 久久se精品一区二区| 国产精品亚洲产品| 欧美国产日韩二区| 久久综合99re88久久爱| 欧美日韩亚洲成人| 国产精品久久久对白| 欧美国产日韩免费| 久久婷婷av| 欧美激情一区二区三区不卡| 欧美在线啊v一区| 亚洲在线视频免费观看| 亚洲午夜精品在线| 欧美一区二区三区精品电影| 日韩午夜黄色| 一区二区三区在线视频播放| 午夜精品影院在线观看| 免费欧美高清视频| 欧美视频一区二区三区四区| 亚洲精品一区在线| 最新成人av网站| 欧美日韩精品免费观看视频| 狠狠色噜噜狠狠色综合久| 亚洲精品美女在线观看| 日韩视频免费大全中文字幕| 欧美亚洲动漫精品| 国产精品第三页| 一区二区电影免费观看| 国模套图日韩精品一区二区| 久久精品在线视频| 国产一区二区三区日韩| 欧美日本在线| 亚洲人成网站在线观看播放| 欧美成人精品福利| 国产欧美另类| 在线欧美福利| 一区二区电影免费观看| 136国产福利精品导航| 久久综合狠狠综合久久综青草| 日韩亚洲在线观看| 国产一区二区成人久久免费影院| 久久影视三级福利片| 欧美日韩成人一区二区| 欧美成人伊人久久综合网| 欧美精品乱码久久久久久按摩| 欧美一级专区免费大片| 91久久精品国产91久久性色tv| 国产日韩欧美亚洲一区| 国产精品久久久久9999吃药| 免费久久99精品国产自| 在线精品视频一区二区| 韩国精品主播一区二区在线观看| 久久精品2019中文字幕| 亚洲精品视频在线看| 久久亚洲综合| 亚洲国产精品热久久| 亚洲精品免费在线观看| 欧美在线免费播放| 亚洲第一色在线| 日韩一二在线观看| 欧美日韩1区2区3区| 欧美午夜宅男影院在线观看| 国产伦精品一区二区三区高清版| 国产亚洲精品v| 国产精品美女久久久久久2018| 久久国产精品久久久| 一区二区三区国产| 欧美激情亚洲激情| **欧美日韩vr在线| 在线日韩欧美视频| 国产精品久久久久一区二区| 亚洲伦理自拍| 国产亚洲精品综合一区91| 欧美一区二区| 亚洲三级电影在线观看| 亚洲国产成人久久综合一区| 日韩一级精品视频在线观看| 国内外成人免费激情在线视频| 免费黄网站欧美| 99re6这里只有精品| 欧美一区二区国产| 91久久夜色精品国产网站| 国产精品v亚洲精品v日韩精品| 欧美日韩国产综合视频在线观看| 99在线|亚洲一区二区| 亚洲欧美在线免费| 久久久亚洲国产天美传媒修理工| 国产亚洲视频在线观看| 亚洲最快最全在线视频| 欧美在线一区二区三区| 久久免费视频网| 伊人久久噜噜噜躁狠狠躁| 亚洲嫩草精品久久| 99re6这里只有精品视频在线观看| 激情六月婷婷久久| 一区二区日韩精品| 伊人伊人伊人久久| 日韩一二三在线视频播| 亚洲综合好骚| 亚洲久久一区| 欧美成人精品一区| 国产欧美日韩一级| 99国产精品| 欧美激情视频一区二区三区在线播放| 久久久久88色偷偷免费| 一区二区日韩伦理片| 欧美高清在线视频| 亚洲经典在线看| 亚洲国产aⅴ天堂久久| 新67194成人永久网站| 免费高清在线视频一区·| 国产精品高潮呻吟久久| 亚洲精品在线看| 欧美日韩国产一区二区| 久久超碰97中文字幕| 性色av香蕉一区二区| 国产日韩精品一区观看| 欧美日韩第一页| 在线观看欧美激情| 国产精品二区在线| 欧美日韩视频在线一区二区| 欧美福利视频在线| 禁断一区二区三区在线| 99人久久精品视频最新地址| 日韩系列欧美系列| 久久久久久久综合色一本| 久久激情视频| 欧美日韩精品不卡| 一区二区三区在线观看视频| 欧美三级不卡| 亚洲国产天堂久久综合网| 免费观看日韩| 国产精品一区免费视频| 国产精品黄色| 欧美久久视频| 老**午夜毛片一区二区三区| 欧美视频在线观看免费| 欧美在线视频免费观看| 欧美精品色一区二区三区| 国产一区二区中文字幕免费看| 久久久噜噜噜久噜久久| 欧美在线高清视频| 看欧美日韩国产| 一区二区三区欧美视频| 欧美黄色小视频| 国产精品美女www爽爽爽视频| 国产精品嫩草99a| 国产精品a久久久久久| 亚洲欧美第一页| 久久久久这里只有精品| 欧美日韩一区三区四区| 伊人久久大香线蕉综合热线| 久久伊人亚洲| 欧美日韩成人| 久久久久久久国产| 久久久久国产一区二区三区| 日韩一区二区福利| 国产精品久久久对白| 久久精品国产69国产精品亚洲| 久久综合久久综合久久| 久久免费精品视频| 欧美一区二区三区四区在线观看地址| 蜜桃久久精品乱码一区二区| 欧美日本在线观看| 国产精品一区二区男女羞羞无遮挡| 在线观看欧美黄色| 在线亚洲观看| 99精品免费| 久久久久久久97| 欧美三区在线| 亚洲影院在线观看| 欧美少妇一区二区| 久久成人国产精品| 欧美在线一二三区| 欧美日韩在线亚洲一区蜜芽| 欧美日韩在线高清| 一区二区三区av| 国产一区二区三区日韩| 国产日韩欧美亚洲一区| 欧美大片在线观看一区| 亚洲二区在线| 欧美高清视频在线播放| 亚洲国产天堂久久国产91| 亚洲主播在线观看| 亚洲女爱视频在线| 国产日韩在线一区二区三区|