Keil C51 之LST文件

发布者:石头12345最新更新时间:2018-06-21 来源: eefocus关键字:Keil  C51  LST文件 手机看文章 扫描二维码
随时随地手机看文章

     Keil C51编译器在编译程序时,会生成一个扩展名为LST的列表文件,也被称为listing file。

     这个文件包含了有关编译过程的丰富信息,该文件由多个段组成,其中Symbol Listing 和 Module Information两个段对于用户分析调试程序尤其有用,下面按照各个段在             listing file中出现的先后顺序加以说明:


    一、页头段(Page Header)   


    每个lst文件都有一个包含了编译器版本号、源文件名称、日期、时间、页号的头部。示例:

    

  C51 COMPILER V7.20   MEASURE       10/01/2004 14:05:05 PAGE 1


   

     二、命令段(Command Line)

    命令段展示了 Keil IDE 调用C51编译器时传递的所有命令, 示例:  


  C51 COMPILER V7.20, COMPILATION OF MODULE MEASURE
  OBJECT MODULE PLACED IN Measure.OBJ
  COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Measure.c HOLD(128,
                     -0,0) OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECT
                     -EXTEND CODE LISTINCLUDE SYMBOLS



    三、源码段(Source Code)

    源码段展示了每行源程序及其行号。

    COND指令,可以控制条件编译代码(#if 作用范围内的代码)被源码段列出,NOCOND指令,可以控制条件编译代码不被源码段列出。

    用户可以使用 LISTINCLUDE 指令,让源码段显示 #include 所包含的文件内容,默认情况下,#include包含的文件内容不被显示。

    源码段示例:


  53          char code ERROR [] = "\n*** ERROR: %s\n";
  54
  55          #define PERIOD     -250
  56          #define WRONGINDEX 0xffff
  57
  58
  59          /* The following function is called from */
  60          /* the interrupt service routine. */
  61          /* Save current measurements in save_record */
  62
  63
  64          #pragma REGISTERBANK (1)
  65
  66          static void save_current_measurements (void) {
  67   1        save_record[sindex++] = current;
  68   1        if (sindex == SCNT) sindex = 0;
  69   1        if (sindex == savefirst)  {
  70   2          if (++savefirst == SCNT)  savefirst = 0;
  71   2        }
  72   1      }
  73
  74
  75          /* Timer 0 interrupt service function */
  76          /* executes each 250 usec @ 12 MHz Crystal Clock */
  77
  78          void timer0 (void) interrupt 1 using 1 {
  79   1
  80   1        unsigned char i;
  81   1
  82   1        if (measurement_interval)  {
  83   2          save_current_measurements ();
  84   2          measurement_interval = 0;
  85   2        }

    


    四、汇编代码段(Assembly Listing)

    汇编代码段包含了由C语言程序编译产生的汇编代码,CODE 指令可以控制LST文件产生汇编代码段。

    汇编代码段示例:


            ; FUNCTION save_current_measurements (BEGIN)
                                           ; SOURCE LINE # 66
                                           ; SOURCE LINE # 67
0000 0500        R     INC     sindex+01H
0002 E500        R     MOV     A,sindex+01H
0004 AE00        R     MOV     R6,sindex
0006 7002              JNZ     ?C0064
0008 0500        R     INC     sindex
000A         ?C0064:
000A 14                DEC     A
000B FF                MOV     R7,A
000C 120000      R     LCALL   L?0079
000F A809              MOV     R0,AR1
0011 FC                MOV     R4,A
0012 7D01              MOV     R5,#01H
0014 120000      R     LCALL   L?0077
                                           ; SOURCE LINE # 68
0017 E500        R     MOV     A,sindex+01H
0019 B4E80A            CJNE    A,#0E8H,?C0001
001C E500        R     MOV     A,sindex
001E B40205            CJNE    A,#02H,?C0001
0021 E4                CLR     A
0022 F500        R     MOV     sindex,A
0024 F500        R     MOV     sindex+01H,A
0026         ?C0001:
                                           ; SOURCE LINE # 69
0026 E500        R     MOV     A,sindex+01H
0028 B5001B      R     CJNE    A,savefirst+01H,?C0004
002B E500        R     MOV     A,sindex
002D B50016      R     CJNE    A,savefirst,?C0004



    五、符号列表段(Symbol Listing)

    符号列表段包含了源程序文件中定义的变量信息,比如变量名称、类别(SFR、structure、typedef、static、public、auto、extern)、存储空间、数据类型、偏移量、占用       字节数等。SYMBOLS 指令控制LST文件产生符号列表段。

    符号列表段示例:


NAME                        CLASS   MSPACE  TYPE    OFFSET  SIZE
====                        =====   ======  ====    ======  ====
P4 . . . . . . . . . . . .  SFR      DATA   U_CHAR   00E8H  1
P5 . . . . . . . . . . . .  SFR      DATA   U_CHAR   00F8H  1
BD . . . . . . . . . . . .  ABSBIT   -----  BIT      00DFH  1
current. . . . . . . . . .  PUBLIC   DATA   STRUCT   0000H  11
ERROR. . . . . . . . . . .  PUBLIC   CODE   ARRAY    0416H  16
sindex . . . . . . . . . .  PUBLIC   DATA   U_INT    000BH  2
clock. . . . . . . . . . .  * TAG *  -----  STRUCT   -----  5
  hour . . . . . . . . . .  MEMBER   -----  U_CHAR   0000H  1
  min. . . . . . . . . . .  MEMBER   -----  U_CHAR   0001H  1
  sec. . . . . . . . . . .  MEMBER   -----  U_CHAR   0002H  1
  msec . . . . . . . . . .  MEMBER   -----  U_INT    0003H  2
size_t . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
menu . . . . . . . . . . .  STATIC   CODE   ARRAY    00C7H  847
ADCON. . . . . . . . . . .  SFR      DATA   U_CHAR   00D8H  1
mdisplay . . . . . . . . .  STATIC   DATA   BIT      0001H  1
interval . . . . . . . . .  PUBLIC   DATA   STRUCT   0014H  4
interval . . . . . . . . .  * TAG *  -----  STRUCT   -----  4
  min. . . . . . . . . . .  MEMBER   -----  U_CHAR   0000H  1
  sec. . . . . . . . . . .  MEMBER   -----  U_CHAR   0001H  1
  msec . . . . . . . . . .  MEMBER   -----  U_INT    0002H  2
wchar_t. . . . . . . . . .  TYPEDEF  -----  CHAR     -----  1
_getkey. . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
BSY. . . . . . . . . . . .  ABSBIT   -----  BIT      00DCH  1
_toupper . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_printf. . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_set_interval. . . . . . .  EXTERN   CODE   PROC     -----  -----
_read_index. . . . . . . .  STATIC   CODE   PROC     0000H  -----
  buffer . . . . . . . . .  AUTO     DATA   PTR      0000H  3
  index. . . . . . . . . .  AUTO     DATA   INT      0003H  2
  args . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
measurement_interval . . .  STATIC   DATA   BIT      0002H  1



    六、模块信息段(Module Infomation)

    模块信息段提供了源程序文件中使用的各种存储区的尺寸信息,示例:


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    902    ----
   CONSTANT SIZE    =   1062    ----
   XDATA SIZE       =   8184    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24       8
   IDATA SIZE       =   ----      15
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.



    七、警告和错误段(Warnings and Errors)

    

    LST文件将编译过程中产生的错误、警告信息,保存在警告和错误段中。这些信息和编译时屏幕显示的提示信息相同。


关键字:Keil  C51  LST文件 引用地址:Keil C51 之LST文件

上一篇:51单片机启动代码:STARTUP.A51
下一篇:Keil C51对C语言的关键词扩展之十八:using

推荐阅读最新更新时间:2024-03-16 16:06

混合式调度器C51源代码和相关注释
/*============================================================== 1ms时标 混合式调度器(一个抢占式任务,多个合作式任务) 作者:shadow.hu ===============================================================*/ #include reg52.h #define uchar unsigned char #define ushort unsigned short #define SCH_MAX_TASKS 9 #define ERROR_SCH_TOO_MANY_TASKS 9 #define ERR
[单片机]
C51单片机学习(二):中断系统和定时器
中断系统: 中断概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。 中断的结构图 其中一些说明: 1、(P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降 沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时, 中断标志IE0(TCON.1)置1,向CPU申请中断。 2、(P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中
[单片机]
<font color='red'>C51</font>单片机学习(二):中断系统和定时器
AT24C01-AT24C256通用源程序(C51
据说是AT24C01-AT24C256通用源程序,但按照我的经验,这个源程序仅适合AT24C04-AT24C256。 /*Sample: /*main(){ ... /* ReadMem(l,x,y); /*读。l为本次访问的器件号,在宏定义时分配不同芯片的不同 器件号, x为本次欲读出的字节数;y为本次读数的起始地址*/ /* ... /* WriteMem(l,x,y); /*写。l为本次访问的器件号,在宏定义时分配不同芯片不同 的器件号, x为本次欲写入的字节数;y为本次写数的起始地址, 注:当心页写入的地址规律,即页地址在同一页内滚动;否则会出现页
[单片机]
C51编程几个有用的模块-键盘扫描模块
键盘扫描模块有两种工作方式, 一种为自动的由时钟模块调用, 另一种是由程序员自行调用。 1) 由时钟模块自动调用的方式 将时钟模块实现文件(Timer.h)及键盘扫描模块的实现文件(KBScan。c)包含进工程, 在Config.h 文件中添加TIMER_KBSCANDELAY宏。 时钟模块自动对时钟中断进行计数, 当达到TIMER_KBSCANDELAY宏所定义的值后, 自动调用键盘扫描模块中的函数KBScanProcess()进行键盘扫描,也就是说,这个宏的值可以决定按键消抖动的时间。 用户应该提供两个回调函数OnKBScan()及onKeysPressed()。 在函数OnKBScan中进行键盘扫描, 并返回扫描
[单片机]
单片机双机通信c51程序
工程名称:双机通信 说明:此程序可以实现两个 单片机 之间的相互通信;串口采用方式1 工作,10位异步接受和发送,波特率可变,由定时器1控制;且含有校验 程序说明:SCON:串口通信控制寄存器 SBUF:串行口的收发缓冲寄存器 PCON:电源管理寄存器。当SMOD=1时串行口的波特率加倍。 IE:中断允许寄存器。ES=1表示允许串行口中断 TI:发送中断标志位,TI由硬件置位,置位表示一帧信息发送结束,TI在发送数据前必须由软件清0 RI:接收中断标志位,RI由硬件置位,置位表示一帧信息接收结束,RI在接收数据前必须由软件清0 *********************************************
[单片机]
C51编译器-高级编程技巧(3)-C语言与汇编的接口
C程序与汇编的接口 Cx51程序可以方便地与8051汇编程序接口。A51汇编器是一个以OMF-51格式发射对象模块的8051宏汇编器。通过观察一些编程规则,你可以在C程序中调用汇编程序,反之亦然。在汇编模块中声明的公有变量在C程序中也可以使用。 在C程序中调用汇编程序有几个方面的原因。一是可以使用已有的汇编程序,二是在希望运行速度快的地方使用,三是在希望直接用汇编操作SFR或使用I/O存储器映像的地方使用。 对于一个将在C程序中调用的汇编程序,它的参数传递规和值返回规则必须与C函数一致。就应用上来说,它必须看起来像一个C函数。 Function Parameters函数参数 一般情况下,C函数可以通过寄存器传递三个参数。其
[单片机]
如何学习51单片机/心得/KEIL4/DXP
什么是单片机 学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。 有人觉得要先学汇编。不过我个人觉得,学习51单片机,还是从C语言入手,一来方便,二来容易上手,仁者见仁,智者见智吧。 关于学习51单片机的书籍,市场上有很多,大家可以择优选取。 那么,如何用程序控制单片机的呢? 我开始学单片机的时候也曾有过这样的困惑啊,ok,下面帮大家整理一下思路。 怎么在Keil里写程序?keil怎么安装破解? 用过VC6.0的同学都知道,VC6.0是一个编译环境。什么是编译环境?简单地说,就是你写代码的地方。 那么,同理,单片机的编译环境就是Ke
[单片机]
如何学习51单片机/心得/<font color='red'>KEIL</font>4/DXP
C51系列单片机设计物体分级设备的测量光幕
1引言 光幕是电子测量系统中应用比较多的一种设备。利用光幕可以测量恒速传送带上的物体高度、长度或宽度等一系列数据,以便为后面的电子系统提供相应的参数。本文给出了一种利用单片机实现物体高度测量的光幕测量方法。 2光幕测量物体高度的基本原理 图1所示是一个用普通光幕测量物体高度的测试原理结构示意图。图中,光幕的一边等间距安装有多个红外发射管,另一边相应的有相同数量同样排列的红外接收管,每一个红外发射管都对应有一个相应的红外接收管,且安装在同一条直线上。当同一条直线上的红外发射管、红外接收管之间没有障碍物时,红外发射管发出的调制信号(光信号)能顺利到达红外接收管。红外接收管接收到调制信号后,相应的电路输出低电平,而在
[单片机]
用<font color='red'>C51</font>系列单片机设计物体分级设备的测量光幕
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved