日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀] 雖然可用的存儲空間看起來比section的長度要大,但是鏈接器為何提示“placement fails for object”?

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

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

產生錯誤的原因是根據(jù)DP加載的原則,page被劃分為64word的小單元,而數(shù)組被存儲在連續(xù)的、整塊的單元上,未使用到的空間不會再分配給其它數(shù)組或者變量使用。所以16位260長度的數(shù)組實際占用了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位數(shù)組占據(jù)的最后那個page已經無法被別的變量使用了,所以如果還有新的變量出現(xiàn)的話,會提示RAMM1塊缺少的地址更多。

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

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

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

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

方法一:修改cmd

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

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

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

方法三:完整分割法

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

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

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

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

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

3、在cmd文件中,可以把連續(xù)的Flash模塊組合為一個整體的區(qū)間嗎?

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

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

以把兩個Flash扇區(qū)組和為一個段為例:

合并前,兩個扇區(qū)的定義是:

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區(qū)間為:

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

}

4、 在cmd文件中,可以把相鄰的SARAM模塊組合為一個整體的區(qū)間嗎?

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

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

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

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

此外,任何配置片載Flash控制寄存器(例如,F(xiàn)lash等待狀態(tài))的代碼不能從Flash執(zhí)行。我們也許需要從 RAM(而非Flash)中運行特定時間關鍵函數(shù)來大幅提升性能。 必須創(chuàng)建一個自定義cmd來處理這些我們定義的程序段??梢詤⒖糝unning an Application from Internal Flash Memory on the TMS320F28xx DSP這個文檔,其示例代碼在http://www.ti.com/general/docs/l ... 58&fileType=zip。

需要注意的是,這些文檔和程序與新版本的CCS中所包含SYS/BIOS并不是完全兼容的。此外,如果我們想使用第三方的操作系統(tǒng),例如VxWorks、us/OS、INTEGRITY等,則要根據(jù)這些RTOS的特點進行內存的分配與管理。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

隨著在線會議、直播和游戲語音交流的普及,高質量的音頻輸入設備變得越來越重要。為此,邊緣AI和智能音頻專家XMOS攜手其全球首家增值分銷商飛騰云科技,利用其集邊緣AI、DSP、MCU和靈活I/O于一顆芯片的xcore處理器...

關鍵字: AI DSP MCU

多DSP集群的實時信號處理系統(tǒng),通信拓撲的優(yōu)化直接決定任務調度效率與系統(tǒng)吞吐量。RapidIO與SRIO作為嵌入式領域的主流互連協(xié)議,其帶寬利用率差異與QoS配置策略對集群性能的影響尤為顯著。以無線基站、雷達陣列等典型應...

關鍵字: DSP 通信拓撲優(yōu)化

隨著5G網(wǎng)絡普及與物聯(lián)網(wǎng)設備爆發(fā)式增長,邊緣計算正從概念驗證走向規(guī)?;渴?。據(jù)IDC預測,2025年全球邊緣數(shù)據(jù)量將占總體數(shù)據(jù)量的50%,這對邊緣節(jié)點的實時處理能力提出嚴苛要求。在此背景下,AI加速器的DSP化趨勢與可重...

關鍵字: AI加速器 DSP

在工業(yè)控制領域,數(shù)字信號處理器(DSP)的性能直接決定了系統(tǒng)的實時控制能力和可靠性。德州儀器(TI)的C2000系列芯片憑借其卓越的采樣、控制和功率管理能力,長期以來在全球工業(yè)控制市場占據(jù)絕對領導地位,廣泛應用于能源、電...

關鍵字: TI C2000 DSP 格見半導體 芯來 RISC-V 工控

2025年7月16日 – 專注于引入新品的全球電子元器件和工業(yè)自動化產品授權代理商貿澤電子 (Mouser Electronics) 持續(xù)供貨Texas Instruments (TI) 的新產品和解決方案。作為一家授權...

關鍵字: 線性穩(wěn)壓器 柵極驅動器 DSP

在當今數(shù)字化浪潮的推動下,數(shù)據(jù)流量呈爆炸式增長,數(shù)據(jù)中心、5G通信網(wǎng)絡以及云計算等領域對高速光通信的需求愈發(fā)迫切。800G光模塊作為高速光通信的關鍵組件,其性能直接影響著整個通信系統(tǒng)的傳輸效率和可靠性。數(shù)字信號處理(DS...

關鍵字: 800G DSP PAM4均衡算法

以氫燃料電池空壓機為研究對象 ,開發(fā)超高速永磁同步電機控制器 ,采用傳統(tǒng)的IGBT主功率器件 ,且為兩電平主回 路結構形式 ,通過改進的V/F控制算法 ,完成了控制器的設計。搭建了試驗平臺進行測試 ,結果表明 ,控制器能...

關鍵字: 超高速永磁同步電機 V/F控制 DSP

醫(yī)療設備智能化進程,數(shù)字信號處理器(DSP)作為核心計算單元,承擔著實時處理生物電信號、醫(yī)學影像等敏感數(shù)據(jù)的重任。然而,隨著醫(yī)療設備與網(wǎng)絡互聯(lián)的深化,數(shù)據(jù)泄露風險顯著增加。美國《健康保險流通與責任法案》(HIPAA)明確...

關鍵字: 醫(yī)療設備 DSP

數(shù)字信號處理器(DSP)作為實時信號處理的核心器件,其架構設計直接決定了運算效率與功耗表現(xiàn)。自20世紀70年代DSP理論誕生以來,其硬件架構經歷了從馮·諾依曼結構到哈佛結構的演進,這一過程體現(xiàn)了對實時性、并行性與存儲帶寬...

關鍵字: DSP 馮·諾依曼

隨著嵌入式系統(tǒng)對實時性、多任務處理能力的需求日益增長,實時操作系統(tǒng)(RTOS)在數(shù)字信號處理器(DSP)中的移植與性能優(yōu)化成為關鍵技術課題。DSP以其高效的數(shù)值計算能力和并行處理特性,廣泛應用于通信、圖像處理、工業(yè)控制等...

關鍵字: RTOS DSP
關閉