1. 如何設置iar優化等級
果在A行設置的斷點,單步調試的時候卻只能到達A後邊的某幾行,可能的一個原因就是代碼優化的等級太高了,導致編譯器實際上沒有在A行停頓。
解決辦法:
在OPTION下修改優化等級
IAR默認的是最高優化等級。如果程序不大建議不優化。如果優化等級高,那麼一些非匯編的延時函數可能無法執行,一些局部變數的值可能在使用過後,即便沒有離開自己的作用
2. 如何查看IAR編譯器編譯後的匯編代碼,我想知道這個編譯器是如何處理中斷的
編輯界面右擊工程點擊options菜單項,選擇c/c++ compiler選項卡中的list選項,勾選output assembler files,編譯後則生成離線匯編代碼文件。
調試界面下,點擊view / disassembly 菜單項,則顯示在線匯編代碼窗口。
3. 用IAR嵌入式編譯程序,「section=」是什麼意思
#pragma section( "section-name" [, attributes] ) 作用是由程序指定創建一個段
一般默認段都是由編譯器自動指定的 不過看你這樣的寫法 IAR的時候是沒有默認段的 必須由編寫者手動指定
比如#pragma section = ".data"就是創建一個名字為.data的段,
然後下面調用
data_ram = __section_begin(".data");
來獲取這個段的首地址以備其操作
其他類似
關於pragma section的詳細說明如下。 對於#pragma 預處理還有很多功能 感興趣可以自行搜索
==================================================================================
#pragma section。創建一個段。
其格式為:#pragma section( "section-name" [, attributes] )
section-name是必選項,用於指定段的名字。該名字不能與標准段的名字想沖突。可用/SECTION查看標准段的名稱列表。
attributes是可選項,用於指定段的屬性。可用屬性如下,多個屬性間用逗號(,)隔開:
read:可讀取的
write:可寫的
execute:可執行的
shared:對於載入該段的鏡像的所有進程是共享的
nopage:不可分頁的,主要用於Win32的設備驅動程序中
nocache:不可緩存的,主要用於Win32的設備驅動程序中
discard:可廢棄的,主要用於Win32的設備驅動程序中
remove:非內存常駐的,僅用於虛擬設備驅動(VxD)中
如果未指定屬性,默認屬性為read和write。
在創建了段之後,還要使用__declspec(allocate)將代碼或數據放入段中。
例如:
//pragma_section.cpp
#pragma section("mysec",read,write)
int j = 0;
__declspec(allocate("mysec"))
int i = 0;
int main(){}
該例中, 創建了段"mysec",設置了read,write屬性。但是j沒有放入到該段中,而是放入了默認的數據段中,因為它沒有使用__declspec(allocate)進
行聲明;而i放入了該段中,因為使用__declspec(allocate)進行了聲明。