TI DSP各種段的定義

2021-07-05 10:13:32 字數 1568 閱讀 7512

在cmd檔案中能看到各種段.text .cinit .const等,這和通常系統中僅有text, data, bss( 或者arm系統的code,data,zi段 ),heap, stack有很大的區別:

ti段的定義:

已初始化的段:

.text  .cinit  .const  .econst  ..pinit  .switch

.text:  

所有可以執行的**和常量

.cinit: 

全域性變數和靜態變數的

c初始化記錄

.const: 

包含字串常量和初始化的全域性變數和靜態變數(由

const

)的初始化和說明

.econst: 

包含字串常量和初始化的全域性變數和靜態變數(由

far const)

的初始化和說明

.pinit:  

全域性構造器

(c++)

程式列表

.switch:  

包含switch 

宣告的列表

未初始化的段:

.bss  .ebss  .stack  .sysmem  .esysmen(

另一種理解:這些段就認為儲存空間而已)

.bss:  

為全域性變數和區域性變數保留的空間,在程式上電時

.cinit

空間中的資料複製出來並儲存到

.bss

空間中

.ebss:  

為使用大暫存器模式時的全域性變數和靜態變數預留的空間,在程式上電時,

cinit

空間中的資料複製出來並儲存在

.ebss中

.stack:  

為系統堆疊保留的空間,主要用於和函式傳遞變數或為巨變變數分配空間

.sysmem:  

為動態儲存分配保留的空間,如果有巨集函式,此空間被空函式占用,如果沒有的話,此空間保留為0

.esysmen:  

為動態儲存分配保留的空間,如果有

far函式,此空間被相應的占用,如果沒有的話,此空間保留為0。

可以看到已初始化段相當於通常系統的text, data, bss, 只不過ti將有些段進行了進一步的深化。而未初始化段中,堆對應的是sysmem(esysmem), 棧對應stack。 bss和ebss在任何系統中都是必須的,但是可能其它系統把這些細節掩蓋了,比如arm直接讓__main操作了。ti也有相應的系統函式完成上述的資料複製搬運工作(主要是一些有初始化值的常量,儲存的時候需要將這些值儲存在flash中,執行的時候需要在ram中),這個函式就是cint00函式。

如果乙個系統既想要支援24x彙編,要想要支援28x彙編,要想使用c函式(哪個專案這麼**,不好意思我的乙個專案就是這樣),那麼需要開啟ti的

-m20 (

在compiler

的runtime model options

)來支援,但是一旦開啟這個選項,cint00就無法正常呼叫,也就是這這種混合**中,你的全域性變數不能在函式體外給它賦值,沒有cini00它將無法實現拷貝工作,解決方法是,要麼自己手寫乙個cinit00函式,要麼你的全域性變數在函式的初始化中賦值。

各種指標的定義

各種指標的定義 1,乙個整形數 int a 2,乙個指向整形數的指標 int a 3,乙個指向指標的指標,它指向的指標指向乙個整形數 int a 4,乙個有10個整形數的陣列 int a 10 5,乙個有10個指標的陣列,每個指標指向乙個整形數 int a 10 6,乙個指向有10個整形數的陣列的指...

各種通道定義

lte通道分為邏輯通道 傳輸通道和物理通道3大類,和這些通道相關的又有3個協議層。其中邏輯通道傳送rlc層和mac層之間的資料,傳輸通道傳送mac層和物理層之間的資料,物理通道用於將資料在空口傳送。可以看出其實各類通道的作用就是在不同協議層間傳輸資料。無論是高層的信令資料還是業務資料都由底下的rlc...

C 學習1 各種定義

本文參考b站教程 unity c 語言 初級 中級 高階 資料結構 演算法 教程 識別符號是一種字串,用來命名如變數 方法 引數和其他程式結構。注意 用來定義c 語言的字串記號 每個c 程式都必須帶乙個main方法 函式 static void main 語句是描述乙個型別或告訴程式去執行某個動作的...