在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 語句是描述乙個型別或告訴程式去執行某個動作的...