|
1. 單文件工程
只有一個(gè)源代碼文件的話,只需執(zhí)行 sdcc foo.c 命令,就可將源代碼編譯成符合intel hex格式的代碼了。
期間sdcc會(huì)產(chǎn)生下列的輸出文件:
foo.asm 匯編代碼,由編譯器創(chuàng)建
foo.lst 匯編列表文件,由匯編器創(chuàng)建
foo.rst 更新過的列表文件,由鏈接器創(chuàng)建
foo.sym 符號(hào)列表文件,由匯編器創(chuàng)建
foo.rel/foo.o 就是obj文件
foo.map 內(nèi)存映射文件
foo.mem 內(nèi)存使用統(tǒng)計(jì)文件
foo.ihx intel hex格式的代碼
如果使用了調(diào)試模式,還會(huì)有:
foo.adb 用于創(chuàng)建.cdb文件的含有調(diào)試信息的中間文件
foo.cdb 用于調(diào)試的文件,有一個(gè)專門的文檔講這種文件的格式
foo. Absolute Object Module Format(AOMF)文件
foo.dump 用于調(diào)試編譯器本身的dump文件
1.2 多文件工程
假設(shè)main函數(shù)在foomain.c中,另外還有foo1.c和foo2.c,那么可以這樣編譯:
sdcc -c foo1.c
sdcc -c foo2.c
sdcc foomain.c foo1.rel foo2.rel
第三條命令也可以換成下面的兩條命令:
sdcc -c foomain.c
sdcc foomain.rel foo1.rel foo2.rel
如果是寫成后面這種形式,最后一條命令中的第一個(gè)rel文件必須包含main函數(shù)
1.3 ihx文件的后處理
.ihx文件不能直接用于里面燒,要經(jīng)過一步處理:
packihx foo.ihx > foo.hex
這樣foo.hex就可以拿去燒了
1.4 使用lib庫
如果要用到標(biāo)準(zhǔn)庫之外的lib庫,可以寫這樣的命令:
sdcc foomain.c foolib.lib -L mylib
-L選項(xiàng)指定庫的搜索路徑,可以是相對路徑,也可以是絕對路徑
sdcc的lib文件都是純文本,自帶的標(biāo)準(zhǔn)庫的內(nèi)容是相關(guān)rel文件的列表
用sdcclib做出來的lib是一種帶標(biāo)簽的純文本
1.5用sdcclib制作庫
假設(shè)一個(gè)庫libfoo.lib包括libfoo1.c和libfoo2.c兩個(gè)源代碼文件,可以這樣來生成libfoo.lib:
sdcc -c libfoo1.c
sdcc -c libfoo2.c
sdcclib libfoo.lib libfoo1.rel
sdcclib libfoo.lib libfoo2.rel
這樣得到libfoo.lib以后,還可以用
sdcclib -s libfoo.lib
查看庫中包含的符號(hào),或者用
sdcclib -m libfoo.lib
查看庫中包含的rel文件的名字
|
|