热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

在命令行下编译keil,生成HEX文件的问题:在VB6中,我想将.C文件编译成.HEX文件。程序如下:DimPaths$,aaPathsText1.Text
在命令行下编译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文件,但是以后两步就没有反应了。
请问各位高手:是什么问题?是必须要同一路径吗?各位高手请赐教!!!
我在这里首先谢谢啦!谢谢啦!!!!!!

20 个解决方案

#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


谢谢了!我去试一下。有事再请教您!!!

#5



楼上的老师:谢谢你的赐教!

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

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字节。是否目标链接有问题?请指教!!!


#6


你在UV3中编译成功没有?

先在这个IDE里编译OK,然后再对比一下它生成的BAT.

#7


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

#8


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

#9


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

#10




对照一下我的设置吧.

#11


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

#12


先谢啦!现在有了。使用两个向下箭头的按钮才能生成。

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" 

#13


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

#14


搞定就好.

#15


to myjian:
  表示感谢!

#16


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

#17


楼主能咨询个问题么  我的QQ 525653865  麻烦加一下

#18


向老马表示感谢. 

#19


引用 15 楼 ubufed 的回复:
to myjian:
  表示感谢!
还差几天就整整两年了,你就不能再等几天再挖坟么

#20


该回复于2011-05-10 12:20:13被版主删除

#21


  • 数据结构实验1— 线性表、链表的实现

推荐阅读
author-avatar
小爬虫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有