MSDN上也沒有說明"AREA"這個directive,甚至連ARM Assembly source file的基本格式指令 - 設定CODE節區,Data節區... etc 也沒有。只有說...參考CE Kernel的code,所以去copy了一份flushic.s到eVC中。compile - 出現...kxarm.h 這個就是定義TEXTAREA這個MACRO的include file。
看一下,猜測 AREA這個directive大概是要
AREA |.text|,ALIGN=2,CODE,READONLY這樣寫,把這個加在assembly source file開頭,就可以compile了,以下是測試的function:
EXPORT TestIncrease
AREA |.text|,ALIGN=2,CODE,READONLY
TestIncrease
mov r12,sp
stmfd sp!,{r4-r11,lr}
add r0,r0,#1
ldmfd sp!,{r4-r11,pc}
END
在*cpp 中使用的地方:....
extern "C" int TestIncrease(int a);
.....
int test=0;
test = TestIncrease(test);
....
可以作remote debug,在TestIncrease( )設break-point,可以看到test 這個variable由0變成1。eVC因為不"直接支援"programmer 寫assembly source code,所以在eVC的環境和設定中都沒有相關的設定。
要加入assembly file,就要用"custom" option,自己寫入assembler command:
- 自己在project folder中新增一個 .s file 如: myasm.s
- 在eVC的Workspace panel中,source folder的部份,將myasm.s加入到source 中。
- 選 Project - Settings - 會出現各個configuration, 各source file的操作,選好configuration, 和myasm.s ,右邊會出現兩個tab - General, Custom Build。
- 選Cuntom Build,在"Commands的地方加入:
armasm "$(InputPath)" "$(IntDir)\$(InputName).obj"
- 在"Output"的地方填入:
$(IntDir)\$(InputName).obj
- OK
沒有留言:
張貼留言