【发布时间】:2018-09-18 06:32:51
【问题描述】:
我喜欢 Qt Creator 开发环境,现在需要使用 Keil C51 编译器/工具编译一些 C 代码。
是否可以将 Qt Creator IDE 与 Keil C51 工具一起使用?有人可以详细描述如何设置吗?
OR - 是不是另一个可以与 Qt Creator 集成的 8052 芯片编译器?
【问题讨论】:
标签: qt-creator keil
我喜欢 Qt Creator 开发环境,现在需要使用 Keil C51 编译器/工具编译一些 C 代码。
是否可以将 Qt Creator IDE 与 Keil C51 工具一起使用?有人可以详细描述如何设置吗?
OR - 是不是另一个可以与 Qt Creator 集成的 8052 芯片编译器?
【问题讨论】:
标签: qt-creator keil
现在,可以将 QtCreator 与 Qbs 一起使用(从 1.15 开始)。此外,还可以将 VSCode 与 Qbs 扩展一起使用。
【讨论】:
我可以确认,我可以将 QT 与 C51 一起使用。
我使用 QT 作为编辑器。 和 Keil C51 作为编译器。我用纯 C(不是 C++)为 STC 微控制器编写了一个程序。
我使用 Windows 批处理文件编译工作目录中的所有 *.c 文件,然后将它们链接到一个 hex 文件中。然后我设置 QT(项目 -> 构建设置 -> 构建步骤 -> 自定义)以在构建阶段使用此批处理(不要忘记正确设置工作目录)。
Keil 可以为特定项目生成一个批处理(参见项目->目标选项->输出->创建批处理文件)。然后如上所述在 QT 中使用此文件。
这种方式的主要缺陷是 - 当您更改项目配置或向项目添加新文件时,您需要从 Keil 重新生成 Batch。
使用 Keil 生成的 Batch,我编写了自己的 Bath,没有上述缺陷。
我想使用 Makefile 比 Batch 更好,因为它为 QT 提供了更多控制和有关编译期间错误的信息。但我现在没有“现成”示例。
简而言之,这批:
*.c 文件调用编译器*.obj 列表并调用链接器以获取二进制格式的固件映像列表:
REM "Folders"
SET C51FLDR=d:\Keil\C51
SET OUTFLDR=.\Objects
SET LSTFLDR=.\Listings
SET HEXNAME=PREP_FIRMWARE
SET C51INC=%C51FLDR%\Inc;%C51FLDR%\Inc\STC
SET C51LIB=%C51FLDR%\Lib
REM "Variables"
SET C51EXE=%C51FLDR%\BIN\C51.EXE
SET C51LNK=%C51FLDR%\BIN\BL51.EXE
SET C51HEX=%C51FLDR%\BIN\OH51.EXE
set OBJLIST=
REM "Defines"
SET CPU_TYPE=STC15W408S
SET CPU_VENDOR=STC
SET UV2_TARGET=Target 1
SET CPU_XTAL=0x02160EC0
SET SETTINGS="COMPACT ROM(COMPACT) OPTIMIZE (9,SIZE) BROWSE DEBUG OBJECTEXTEND LISTINCLUDE SYMBOLS TABS (2)"
echo ===================== Compile =====================
for %%f in (*.c) do (
echo %errorlevel%
setlocal EnableDelayedExpansion
%C51EXE% %%f %SETTINGS% "PRINT(%LSTFLDR%\%%~nf.lst) OBJECT(%OUTFLDR%\%%~nf.obj)"
if !errorlevel! neq 0 exit /b !errorlevel!
)
echo ===================== Link =====================
call :obj_list
echo %OBJLIST%
%C51LNK% %OBJLIST% TO "%OUTFLDR%\%HEXNAME%" PRINT("%LSTFLDR%\%HEXNAME%.m51") RAMSIZE(256)
echo %errorlevel%
if %errorlevel% GTR 1 exit /b %errorlevel%
echo ===================== Hex =====================
%C51HEX% "%OUTFLDR%\%HEXNAME%"
if %errorlevel% neq 0 exit /b %errorlevel%
echo ==========================================
echo Build Success
echo ==========================================
goto :eof
:obj_list
for %%f in (.\Objects\*.obj) DO call :concat %%f
set OBJLIST=%OBJLIST:~0,-1%
goto :eof
:concat
set OBJLIST=%OBJLIST%"%1",
goto :eof
【讨论】: