当前位置:编程学习 > VB >>

请问各位高手:在命令行下编译keil的问题,先谢谢了!

在命令行下编译keil,生成HEX文件的问题:
在VB6中,我想将.C文件编译成.HEX文件。
程序如下:
     Dim Paths$, aa
    Paths = Text1.Text & " " & Text2.Text
    aa = Shell(Paths, 0) '           生成test.obj
    Paths = PaEx & "lx51.exe" & " " & Path & Wjms & ".obj"
    aa = Shell(Paths, 0)
    Paths = PaEx & "ohx51.exe" & " " & PaCs & Wjms
    aa = Shell(Paths, 0) '            生成text.hex,就可以烧写到51单片机中运行了。
说明:text1和text2中分别是C51.EXE和.c文件路径,包含文件名。PaEx和PaCs分别是KEIL\C51\BIN和.c文件路径,不含文件名。Wjms是C文件的名称,不含扩展名。
问题:第一步可以生成OBJ文件,但是以后两步就没有反应了。
请问各位高手:是什么问题?是必须要同一路径吗?各位高手请赐教!!!
我在这里首先谢谢啦!谢谢啦!!!!!! --------------------编程问答-------------------- 命令行调用一般来说要注意8.3的问题....你可以在每个Paths生成后,使用GetShortPathName函数将路径中的长路径转换为8.3短路径再SHELL:

Private Declare Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameA" ( _ 
 ByVal lpszLongPath As String, _ 
 ByVal lpszShortPath As String, _ 
 ByVal cchBuffer As Long) As Long

另外,如果路径带空格,建议使用引号将这个路径引起来,如:

shell "notepad.exe ""c:\program files\123.txt"""

两个连续引号用在字符串里代表输入一个字符的引号. --------------------编程问答-------------------- 上楼的老师:谢谢你的赐教!
我程序的路径设置


加入真实路径的实际程序如下: 
    Dim Paths$, aa 
    Paths = "C:\Keil\C51\BIN\C51.exe" & " " & "D:\A\A.c" 
    aa = Shell(Paths, 0) '          生成test.obj 
    Paths = "C:\Keil\C51\BIN\" & "lx51.exe" & " " & "D:\A\A.obj" 
    aa = Shell(Paths, 0) 
    Paths = "C:\Keil\C51\BIN\" & "ohx51.exe" & " " & "D:\A\A"
    aa = Shell(Paths, 0) '            生成text.hex,就可以烧写到51单片机中运行了。 
这样也只是能完成第一步的工作。 --------------------编程问答-------------------- 以下是我一实际工程中UV3生成的BAT中的全部内容:

[code=BatchFile]SET C51INC=d:\program files\Keil\C51\INC\Cygnal\;d:\program files\Keil\C51\INC\
SET C51LIB=d:\program files\Keil\C51\LIB
SET CPU_TYPE=C8051F120
SET CPU_VENDOR=Silicon Laboratories, Inc.
SET UV2_TARGET=Target 1
SET CPU_XTAL=0x05F5E100
d:\program files\Keil\C51\BIN\A51.EXE @STARTUP._ia
d:\program files\Keil\C51\BIN\C51.EXE @Cfg.__i
d:\program files\Keil\C51\BIN\C51.EXE @Global.__i
d:\program files\Keil\C51\BIN\C51.EXE @Link.__i
d:\program files\Keil\C51\BIN\C51.EXE @Motion.__i
d:\program files\Keil\C51\BIN\C51.EXE @Main.__i
d:\program files\Keil\C51\BIN\BL51.EXE @DRANGC~1.LNP
"d:\program files\Keil\C51\BIN\OH51.EXE" "Drang Ctrl" 
[/code]
从中可见,需要设置一些环境变量.

至于8.3以及空格问题貌似都是不影响的.

建议你把你的工程使用UV3编译,选项里注意勾上"Create Batch File",看看UV3在你机器上是怎么写这个BAT的. --------------------编程问答-------------------- 谢谢了!我去试一下。有事再请教您!!! --------------------编程问答--------------------
楼上的老师:谢谢你的赐教!

我已将批处理文件改为如下:

set PATH=%PATH%;C:\keil\C51\BIN;C:\keil\C51\INC;C:\keil\C51\LIB
set C51_LIB=C:\keil\C51\LIB\
set D:\A\
set DIR=D:\A
echo 转向工作目录
d:
cd %DIR% 
echo 编译文件...
c51 a.c
echo 链接目标文件...
BL51 C:\keil\C51\LIB\C51s.lib,D:\A\a.obj TO D:\A\A RAMSIZE(256) CODE(?CO?c(FC00H), ?CO?d(FFD0H))
echo 生成HEX文件...
OH51 D:\A\A.M51
echo 编译结束


此程序能完成整个过程。可产生a.lst、a.obj、a.m51、a.hex文件,但a.hex文件是空的,0字节。是否目标链接有问题?请指教!!!


--------------------编程问答-------------------- 你在UV3中编译成功没有?

先在这个IDE里编译OK,然后再对比一下它生成的BAT. --------------------编程问答-------------------- 你在UV3中编译成功了。但不存在BAT文件呀!!!是否在UV3中设置才可生成BAT文件? --------------------编程问答-------------------- 我在UV3中编译成功了。但不存在BAT文件呀!!!是否在UV3中设置才可生成BAT文件? --------------------编程问答-------------------- 在“输出”选项卡中,将“产生批处理”打钩,也生成不了BAT文件呀!!!
--------------------编程问答--------------------

对照一下我的设置吧. --------------------编程问答-------------------- 在“输出”选项卡中,将“产生批处理”打钩了,也不能生成BAT文件呀!!!  --------------------编程问答-------------------- 先谢啦!现在有了。使用两个向下箭头的按钮才能生成。

BAT文件的全部如下:

SET C51INC=C:\Keil\C51\INC\
SET C51LIB=C:\Keil\C51\LIB
SET CPU_TYPE=SST89C54
SET CPU_VENDOR=SST
SET UV2_TARGET=Target 1
SET CPU_XTAL=0x01F78A40
C:\Keil\C51\BIN\C51.EXE @3208_V~1.__I
C:\Keil\C51\BIN\BL51.EXE @3208_V4.lnp
"C:\Keil\C51\BIN\OH51.EXE" "3208_V4" 
--------------------编程问答-------------------- 现在双击该BAT文件,可以生成HEX文件了。万分感谢!!!!!! --------------------编程问答-------------------- 搞定就好. --------------------编程问答-------------------- to myjian:
  表示感谢! --------------------编程问答-------------------- 结帖吧你
If 本楼给分 Then 
    楼主木有小jj
End If
--------------------编程问答-------------------- 楼主能咨询个问题么  我的QQ 525653865  麻烦加一下 --------------------编程问答-------------------- 向老马表示感谢.  --------------------编程问答--------------------
引用 15 楼 ubufed 的回复:
to myjian:
  表示感谢!
还差几天就整整两年了,你就不能再等几天再挖坟么 --------------------编程问答--------------------
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,