ti的幫助文檔里是這么講的:
The DATA_SECTION pragma allocates space for the symbol in a section called section name.
The syntax for the pragma in C is:
#pragma DATA_SECTION (symbol, "section name");
我個人的理解是:
定義一個數據段:
段名為: "section name"
段的內容在: symbol 里
在CCS編程中,如果我們不指定變量的存放位置,編譯器會自動的給變量分配一個位置,但是如果有的時候需要把變量放在一個特定的空間內,我們應該如何操作呢,CCS提供了如下的兩個指令
#pragma CODE_SECTION
#pragma DATA_SECTION
其中data_section是針對數據空間的,code_section是針對程序空間的,具體的使用辦法是
#pragma DATA_SECTION(bufferB, ”my_sect”)
char bufferB[512];
在.cmd文件中建立對應的section就可以使用了。
注意:在使用#pragma DATA_SECTION時,應該先開辟一個空間,即:#pragma DATA_SECTION(bufferB, ”my_sect”),然后再定義該空間的大小:char bufferB[512];
#pragma,是一個編譯控制指令,可以在編譯時動態地調整編譯選項,這種指令在不同的編譯系統中是不同的.
#pragma DATA_ALIGN( symbol,constant)
指令的作用是:排列排列symbol到constant指點的列邊界上.
#pragma DATA_ALIGN( rxdata_stream, 128)
就是讓rxdata_stream地址的末尾7位是0(二進制地址),就是128字節對齊。
對齊的目的,一般是位了CACHE讀寫外存。
如果一個CACHE的line是128字節。這樣,如果數據128字節對齊,那么取一個128字節的數據,只使用一個CACHE行就夠了。
char efd;
#prgma DATA_ALIGN(efd, 8)
編譯時一定會把efd變量的地址安排在8字節對齊的位置上,也即efd地址的低3位一定為0。
自定義段(C語言)
#pragma DATA_SECTION(函數名或全局變量名,"用戶自定義在數據空間的段名");
#pragma CODE_SECTION(函數名或全局變量名,"用戶自定義在程序空間的段名");
不能在函數體內聲明。必須在定義和使用前聲明
#pragma可以阻止對未調用的函數的優化
#pragma DATA_ALIGN( symbol,constant)
指令的作用是:排列排列symbol到constant指點的列邊界上.
例如
#pragma DATA_ALIGN( rxdata_stream, 128)
就是讓rxdata_stream地址的末尾7位是0(二進制地址),就是128字節對齊。
對齊的目的,一般是位了CACHE讀寫外存。
如果一個CACHE的line是128字節。這樣,如果數據128字節對齊,那么取一個128字節的數據,只使用一個CACHE行就夠了。
#prgma DATA_ALIGN(efd, 8)
編譯時一定會把efd變量的地址安排在8字節對齊的位置上,也即efd地址的低3位一定為0。