找回密码
 立即注册
楼主: durongze

官方给的例子里面源文件只有一个sample.c的话, 命令行下如何生成hex呢?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-05-08 04:33:05

79

主题

631

回帖

1152

积分

金牌会员

积分
1152
发表于 2024-8-14 18:14:10 | 显示全部楼层
21cns*** 发表于 2024-8-13 19:11
F:\stc\STC32G-DEMO\03-7Segment\C>F:\program\KeilC51\C251\BIN\C251.EXE @main.__i       -----main.-- ...

大佬,这个玩意不太好用是吧?  报的错误很模糊,有时候都不知道是在报啥对吧?
看看我下面这个例子,这个估计是头文件问题,但是报的是行太长。
C251 COMPILER V5.60.0.0 - SN: D2DZC-3I8FGC
COPYRIGHT ARM Germany GmbH 2018

C251 FATAL-ERROR -
  ACTION:  PARSING INVOKE-/#PRAGMA-LINE
  LINE:    "F:\program\KeilC51\C251\BIN\C251.EXE" "led01.c"

  ERROR:   LINE TOO LONG
C251 TERMINATED.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-08 09:04:05
已绑定手机

13

主题

1271

回帖

3027

积分

论坛元老

积分
3027
发表于 2024-8-14 18:41:33 | 显示全部楼层
duro*** 发表于 2024-8-14 18:14
大佬,这个玩意不太好用是吧?  报的错误很模糊,有时候都不知道是在报啥对吧?
看看我下面这个例子,这 ...

keil调用的同样的命令行,用keil编译提示应该是一样的,或者精简了一些。
你可以提供下你所有的源文件我给你试试。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-05-08 04:33:05

79

主题

631

回帖

1152

积分

金牌会员

积分
1152
发表于 2024-8-14 19:00:49 | 显示全部楼层
Objects\main.__i  这个文件通常在工程目录下的objects目录下,但是keil5好像是没生成。不知道咋弄的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-05-08 04:33:05

79

主题

631

回帖

1152

积分

金牌会员

积分
1152
发表于 2024-8-14 19:01:51 | 显示全部楼层
本帖最后由 durongze 于 2024-8-14 20:39 编辑

main.__i  文件的内容格式
"main.c" LARGE OMF2 ROM(COMPACT) OPTIMIZE (8,SPEED) BROWSE INCDIR(.\) DEBUG PRINT(.\main.lst) TABS (2) OBJECT(.\main.obj)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-05-08 04:33:05

79

主题

631

回帖

1152

积分

金牌会员

积分
1152
发表于 2024-8-14 20:24:52 | 显示全部楼层
本帖最后由 durongze 于 2024-8-14 20:37 编辑
21cns*** 发表于 2024-8-14 18:41
keil调用的同样的命令行,用keil编译提示应该是一样的,或者精简了一些。
你可以提供下你所有的源文件我 ...

感谢大佬回复:
我解决了。
1. 手动创建了led01.__i文件

"led01.c" LARGE OMF2 ROM(COMPACT) OPTIMIZE (8,SPEED) BROWSE INCDIR(.\) DEBUG PRINT(.\led01.lst) TABS (2) OBJECT(.\led01.obj)
2. 手动创建了sample.lnp文件
".\led01.obj"
TO ".\sample"

PRINT(".\sample.map") REMOVEUNUSED


3.然后用上面的命令就可以了。

4. 我感觉 C251命令后好像不能跟源文件啊,它好像就是需要__i文件才行貌似。另外我的__i文件是手动创建的,不知道ide是怎么生成的。能否用命令去生成__i文件呢?

5.sample.lnp也是我手动创建的,不知道能否用命令生成。

6. 贴一下具体执行过程

C251                      @led01.__i

C251 COMPILER V5.60.0.0 - SN: D2DZC-3I8FGC
COPYRIGHT ARM Germany GmbH 2018

C251 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
L251                      @sample.lnp

L251 LINKER/LOCATER V4.66.93.0 - SN: D2DZC-3I8FGC
COPYRIGHT ARM Germany GmbH 1995 - 2018
@sample.lnp ".\led01.obj"
TO ".\sample"

PRINT(".\sample.map") REMOVEUNUSED

Program Size: data=8.0 edata+hdata=256 xdata=0 const=0 code=180
L251 RUN COMPLETE.  6 WARNING(S),  0 ERROR(S)

MCS 51/251 OBJECT TO HEX FILE CONVERTER V1.47.0.0
COPYRIGHT ARM Germany GmbH 2000 - 2018

GENERATING INTEL H386 FILE: sample.hex

7. 我的源文件就一个,还是官方的例子,具体如下。其实这个不重要,我主要就是想知道命令的用法。
#include "STC32G.h"

#include "stdio.h"
#include "intrins.h"

typedef         unsigned char        u8;
typedef         unsigned int        u16;
typedef         unsigned long        u32;

#define MAIN_Fosc        24000000UL

//==========================================================================
/****************************** 介绍 ***********************************
注意:
    通常每个io口有8种模式:浮空输入,上拉输入,下拉输入,模拟输入,推挽输出,复用推挽,开漏输出,复用开漏
    但本mcu有4种:00准双向口,01推挽输出,10高阻输入,11开漏模式。

总共 8个 端口,端口数据寄存器用Px表示,位用Px.n表示
1.每个端口2个配置寄存器,PxM0,PxM1;两个模式寄存器对应的指定位有四种配置:
  00准双向口,01推挽输出,10高阻输入,11开漏模式
2.每个端口1个上拉电阻控制寄存器,PxPU;
  0:禁止端口内部的 :禁止端口内部的 4.1K上拉
  1:使能端口内部的 :使能端口内部的 4.1K上拉
3.每个端口1个施密特触发控制寄存器,PxNCS;
  0:使能端口的施密特触发功能。(上电复位后默认使能施密特触发)
  1:禁止端口的施密特触发功能。
4.每个端口1个电平转换速度控制寄存器,PxSR;
  0:电平转换速度快,相应的上下冲会比较大
  1:电平转换速度慢,相应的上下冲比较小
5.每个端口1个驱动电流控制寄存器,PxDR;
  0:增强驱动能力
  1:一般驱动能力
6.每个端口1个数字信号输入使能控制寄存器,PxIE;
  0:禁止数字信号输入。
  1:使能数字信号输入。
7.每个端口1个下拉电阻控制寄存器,PxPD;
  0:禁止端口内部的下拉电阻
  1:使能端口内部的下拉电阻


***********************************************************************/

/*************  本地常量声明    **************/


/*************  IO口定义    **************/

/*************  本地变量声明    **************/


/*************  本地函数声明    **************/

void  delay_ms(u8 ms);

/****************  外部函数声明和外部变量声明 *****************/


/******************** 主函数 **************************/
void main(void)
{
    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P1M1 = 0x30;   P1M0 = 0x30;   //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
    P6M1 = 0x00;   P6M0 = 0xff;   //设置为推挽输出
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

    P40 = 0;                //LED Power On

    while(1)
    {
        P60 = 0;                //LED On
        delay_ms(250);
        P60 = 1;                //LED Off

        P61 = 0;                //LED On
        delay_ms(250);
        P61 = 1;                //LED Off

        P62 = 0;                //LED On
        delay_ms(250);
        P62 = 1;                //LED Off

        P63 = 0;                //LED On
        delay_ms(250);
        P63 = 1;                //LED Off

        P64 = 0;                //LED On
        delay_ms(250);
        P64 = 1;                //LED Off

        P65 = 0;                //LED On
        delay_ms(250);
        P65 = 1;                //LED Off

        P66 = 0;                //LED On
        delay_ms(250);
        P66 = 1;                //LED Off

        P67 = 0;                //LED On
        delay_ms(250);
        P67 = 1;                //LED Off
    }
}

//========================================================================
// 函数: void  delay_ms(unsigned char ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void  delay_ms(u8 ms)
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;
          while(--i);
     }while(--ms);
}

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-08 09:04:05
已绑定手机

13

主题

1271

回帖

3027

积分

论坛元老

积分
3027
发表于 2024-8-14 22:05:21 | 显示全部楼层
C:\Keil_v5\C251\BIN>SET C251INC=C:\Keil_v5\C251\INC;C:\Keil_v5\C251\INC\STC

C:\Keil_v5\C251\BIN>SET C251LIB=C:\Keil_v5\C251\LIB

C:\Keil_v5\C251\BIN>c251 "led01.c" LARGE OMF2 ROM(COMPACT) OPTIMIZE (8,SPEED) BROWSE INCDIR(.\) DEBUG PRINT(.\led01.lst) TABS (2) OBJECT(.\led01.obj)

C251 COMPILER V5.60.0.0 - SN: K2DZC-ZZ4QCC
COPYRIGHT ARM Germany GmbH 2018

C251 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

C:\Keil_v5\C251\BIN>L251 led01.obj TO led01

L251 LINKER/LOCATER V4.66.93.0 - SN: K2DZC-ZZ4QCC
COPYRIGHT ARM Germany GmbH 1995 - 2018
led01.obj TO led01
Program Size: data=8.0 edata+hdata=256 xdata=0 const=0 code=180
L251 RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)

C:\Keil_v5\C251\BIN>oh251 led01

MCS 51/251 OBJECT TO HEX FILE CONVERTER V1.47.0.0
COPYRIGHT ARM Germany GmbH 2000 - 2018

GENERATING INTEL H386 FILE: led01.hex

C:\Keil_v5\C251\BIN>
C:\Keil_v5\C251\BIN>
C:\Keil_v5\C251\BIN>dir led01*.*
驱动器 C 中的卷没有标签。
卷的序列号是 8E40-5962

C:\Keil_v5\C251\BIN 的目录

2024/08/14  22:04             4,245 LED01
2024/08/14  21:59             4,114 led01.c
2024/08/14  22:03            54,849 led01.crf
2024/08/14  22:04               546 led01.hex
2024/08/14  22:03             7,668 led01.lst
2024/08/14  22:04            13,508 LED01.MAP
2024/08/14  22:03             4,453 led01.obj
               7 个文件         89,383 字节
               0 个目录 57,901,703,168 可用字节

C:\Keil_v5\C251\BIN>

我这里直接用命令是正常编译的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-08 09:04:05
已绑定手机

13

主题

1271

回帖

3027

积分

论坛元老

积分
3027
发表于 2024-8-14 22:07:34 | 显示全部楼层
命令行创建文本文件led01.__i:
echo "led01.c" LARGE OMF2 ROM(COMPACT) OPTIMIZE (8,SPEED) BROWSE INCDIR(.\) DEBUG PRINT(.\led01.lst) TABS (2) OBJECT(.\led01.obj) >>.\led01.__i

点评

最后的重定向 换小于号会好一点,就可以重复敲了。  发表于 2024-8-15 07:42
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-05-08 04:33:05

79

主题

631

回帖

1152

积分

金牌会员

积分
1152
发表于 2024-8-15 07:40:43 | 显示全部楼层
本帖最后由 durongze 于 2024-8-15 07:43 编辑
21cns*** 发表于 2024-8-14 22:05
C:\Keil_v5\C251\BIN>SET C251INC=C:\Keil_v5\C251\INC;C:\Keil_v5\C251\INC\STC

C:\Keil_v5\C251\BIN>SET ...

哦哦, 我晚点试试。我是搞到__i文件里,搞文件里有点不方便,总要清理缓存。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-05-08 04:33:05

79

主题

631

回帖

1152

积分

金牌会员

积分
1152
发表于 2024-8-15 14:31:59 | 显示全部楼层
21cns*** 发表于 2024-8-14 18:41
keil调用的同样的命令行,用keil编译提示应该是一样的,或者精简了一些。
你可以提供下你所有的源文件我 ...

大佬, 你有控制台烧写的工具吗 ?
我看论坛里别人说的都是基于串口的 ,但现在新的烧写方式是基于hid的这种,有办法能在控制台下进行烧写吗?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-05-08 09:04:05
已绑定手机

13

主题

1271

回帖

3027

积分

论坛元老

积分
3027
发表于 2024-8-15 15:15:06 | 显示全部楼层
duro*** 发表于 2024-8-15 14:31
大佬, 你有控制台烧写的工具吗 ?
我看论坛里别人说的都是基于串口的 ,但现在新的烧写方式是基于hid的 ...

STC官方明确不支持,第三方的有人基于python开发过,不过只能支持部分型号
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 03:10 , Processed in 0.119711 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表