单片机list文件解析及 hardfalt问题定位

单片机list文件解析

单片机list文件解析.
单片机开发中 lst 文件 在调试中有很高的参考价值, 从list文件总基本可用看出所有的目标文件信息. 看出我们汇编文件在内存中的分布及执行过程. 进而发现一些隐藏的BUG.
st 文件实际是使用 objdump 反汇编 elf 文件得到的输出文件,它拥有比 map 文件更详细的信息。如果你的程序中加入了调试信息,那么你可以在 lst 中看到每一条指令的地址。借助 lst 文件,同时通过查看栈帧结构(可以通过查看相应的手册来确定栈帧的组成),通过在 lst 文件中查找 lr 的地址所在的位置,你就能立刻定位到问题。
以CH582 的工程配置为例, 项目->属性->C/C++构建->设置->工具设置->GNU RISC-V Create Flash Image->General,你可以在这个选项中指定更详细的信息。

在这里插入图片描述

文件总含有丰富的信息. listing file中出现的先后顺序加以说明:

1.页头段(Page Header)

	每个lst文件都有一个包含了编译器版本号、源文件名称、日期、时间、页号的头部。
	示例:
	EC_BLE_SOC.elf:     file format elf32-littleriscv
	architecture: riscv:rv32, flags 0x00000112:
	EXEC_P, HAS_SYMS, D_PAGED
	start address 0x00000000

还包含内部所有代码块的, 头地址.

Program Header:
    LOAD off    0x00001000 vaddr 0x00000000 paddr 0x00000000 align 2**12
         filesz 0x00000004 memsz 0x00000004 flags r-x
    LOAD off    0x00002000 vaddr 0x20000000 paddr 0x00000004 align 2**12
         filesz 0x0000287c memsz 0x0000287c flags r-x
    LOAD off    0x00004880 vaddr 0x00002880 paddr 0x00002880 align 2**12
         filesz 0x000291bc memsz 0x000291bc flags r-x
    LOAD off    0x0002e87c vaddr 0x2000287c paddr 0x0002ba3c align 2**12
         filesz 0x000005ac memsz 0x00002f20 flags rw-

符号列表段(Sections table)

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

示例1.段类型

Sections:
Idx Name            Size      VMA       LMA       File off  Algn  Flags
  0 .init           00000004  00000000  00000000  00001000  2**1  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .highcodelalign 00000000  00000004  00000004  0002ee28  2**0  CONTENTS
  2 .highcode       0000287c  20000000  00000004  00002000  2**1  CONTENTS, ALLOC, LOAD, READONLY, CODE
  3 .text           000291bc  00002880  00002880  00004880  2**2  CONTENTS, ALLOC, LOAD, READONLY, CODE
  4 .fini           00000000  0002ba3c  0002ba3c  0002ee28  2**0  CONTENTS, ALLOC, LOAD, CODE
  5 .dalign         00000000  2000287c  2000287c  0002ee28  2**0  CONTENTS
  6 .dlalign        00000000  0002ba3c  0002ba3c  0002ee28  2**0  CONTENTS
  7 .data           000005ac  2000287c  0002ba3c  0002e87c  2**2  CONTENTS, ALLOC, LOAD, DATA
  8 .bss            00002974  20002e28  0002bfe8  0002ee28  2**3  ALLOC
  9 .stack          00000000  20008000  20008000  0002ee28  2**0  CONTENTS
 10 .debug_info     000399df  00000000  00000000  0002ee28  2**0  CONTENTS, READONLY, DEBUGGING
 11 .debug_abbrev   00006f9c  00000000  00000000  00068807  2**0  CONTENTS, READONLY, DEBUGGING
 12 .debug_loc      0000a5a1  00000000  00000000  0006f7a3  2**0  CONTENTS, READONLY, DEBUGGING
 13 .debug_aranges  00000b40  00000000  00000000  00079d48  2**3  CONTENTS, READONLY, DEBUGGING
 14 .debug_ranges   00001f40  00000000  00000000  0007a888  2**3  CONTENTS, READONLY, DEBUGGING
 15 .debug_line     0001c557  00000000  00000000  0007c7c8  2**0  CONTENTS, READONLY, DEBUGGING
 16 .debug_str      00006518  00000000  00000000  00098d1f  2**0  CONTENTS, READONLY
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值