国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

DSP編程技巧之30---答疑解惑哪家強(qiáng)之(5)

發(fā)布時(shí)間:2014-12-15 12:04    發(fā)布者:看門(mén)狗
關(guān)鍵詞: DSP編程
作者:paradoxfx 來(lái)源:電子產(chǎn)品世界

29. 如果不需要printf()/sprintf()的全部特性,怎么樣才能減小代碼體積?

  初學(xué)者往往使用printf打印“Hello World”這樣的方式來(lái)完成第一個(gè)DSP編程的程序,這種方法雖然是非常直觀明了的,感覺(jué)起來(lái)功能也是非常簡(jiǎn)單的,但是一編譯結(jié)果發(fā)現(xiàn)提示棧的空間不夠,或者有“program will not fit into available memory”之類的錯(cuò)誤。這是因?yàn)闃?biāo)準(zhǔn)的printf()/sprintf()提供了非常多的特性支持,造成了在DSP上實(shí)現(xiàn)時(shí),產(chǎn)生的代碼尺寸非常大。

  此時(shí)我們可以根據(jù)需要調(diào)整不同級(jí)別的格式格式限定符,例如通過(guò)鏈接器的選項(xiàng),我們可以指定--printf_support=full, minimal或者nofloat, full為默認(rèn)參數(shù),表示支持所有的格式;nofloat不支持對(duì)浮點(diǎn)類型的數(shù)據(jù)的輸入/打印,包括%a,%A, %f, %F,%g,%G,%e和%E,支持其它的字符、定點(diǎn)格式等;minimal:對(duì)數(shù)據(jù)格式的最小支持,只包含了不指定數(shù)據(jù)寬度和精度標(biāo)志的整形、字符型或者字符串,即只支持%%,%d,%o,%c,%s和%x格式。需要注意的是,如果--printf_support使用了不支持的格式,鏈接器并不能給出特定的實(shí)時(shí)運(yùn)行庫(kù)的錯(cuò)誤提示,在使用時(shí)要仔細(xì)檢查。

  此外,如果不去指定鏈接器選項(xiàng),我們也可以修改printf函數(shù)默認(rèn)對(duì)應(yīng)的源程序_printfi.c來(lái)實(shí)現(xiàn)類似的效果,它的路徑一般在編譯器的庫(kù)函數(shù)目錄下,例如\ti\ccsv6\tools\compiler\c2000_6.2.5\lib\src。在此路徑下,有3個(gè)printf函數(shù)對(duì)應(yīng)的c程序,它們與鏈接器選項(xiàng)的對(duì)應(yīng)關(guān)系如下表所示。DSP編程技巧之30---答疑解惑哪家強(qiáng)之(5)

  由此我們也可以看出,支持全部格式的printf的源程序的大小,達(dá)到了最小格式支持下源程序大小的23倍還要多。

  30. CCS編譯器是否支持任何工業(yè)標(biāo)準(zhǔn)?

  1) 所有的TI DSP支持的C語(yǔ)言標(biāo)準(zhǔn):

  C89 (ISO/IEC 9899:1990,或者叫NSI X3.159-1989)

  C99 (ISO/IEC 9899:1999). 不完全支持。

  2) 不支持的C語(yǔ)言標(biāo)準(zhǔn):

  C11 (ISO/IEC 9899:2011)

  3) 支持的C++標(biāo)準(zhǔn):

  C++98 (ISO/IEC 14882:1998)

  C++03 (本質(zhì)是C++98的bug修復(fù))

  4) 不支持的C++標(biāo)準(zhǔn):

  C++ TR1

  C++11 (ISO/IEC 14882:2011)

  5) IEEE-754 (ISO/IEC/IEEE 60559)標(biāo)準(zhǔn):

  TI的ARM和DSP的C/C++編譯器支持32位和64位的二進(jìn)制浮點(diǎn)數(shù)運(yùn)算,能夠支持IEEE754標(biāo)準(zhǔn)中大部分特性。

  6) MISRA-C

  MISRA C是由汽車(chē)產(chǎn)業(yè)軟件可靠性協(xié)會(huì)(MISRA,motor industry software reliability association)提出的C語(yǔ)言開(kāi)發(fā)標(biāo)準(zhǔn),在控制有關(guān)的代碼中是非常有用的標(biāo)準(zhǔn)。

  7) 其它標(biāo)準(zhǔn)

  在工業(yè)領(lǐng)域中,safety安全特性在一些應(yīng)用場(chǎng)合中已經(jīng)是要求必須具備的功能了,相關(guān)的標(biāo)準(zhǔn)包括IEC61508、TÜV認(rèn)證等。目前已經(jīng)有一部分包含硬件safety特性的DSP器件了;如果使用軟件來(lái)實(shí)現(xiàn)這些特性,則目前還需要我們自己來(lái)編寫(xiě)代碼以支持這樣的特征。

  31. CCS編譯器對(duì)GCC擴(kuò)展的支持如何?

  GNU編譯器結(jié)合GCC支持許多標(biāo)準(zhǔn)ANSI/ISO C/C++所不支持的特性。在開(kāi)源應(yīng)用和Linux等開(kāi)發(fā)中,GCC的編譯器gcc和g++等都被廣泛使用。所以為了保證對(duì)GCC工具所開(kāi)發(fā)的代碼的兼容性,TI的編譯器也支持某些GCC的擴(kuò)展特性。目前支持的一些特性基本都包含在GCC4.3中,可查看:http://gcc.gnu.org/onlinedocs/gcc-4.3.6/gcc/C-Extensions.html

  32. 如何了解有關(guān)編譯/代碼產(chǎn)生工具的已知問(wèn)題,并獲得最新進(jìn)展?

  老外喜歡用IBM的ClearQuest系統(tǒng)來(lái)報(bào)告bug并分享解決方案,我們可以使用TI提供的開(kāi)放鏈接https://cqweb.ext.ti.com/cqweb/# ... t=HTML&version=cqwj來(lái)報(bào)告bug、查看/分享解決方案等,其界面如下圖所示:DSP編程技巧之30---答疑解惑哪家強(qiáng)之(5)

  避開(kāi)老舊的“傳統(tǒng)”bug的最好辦法當(dāng)然是定期升級(jí)編譯器和開(kāi)發(fā)環(huán)境了。通過(guò)配置,新版本的CCS在啟動(dòng)后會(huì)自動(dòng)檢測(cè)升級(jí)并自動(dòng)升級(jí),這也簡(jiǎn)化了我們對(duì)開(kāi)發(fā)環(huán)境的維護(hù)工作。

  33. 鏈接文件中包含那么多個(gè)段,有什么快速識(shí)別的方法?

  把下面這個(gè)例子記牢就好了:

  //

  // Global variables x & y ==> .ebss

  // Initial values 2 & 7 ==> .cinit

  //

  int x = 2;

  int y = 7;

  void main()

  {

  long z; // Local variable => .stack

  z = x + y; // Code => .text

  }

  34. 為什么我們需要鏈接文件.cmd?為何編譯器不能自動(dòng)分配存儲(chǔ)空間并進(jìn)行內(nèi)存管理?

  在操作系統(tǒng)存在的情況下,這些工作確實(shí)不需要我們花費(fèi)太多的心思。但是在嵌入式的DSP處理中,這樣做的主要原因是處理能力和存儲(chǔ)空間是十分有限的,必須要我們進(jìn)行一定的介入,例如我們需要考慮的因素包括:

  1) 運(yùn)行速度:在RAM中比在Flash中快,在Flash中又比在外部存儲(chǔ)器(使用XINTF)中快。

  2) 代碼是否需要存儲(chǔ)在非易失的存儲(chǔ)器中(例如Flash)?

  3) 任務(wù)是否是時(shí)間關(guān)鍵的?例如需要把某個(gè)時(shí)間關(guān)鍵的ISR被保存在Flash中,然后運(yùn)行時(shí)復(fù)制到RAM里。

  4) 一些RAM可被DMA模塊所訪問(wèn),而另一些則不行。

  5) 使用單獨(dú)的物理RAM模塊來(lái)避免資源的沖突。例如,在C2000 DSP中,RAM模塊都是在單個(gè)機(jī)器周期內(nèi)只能訪問(wèn)一次的SARAM(Single-access RAM)。

  6) 資源是否位于外部存儲(chǔ)器中?

  7) 代碼是否需要保存在包含緩存或者預(yù)讀的存儲(chǔ)器中以提高性能?在C2000DSP中,我們幾乎見(jiàn)不到緩存或者預(yù)讀的概念,它們一般出現(xiàn)在包括ARM處理器的器件中。

  8) 存儲(chǔ)器在程序空間、數(shù)據(jù)空間中是否具有等待狀態(tài)?

  9) 是否有需要被代碼安全模塊CSM所保護(hù)的代碼?CSM并不能保護(hù)所有的代碼空間。

  以上這些因素,在我們編程時(shí)也是需要特別關(guān)注,甚至是較為頭疼的事情,顯然讓編輯器去自動(dòng)實(shí)現(xiàn)它們,在目前階段是不可能的(除非編譯器的算法有一天能實(shí)現(xiàn)一定程度的人工智能)。所以在現(xiàn)階段,我們需要使用鏈接器命令文件cmd去描述每個(gè)段所需要使用的內(nèi)存情況。

  如果我們沒(méi)有把某一個(gè)特殊的或者自定義的段給指定到特定的存儲(chǔ)空間中,則此時(shí)鏈接器會(huì)自動(dòng)把它給分配到一個(gè)可用的存儲(chǔ)空間里,這有可能會(huì)影響到程序的執(zhí)行效果。所以我們要開(kāi)啟編譯器的-w選項(xiàng),這樣在在未定義的輸出段被創(chuàng)建時(shí),開(kāi)發(fā)環(huán)境的控制臺(tái)窗口中會(huì)產(chǎn)生相關(guān)的警告信息。
本文地址:http://m.qingdxww.cn/thread-135073-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色吧五月婷婷 | 亚洲另类中文字幕 | 色综合色综合色综合网址 | 黄网址大全免费观看免费 | 亚洲欧美日韩精品高清 | 国产白嫩漂亮ktv在线 | 精品国产不卡一区二区三区 | 国产福利在线观看永久视频 | 午夜一级毛片不卡 | 日韩福利视频高清免费看 | 97免费在线视频 | 欧美成人久久久免费播放 | 涩999| 国产在线精品观看一区 | 在线播放69热精品视频 | 国产馆在线观看免费的 | 国产成人麻豆精品video | 成人在线手机视频 | 国产精品嫩模在线播放 | 色男人的天堂 | 夜夜夜夜曰天天天天拍国产 | 国产h视频在线 | 欧美在线观看高清一二三区 | 欧美日韩一区二区在线 | 国产精品福利在线观看 | 一卡二卡四卡免费视频 | 国产一级一片免费播放刺激 | 亚洲国内精品久久 | 青青草久草视频 | 不卡视频免费在线观看 | 免费观看亚洲视频 | 日本不卡1 | 在线免费日本 | 一级毛片免费网站 | 二区不卡 | 欧美亚洲综合图区在线 | 日韩高清在线二区 | 777久久成人影院 | 青青草国 | 国产人成精品综合欧美成人 | 欧美精品无需播放器在线观看 |