星期四, 9月 28, 2006

Writting ARM Assembly in Embedded VC - V2

上一篇轉貼別人的方法,實際照著作不OK,很奇怪,會有error說 AREA 後面的是unrecognizable opcode,所以?

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:

  1. 自己在project folder中新增一個 .s file 如: myasm.s
  2. 在eVC的Workspace panel中,source folder的部份,將myasm.s加入到source 中。
  3. 選 Project - Settings - 會出現各個configuration, 各source file的操作,選好configuration, 和myasm.s ,右邊會出現兩個tab - General, Custom Build。
  4. 選Cuntom Build,在"Commands的地方加入:
    armasm "$(InputPath)" "$(IntDir)\$(InputName).obj" 
  5. 在"Output"的地方填入:
    $(IntDir)\$(InputName).obj 
  6. OK
這樣,就可以開始編輯myasm.s了,編輯完後,用Ctrl-F7 "Compile"就可以assembly myasm.s。OK後就可以build 整個project。

沒有留言:

網誌存檔