在使用Keil C51時,要讓Keil C51支持混編則需要在混編的.c文件上右鍵選擇Options for File '*'(ALT+F7),打開選項界面后,在 Properties 頁 勾上 Generate Assembler SRC File 和 Assemble SRC File ,如下圖所示:
這樣設置后,Keil C51就可以編譯了。
但是在VSCode中的EIDE下,沒有這種設置,各種查詢后,只能讓EIDE生成SRC文件,沒找到怎么讓其像Keil似的直接編譯SRC,最后想到不是很完美的方法,涉及到混編的.c文件修改后,需要編譯兩次才能通過成功或生效,原因看完步驟后再講,步驟如下:
一、首先讓EIDE生產SRC文件
1、在EIDE下右鍵混編的.c文件->修改此文件的編譯器選項
2、附加編譯器選項:SRC(${OutDir}/${OutName}.src)
二、創建bat來編譯SRC文件生成OBJ文件
1、新建個bat,用來編譯SRC文件(生成OBJ文件)。
@echo offREM 切換到bat文件所在的目錄
cd /d %~dp0REM 使用時需要更改為實際A51.EXE的路徑
set A51="C:\Keil_v5\C51\BIN\A51.EXE"pushd %1 & for /r %%i in (*.src) do (set srcfilename=%%~iset objpath=%%~dpiset objname=%%~ni
)REM echo %A51%
REM echo %srcfilename%
REM echo %objpath%%objname%.o%A51% %srcfilename% OBJECT(%objpath%%objname%.o) PR(%objpath%%objname%.ls1) EP DEBUG
2、用EIDE的編譯器選項中的用戶任務中的構建前任務添加任務來執行這個bat
當然混編文件(.c)修改后,首次編譯會報錯或不生效,再次編譯才能通過。通過上邊的步驟可看出,因為首次編譯執行bat時,沒有SRC或還未更新,所以首次只生成或更新SRC,再次編譯執行bat這是才能通過SRC生成OBJ文件,進而EIDE的linking步驟才能找到或使用新的OBJ(.o)文件)
三、最后總結
用這個方案,如果修改了混編文件則至少要編譯兩遍才能生效!