在 eclipseSDCC 內要編譯 c source 是完全沒問題的,但是要編譯 assembly source 卻產生一個小小的 bug,很多人都有在問解決方法,但原作者似乎沒有要修改的意願,還好有一個熱心的使用者提供一個解決方法,可以完美的解決。
在最原始的設定下,直接編譯 asm 會出現下列錯誤。
Building file: ../source/test.asm
Invoking: SDCC Assembler
as51 -o"source/test.rel" "../source/test.asm"
C:\Temp\make34404.sh: command not found: as51 [1]
make: *** [source/test.rel] Error 1
為什麼找不到 as51?那是因為 SDCC 的 assembly compiler 應該 asx8051 才對,換成 asx8051 後,再次編譯 asm 則出現下列錯誤。
Building file: ../source/test.asm
Invoking: SDCC Assembler
asx8051 -o"source/test.rel" "../source/test.asm"
removing
ASxxxx Assembler V01.70 + NoICE + SDCC mods + Flat24 Feb-1999 (Intel 8051)
Usage: [-dqxjgalopsf][ -I ] file1 [file2 file3 ...]
d decimal listing
q octal listing
x hex listing (default)
j add line number and debug information to file
g undefined symbols made global
a all user symbols made global
l create list output file1[LST]
o create object output file1[REL]
s create symbol output file1[SYM]
c generate sdcdb debug information
p disable listing pagination
f flag relocatable references by ` in listing file
ff flag relocatable references by mode in listing file
-I Add the named directory to the include file
search path. This option may be used more than once.
Directories are searched in the order given.
make: *** [source/test.rel] Error 1
為啥會錯呢?那是因為 -o 還沒有支援路徑功能,在那編譯,就在那產生 rel,不能更改路徑。最後使用 domning 所提供的 SDCCAsmWrapper 才得以正確的編譯成功。
Building file: ../source/test.asm
Invoking: SDCC Assembler
SDCCAsmWrapper -o"source/test.rel" "../source/test.asm"
Wrapping SDCCAsmWrapper.EXE to > asx8051.exe -lo ../source/test.asm
Finished building: ../source/test.asm
安裝 SDCCAsmWrapper
- 下載 SDCCAsmWrapper。
- 解壓縮到 C:\Program Files\SDCC\bin。
- 修改 SDCC Assembler Command 為 SDCCAsmWrapper 即可。
- SDCCAsmWrapper 會去呼叫 asx8051 做編譯,再 copy rel 到 output 目錄。
您好!!小弟是路過看到大大文章,最近剛好在學習eclipse+SDCC 針對某8051 mcu作實驗,有個問題想請教您,小弟現在在eclipse建立c project再加入c+asm檔案,參考您的方法 compile 都可以成功,可是小弟再建立新的c porject裡面只有一個asm檔案,compile msg出現"Nothing to build for project DEMO_ASM",我有去上網找資料都沒找到問題所在,是小弟疏忽了哪邊的設定出現這個問題,煩請大大賜教提點一下小弟該往哪邊下手,感謝您!!
"Nothing to build for project DEMO_ASM" 表示之前已經編譯完成,無須再次編譯,你可以改用 "Clean Project" 再次編譯。
大大感謝您的回應,不過小弟出現此msg時候eclipse沒有產生Makefile和ihx,"好像"在該project底下一定要加個C的檔案,compile才會認到有檔案才build的過去。
我剛試了一下,新建project只有一個asm檔案,編譯正常,ihx也有產生。你要不要加我的msn,丟檔案給我看看??
感謝大大願意幫小弟解答,小弟經過幾次實驗已經找到原因了,因為keil a51和SDCC asm程式起始段的宣告不同,導致compiler無法順利找到程式起始段,小弟先用C寫個空的main function先compile一次,再利用compile出來的asm程式導入project,問題就解決了,一開始小弟沒有明確敘述自己的問題,真是對您深感抱歉!!
再次感謝大大非常熱心的解惑,真希望有機會能和大大交流彼此的技術和經驗。
你好:
我最近在Vista上安裝Eclipse及SDCC成為8051的開發環境,看了一些文章都需要裝MinGW,我也裝了。但是New一個新的C Project後,都會產生error。"sh.exe" has stopped working, 請問您是否知道原因呢?
Jeff
有關開發環境建立, 請參考這個文章 http://jyhshin3.blogspot.tw/2009/03/sdcc-for-eclipse-install.html