MDK链接器的符号的使用

本文详细介绍了MDK链接器符号与C语言变量的关系,包括局部变量、全局变量和静态变量的符号表示。同时,阐述了MDK链接器生成的段信息,如Load$$Region$$Base等,及其在程序中的应用。这些符号对于确定程序结束位置、内存管理等具有重要作用,例如使用Load$$ER_IROM1$$Limit来确定程序结束并在其后存储用户数据,或利用Image$$RW_IRAM1$$ZI$$Limit进行动态内存分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、符号名与C语言变量的关系

  局部变量放在栈里面,不会被其他地方引用,无需链接,故符号表里不存储局部变量;

  全局变量或静态变量的变量名与符号表里的名字是一一对应的,所不同的是,符号表里记录的是变量地址,而不是变量;C语言里操作变量是直接使用变量,而不是使用地址(虽然实际上是操作变量所在地址的内容);

  例如,

nRecv                                    0x2000004c   Data           4  debug.o(.data)

这个符号,我们在c语言里操作是这样的nRecv=0,而不是*nRecv=0;

  但是,在汇编里面操作的符号就是它后面的地址,给nRecv赋值,写法应该是:

    IMPORT nRecv
    LDR R0, =nRecv; move c variable(nRecv)'s address to R0
    MOV R1, #0
    STR R1, [R0]
    

  所以,符号表里的符号后面的值=C语言里变量的地址;

  当然,对于函数来说也是一样的:

__printf                                 0x080003cd   Thumb Code   388  __printf_flags_ss_wp.o(.text)
    strcpy                                   0x08000555   Thumb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值