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

2020-12-07 電子產品世界

  答疑解惑哪家強?當屬我們EEPW最強。。。接下來繼續我們的答疑解惑。

本文引用地址:http://www.eepw.com.cn/article/266820.htm

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

  初學者往往使用printf列印「Hello World」這樣的方式來完成第一個DSP編程的程序,這種方法雖然是非常直觀明了的,感覺起來功能也是非常簡單的,但是一編譯結果發現提示棧的空間不夠,或者有「program will not fit into available memory」之類的錯誤。這是因為標準的printf()/sprintf()提供了非常多的特性支持,造成了在DSP上實現時,產生的代碼尺寸非常大。

  此時我們可以根據需要調整不同級別的格式格式限定符,例如通過連結器的選項,我們可以指定--printf_support=full, minimal或者nofloat, full為默認參數,表示支持所有的格式;nofloat不支持對浮點類型的數據的輸入/列印,包括%a,%A, %f, %F,%g,%G,%e和%E,支持其它的字符、定點格式等;minimal:對數據格式的最小支持,只包含了不指定數據寬度和精度標誌的整形、字符型或者字符串,即只支持%%,%d,%o,%c,%s和%x格式。其詳細含義可參考http://www.eepw.com.cn/article/236048.htm。需要注意的是,如果--printf_support使用了不支持的格式,連結器並不能給出特定的實時運行庫的錯誤提示,在使用時要仔細檢查。

  此外,如果不去指定連結器選項,我們也可以修改printf函數默認對應的源程序_printfi.c來實現類似的效果,它的路徑一般在編譯器的庫函數目錄下,例如\ti\ccsv6\tools\compiler\c2000_6.2.5\lib\src。在此路徑下,有3個printf函數對應的c程序,它們與連結器選項的對應關係如下表所示。

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

  30. CCS編譯器是否支持任何工業標準?

  1) 所有的TI DSP支持的C語言標準:

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

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

  2) 不支持的C語言標準:

  C11 (ISO/IEC 9899:2011)

  3) 支持的C++標準:

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

  C++03 (本質是C++98的bug修復)

  4) 不支持的C++標準:

  C++ TR1

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

  5) IEEE-754 (ISO/IEC/IEEE 60559)標準:

  TI的ARM和DSP的C/C++編譯器支持32位和64位的二進位浮點數運算,能夠支持IEEE754標準中大部分特性。

  6) MISRA-C

  MISRA C是由汽車產業軟體可靠性協會(MISRA,motor industry software reliability association)提出的C語言開發標準,在控制有關的代碼中是非常有用的標準,具體使用方法可參考http://www.eepw.com.cn/article/247057.htm。

  7) 其它標準

  在工業領域中,safety安全特性在一些應用場合中已經是要求必須具備的功能了,相關的標準包括IEC61508、TÜV認證等。目前已經有一部分包含硬體safety特性的DSP器件了;如果使用軟體來實現這些特性,則目前還需要我們自己來編寫代碼以支持這樣的特徵。

  31. CCS編譯器對GCC擴展的支持如何?

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

  32. 如何了解有關編譯/代碼產生工具的已知問題,並獲得最新進展?

  老外喜歡用IBM的ClearQuest系統來報告bug並分享解決方案,我們可以使用TI提供的開放連結https://cqweb.ext.ti.com/cqweb/#/SDo-Web/SDOWP&format=HTML&version=cqwj來報告bug、查看/分享解決方案等,其界面如下圖所示:

  避開老舊的「傳統」bug的最好辦法當然是定期升級編譯器和開發環境了。通過配置,新版本的CCS在啟動後會自動檢測升級並自動升級,這也簡化了我們對開發環境的維護工作。

  33. 連結文件中包含那麼多個段,有什麼快速識別的方法?

  把下面這個例子記牢就好了:

  //

  // 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?為何編譯器不能自動分配存儲空間並進行內存管理?

  在作業系統存在的情況下,這些工作確實不需要我們花費太多的心思。但是在嵌入式的DSP處理中,這樣做的主要原因是處理能力和存儲空間是十分有限的,必須要我們進行一定的介入,例如我們需要考慮的因素包括:

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

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

  3) 任務是否是時間關鍵的?例如需要把某個時間關鍵的ISR被保存在Flash中,然後運行時複製到RAM裡。

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

  5) 使用單獨的物理RAM模塊來避免資源的衝突。例如,在C2000 DSP中,RAM模塊都是在單個機器周期內只能訪問一次的SARAM(Single-access RAM)。

  6) 資源是否位於外部存儲器中?

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

  8) 存儲器在程序空間、數據空間中是否具有等待狀態?

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

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

  如果我們沒有把某一個特殊的或者自定義的段給指定到特定的存儲空間中,則此時連結器會自動把它給分配到一個可用的存儲空間裡,這有可能會影響到程序的執行效果。所以我們要開啟編譯器的-w選項,這樣在在未定義的輸出段被創建時,開發環境的控制臺窗口中會產生相關的警告信息。

相關焦點

  • DSP編程技巧之18---不得不看的編譯指示
    都是對特定源文件使能MISRA-C:2004規則檢查(汽車工業軟體可靠性聯會),使用方法是:  #pragma CHECK_MISRA (" {all|required|advisory|none|rulespec} ");  其中的rulespec是具體MISRA中的規則,使用方法請參考DSP編程技巧之
  • DSP編程技巧之17---非常「關鍵」的關鍵字
    在前面的一篇文章DSP編程技巧之15-使用代碼優化時必須考慮的五大問題中,我們已經描述了volatile和restrict的用法,在此不再重複描述。本文引用地址:http://www.eepw.com.cn/article/256730.htm  1.
  • 昆明雅思6.5分英語培訓班哪家比較好?
    實戰演練技巧教學強調學以致用,靈活應變,讓學生在實戰演練中牢固掌握所學技巧。今天一起來了解一下昆明雅思6.5分英語培訓班哪家比較好?1、名師面對面 近距離互動授課由新航道名師真人上陣,在線授課,老師和學生畫面可以同框出現,面對面上課,「近距離」直接交流,答疑解惑,講解雅思、託福等課程備考真經。
  • python編程30個常用技巧
    打開APP python編程30個常用技巧 深度學習這件小事 發表於 2020-12-24 15:07:51 1、冒泡排序
  • 德華為您答疑解惑(珊瑚的壽命)
    作為小郭的朋友,也是小郭海水公眾號忠實粉絲的我,應小郭邀請來為大家答疑解惑。魚友問:您好,想請教您一些問題: 珊瑚的壽命有多久? 如果從珊瑚蟲的層面來說,珊瑚蟲的壽命又有多久? 造礁珊瑚和非造礁珊瑚的珊瑚蟲壽命長短有差異嗎? 望您空閒時可以幫我解答一下疑惑,不勝感激。這個問題既簡單又複雜,我們先了解下珊瑚的構成,再慢慢去分析這個問題。
  • 第六講 DSP在雷達信號處理中的應用
    本文重點介紹通用dsp在雷達信號處理系統中的典型應用,以及研製基於dsp的雷達信號處理系統的關鍵技術。本文引用地址:http://www.eepw.com.cn/article/20739.htm dsp在雷達信號處理中的典型應用 作為面向數位訊號處理的可編程嵌入式處理器,dsp具有高速、靈活、可靠、可編程、低功耗、接口豐富、處理速度快、實時性好等特點。
  • 關於「一盔一帶」的答疑解惑都在這了
    關於「一盔一帶」的答疑解惑都在這了 2020-06-11 02:23 來源:澎湃新聞·澎湃號·政務
  • 將壓電能量收集和壓電傳感整合在一起,為答疑解惑
    打開APP 將壓電能量收集和壓電傳感整合在一起,為答疑解惑 發表於 2019-05-05 15:54:12 本報告將壓電能量收集和壓電傳感整合在一起,為讀者答疑解惑:(1)毫瓦或兆瓦:壓電技術的成功在哪裡?(2)壓電能量收集器和壓電傳感器的工作模式有哪些?(3)為什麼在生命科學領域會尋求自供電傳感器?(4)能否將壓電能量收集和太陽能結合起來,為道路上行駛的汽車提供能源?(5)如果交通繁忙,那麼壓電能量收集效果良好;如果交通空閒,怎麼辦?(6)哪些壓電材料是經濟實惠、易於使用?
  • 基於小波變換與DSP的實時音頻視頻處理系統
    該晶片實現了itu-tg,723.1所規定的5.3kb/s和6.3kb/s兩種比特率語音。這兩種比特率是h.263建議所規定的國際標準語音速率,適用於線路帶寬較小的多媒體通信。該晶片處理速度快,可實現語音的實時處理,其內部結構如圖4所示。
  • 安踏李寧哪家強?KT5和韋德之道都是國貨之光!
    安踏李寧哪家強?KT5和韋德之道都是國貨之光!安踏 KT5KT5是安踏為克萊-湯普森量身定製的第五代籤名戰靴,比起前幾代戰靴,KT5可謂是又進步了不少。KT5的中底採用了A-Flashfoam材料,具有非常優秀的緩震和回彈,它的緩震效果和反饋比KT4強了不是一點半點。此外中底外側邊緣上翻加上高幫設計,使人穿著起來更有安全感。不得不說,KT5擁有湯普森系列中最強的包裹性。這雙鞋採用了貫穿式鞋帶設計,直接可以收攏到鞋舌的頂端,而魔術貼式的鞋面罩子設計能讓球鞋更加貼合腳背,讓整雙鞋的包裹性得到進一步提升。
  • 關於電絕緣軸承一些常見問題的答疑解惑
    打開APP 關於電絕緣軸承一些常見問題的答疑解惑 jxgdzc 發表於 2020-12-04 15:19:12 答:絕緣軸承採用特種噴塗工藝,在軸承的外表面噴鍍優質覆膜,覆膜與基體結合力強,絕緣性能好,可避免感應電流對軸承的電蝕作用,防止電流對潤滑脂和滾動體、滾道造成的損壞,提高軸承的使用壽命。 問:常見的絕緣軸承類型有哪些? 答:常見的絕緣軸承類型有:深溝球絕緣軸承、圓柱滾子絕緣軸承、調心滾子絕緣軸承、角接觸絕緣軸承、圓錐滾子絕緣軸承、混合陶瓷軸承等。
  • 中國大陸接連發生強震 地震專家答疑解惑
    中新社北京8月9日電 題:中國大陸接連發生強震 地震專家答疑解惑  中新社記者 張素  8月8日四川九寨溝發生7.0級地震,8月9日新疆精河發生6.6級地震,中國大陸連續兩日發生強震。中新社記者採訪了相關專家,就兩次地震是否有關聯,中國大陸是否處於地震活躍期等外界關注的問題進行解答。
  • 當悟空會寫代碼,這家少兒編程機構如何玩轉雙師課堂?
    導語打開貝爾編程的網站,進入眼帘的是一個個色彩豔麗、動畫一樣的作品,點擊可操作、可改編,而這樣的設計正是出自貝爾編程學員之手。在每節課後半段,他們將利用學到的編程知識,完成一個DIY的作品。這些作品中,「悟空」是最為常見的角色,諸如「西遊尋寶之旅」、「悟空站在太空船上」、「豬八戒的筋鬥雲」等等。此外,「悟空」這個元素還貫穿于貝爾編程整個課程體系中。
  • 學電腦編程入門要先學習什麼
    剛開始學習編程,發現學習了很長時間仍然沒有學習思路,感覺記憶量特別大,需要記憶很多專業術語。那麼有什麼便捷的電腦編程學習方法,可以輕鬆掌握編程思路呢,答案是肯定的,有,可以先通過學習中文編程漢語編程來快速掌握編程思路,然後再學習其他語言,則會事半功倍。
  • 基於DSP和FPGA的機器人聲控系統設計與實現
    語音信號的特徵是隨時間變化的,只有一段時間內,信號才表現穩定一致的特徵,一般來說短時段可取5~50 ms,因此語音信號的處理要建立在其"短時性"上[2],系統將語音信號幀長設為20 ms,幀移設為10 ms,則每幀數據為160×16 b。
  • 這篇龍蝦指南答疑你的解惑
    看完這篇最全龍蝦指南,絕對可以答疑解惑。龍蝦因為生長水域的不同,在肉質和口感上也會大相逕庭。波士頓龍蝦雖然叫波士頓龍蝦,但它並非來自于波士頓,絕大多數都是產於美國緬因州和加拿大。早在美洲大陸剛剛開闢的時候,波士頓龍蝦因為量多物賤,被稱為「窮人的雞」。直到19世紀中葉,才搖身一變,從窮人的廉價食料變為了餐桌上的一道美食。
  • 胺基酸奶粉和深度水解奶粉的區別是什麼,雀巢產品幫你答疑解惑
    胺基酸奶粉和深度水解奶粉的區別是什麼,雀巢產品幫你答疑解惑2020-11-26 17:04:52出處:其他作者:佚名  嬰幼兒在生長發育的過程中,往往會出現乳糖不耐受的情況,從而導致寶寶腹瀉、便秘、溼疹等問題。
  • 胺基酸奶粉和深度水解奶粉的區別是什麼,雀巢產品幫你答疑解惑...
    >胺基酸奶粉和深度水解奶粉的區別是什麼,雀巢產品幫你答疑解惑2020-11-26 17:04:52出處:其他作者:佚名雀巢旗下恩敏舒和肽敏舒兩類產品,完美幫你答疑解惑。雀巢恩敏舒主要適用於深度水解配方使用無效的CMPA(牛奶蛋白過敏)嬰幼兒的二線治療方案,或重度CMPA和多種食物過敏嬰幼兒首選的胺基酸配方。它是一款針對複雜CMPA與食物不耐受安全有效的解決方案。恩敏舒具有屬於自己的科學配方。
  • DSP編程技巧之12-揭開編譯器神秘面紗之代碼規範MISRA-C
    幸好我們使用的DSP編程環境CCS提供了相應的選項,使得編譯器可以自動檢查我們的代碼是否違反了MISRA-C的相關規則,並提供給我們詳細的診斷與警告信息。  舉例說明:--check_misra=1-5,-1.1,8.2-4的含義是:  檢查從主題1到主題5的規則。
  • DSP編程技巧之24---C/C++與彙編語言的交互之-(2)從C/C++代碼調用...
    在C/C++與彙編語言混合編程的情況下,一般我們都會選擇C/C++來實現所期待的大部分功能,對於少數和硬體關聯度高(例如操作某些CPU寄存器)以及對運算的實時性要求高(例如高速、多點的FFT)的功能才使用彙編來實現,這就使得大多數情況下,C/C++與彙編的交互都是從C/C++代碼調用彙編代碼中的函數與變量,所以在此我們就來看一下這種調用的規則。