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

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

發布時間:2014-12-26 10:27    發布者:看門狗
關鍵詞: DSP編程
作者:paradoxfx 來源:電子產品世界

35. 雖然可用的存儲空間看起來比section的長度要大,但是鏈接器為何提示“placement fails for object”?

  這種情況一般是因為段的空間的分配是并不是我們想象中的連續的一個緊挨一個,而是被編譯器給“分塊”管理了。在內存地址分配時,一個段需要完全適配到頁(page)中,或者從頁的邊界開始連續分配;為了滿足這個要求,段在分配到頁中時,可能無法完全利用某些頁,導致內存地址中產生了間隙(hole),使得實際所需要的內存空間超過了根據變量大小計算出來的理論值。編譯器這樣做的目的是為了優化數據頁(DP)寄存器的加載,達到減小代碼尺寸和優化程序性能的目的。例如,針對一個數組,如果數組的長度小于64字(words),則編譯器僅需安全地加載DP一次就可以訪問數組的全部元素;如果數組長度大于64字,則在訪問每64字的數組元素時,編譯器僅需加載一次DP,當然如果訪問多個64字的數組元素則仍需要多次加載DP。

  舉例說明:

  在cmd里定義:

  RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */

  commbuf : > RAMM1 PAGE = 1

  在main.c里定義以下幾個變量

  #pragma DATA_SECTION(sendT, "commbuf")

  Uint16 sendT[260];

  #pragma DATA_SECTION(receT, "commbuf")

  Uint16 receT[260];

  #pragma DATA_SECTION(CntPPR, "commbuf")

  Uint32 CntPPR[250];

  表面上共需260+260+250*2=1020,commbuf正好放得下.但ccs提示空間不夠:

  (run placement fails for object "commbuf", size 0x474 (page 1).

  Available ranges: RAMM1 size: 0x400 unused: 0x400 max hole: 0x400)

  產生錯誤的原因是根據DP加載的原則,page被劃分為64word的小單元,而數組被存儲在連續的、整塊的單元上,未使用到的空間不會再分配給其它數組或者變量使用。所以16位260長度的數組實際占用了64*5=320 (64*4=256<260),32位500的長度實際占用了64*8=512,占用的總長度為:320*2+512=1152=0x480。

  按照CCS的提示,commbuf占用空間是320*2+500=1140=0x474,但是事實上32位數組占據的最后那個page已經無法被別的變量使用了,所以如果還有新的變量出現的話,會提示RAMM1塊缺少的地址更多。

  根據我們的需要,可以在每次之間內存讀取操作之前都加載DP,這樣就可以禁用上面的“分塊”管理特性了。這樣做雖然可以減小內存地址空間中的“間隙”,但是每一次訪問內存都需要加載DP,反而大大地增加了代碼的尺寸,實在是得不償失(看起來很少有人會這么做)。我們可以通過啟用編譯器的-disable_dp_load_opt,或者叫-md選項來實現這一方法。

  確認某個段是否被編譯器給分塊管理的方法就是使用.bss和.usect指令。

  36. 鏈接器提示“placement fails for object '.text'”,我們如何為.text分配更多的內存?

  .text段中包含包含所有可執行的代碼,以及編譯器編譯產生的常量。如果我們的代碼比較大,超過了cmd文件中默認分配的空間,則.text無法適配到內存空間中,就會產生上面的錯誤。通常有三種方法可以來為其分配更多的空間。

  方法一:修改cmd

  方法二:分割.text,把它平均分配到多個內存區域中

  這個方法比較直觀,前提是幾個內存區域的總長度要滿足要求。例如:

  .text : >> FLASHA | FLASHC | FLASHD, PAGE = 0

  方法三:完整分割法

  這個名字有點古怪,它本質仍然是把.text分割,目標區域也可以有多個,但是當第一個區域就滿足要求時,則只把它分配到第一個區域中,剩余的目前區域實際上未被使用到。

  在實際編程實現時,這些方法仍然存在一定的限制,包括:

  1. 在包含控制律加速器CLA 的Piccolo器件中,只有特定的內存區域可被CLA所使用。

  2. 在含有DMA的器件中,并不是所有的內存都可被DMA所訪問。

  3. 一般情況下,SRAM都是單個機器周期內只能訪問一次,但是0等待狀態的。但在一些器件中,程序內存控制是包含等待狀態的,例如在某些2833x器件中,DMA可訪問的數據空間是0等待狀態的,但是程序控制是1等待狀態的。這些SRAM空間更適合純數據訪問類型的使用。

  37. 在cmd文件中,可以把連續的Flash模塊組合為一個整體的區間嗎?

  答案是可以的。在Flash的燒寫中,可以在同一時間被燒寫的Flash的最小長度被稱為扇區(sector),所以通過把我們的代碼進行分區燒寫,就可以把它們對齊到扇區。

  Flash模塊結合的方法一:直接合并法

  以把兩個Flash扇區組和為一個段為例:

  合并前,兩個扇區的定義是:

  MEMORY

  {

  //

  // Individual sectors E and F called out in the MEMORY description

  //

  ...

  FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */

  FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */

  ...

  }

  合并之后的Flash區間為:

  MEMORY

  {

  //

  // Sectors E and F merged into one in the MEMORY description

  //

  ...

  FLASH : origin = 0x310000, length = 0x010000 /* on-chip FLASH F & FLASH E */

  ...

  }

  方法二:反其道行之,把段分配到多個Flash模塊中,與問答36的方法二是一致的,例如:

  SECTIONS

  {

  .text: { *(.text) } >> FLASHE| FLASHH

  }

  38. 在cmd文件中,可以把相鄰的SARAM模塊組合為一個整體的區間嗎?

  答案是可以的,方法與Flash組合的方法一樣。

  雖然這樣做是完全沒有問題的,但需要牢記SARAM模塊都是單個機器周期內只能訪問一次的,所以為了優化程序的性能,最好把代碼給分區到不同的物理SARAM模塊中,這樣可以減少大量讀/寫操作中的資源沖突。

  39. 對于DSP/BIOS的工程,如何了解鏈接的信息?

  DSP/BIOS 的配置工具生成一個cmd文件,規定如何連接所有 DSP/BIOS 生成的程序段,并且默認鏈接至所有 C/C++ 語言編譯程序生成的程序段。 當從 RAM 運行程序時,可能只需要這一個cmd文件就夠了。但在當從Flash中執行時,很有可能需要生成且連接一個或多個自定義的程序段。

  此外,任何配置片載Flash控制寄存器(例如,Flash等待狀態)的代碼不能從Flash執行。我們也許需要從 RAM(而非Flash)中運行特定時間關鍵函數來大幅提升性能。 必須創建一個自定義cmd來處理這些我們定義的程序段。可以參考Running an Application from Internal Flash Memory on the TMS320F28xx DSP這個文檔,其示例代碼在http://www.ti.com/general/docs/l ... pra958&fileType=zip

  需要注意的是,這些文檔和程序與新版本的CCS中所包含SYS/BIOS并不是完全兼容的。此外,如果我們想使用第三方的操作系統,例如VxWorks、us/OS、INTEGRITY等,則要根據這些RTOS的特點進行內存的分配與管理。
本文地址:http://m.qingdxww.cn/thread-141730-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久婷婷亚洲5月97色 | 四虎在线网址 | 色丁香色婷婷 | 国产欧美日韩图片一区二区 | 日本亚洲一区二区三区 | 精彩视频一区二区三区 | 正在播放91大神调教偷偷 | 操网| 欧美四区| 99热这里只有精品免费 | 亚洲视频一区二区三区四区 | 日本视频在线播放 | 中文字幕日韩女同互慰视频 | 欧美国产日韩一区二区三区 | 91亚洲导航深夜福利 | 国产精品青青 | 欧美一级视频在线高清观看 | 欧美成人一区二区三区在线视频 | 国产深夜福利19禁在线播放 | 久热re在线视频精品免费 | 成人亚洲欧美日韩中文字幕 | 天天操天天摸天天舔 | 免费费看的欧亚很色大片 | 极品国产一区二区三区 | 亚洲日本免费 | 国产精品一区二区三区四区 | 又黄又www | 精品在线一区二区 | 国产尤物二区三区在线观看 | 99久久精品国产麻豆 | 亚洲欧美日韩国产综合久 | 国产三级网站 | 999热视频 | 中文字幕一区二区三区四区五区 | 欧美亚洲不卡 | 日本一区二区三区久久久久 | 在线观看a视频 | 成人三级视频在线观看 | 国产精品亚洲综合天堂夜夜 | 热久久99精品这里有精品 | 综艺在线看免费高清 |