在命令行下编译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文件,但是以后两步就没有反应了。
请问各位高手:是什么问题?是必须要同一路径吗?各位高手请赐教!!!
我在这里首先谢谢啦!谢谢啦!!!!!!

解决方案 »

  1.   

    命令行调用一般来说要注意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"""
    两个连续引号用在字符串里代表输入一个字符的引号.
      

  2.   

    上楼的老师:谢谢你的赐教!
    我程序的路径设置
    加入真实路径的实际程序如下: 
        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单片机中运行了。 
    这样也只是能完成第一步的工作。
      

  3.   

    以下是我一实际工程中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的.
      

  4.   


    楼上的老师:谢谢你的赐教!我已将批处理文件改为如下: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字节。是否目标链接有问题?请指教!!!
      

  5.   

    你在UV3中编译成功没有?先在这个IDE里编译OK,然后再对比一下它生成的BAT.
      

  6.   

    你在UV3中编译成功了。但不存在BAT文件呀!!!是否在UV3中设置才可生成BAT文件?
      

  7.   

    我在UV3中编译成功了。但不存在BAT文件呀!!!是否在UV3中设置才可生成BAT文件?
      

  8.   

    在“输出”选项卡中,将“产生批处理”打钩,也生成不了BAT文件呀!!!
      

  9.   

    在“输出”选项卡中,将“产生批处理”打钩了,也不能生成BAT文件呀!!! 
      

  10.   

    先谢啦!现在有了。使用两个向下箭头的按钮才能生成。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" 
      

  11.   

    现在双击该BAT文件,可以生成HEX文件了。万分感谢!!!!!!
      

  12.   

    to myjian:
      表示感谢!
      

  13.   

    结帖吧你
    If 本楼给分 Then 
        楼主木有小jj
    End If