• keil代码定位


    关于C语言,我们一般都知道对于RAM定位可以用关键字 _at_,但对于程序代码定位往往感到很迷惑,

    其实keil中的程序代码定位功能极为强大

    Menu: Options for Target 'Target' -> BL Locate

    Use Memory Layout from Target Dialog
    Code Range: 0X01D3-0XFFFF
    Xdata Range: 0X0000--0XFFFF
    Code:
    ?C_C51STARTUP(0X1D3),?C_INITSEG,?PR?UART0_ISR?BOOTLOAD,?PR?MAIN?BOOTLOAD,?PR?BOOT_LOAD?BOOTLOAD,?PR?MAIN_START?IDENTIFIER(0X400)

    以上就是程序定位的一个实例,可以按照该模式,对没个函数进行精确定位,可能有人对“,?PR?UART0_ISR?BOOTLOAD”之类的写法比较迷惑,其实只要我们仔细研读MAP文件就能发现其中的奥妙,下面就是定位后的 MAP 文件,有兴趣的朋友可以琢磨一下:


    * * * * * * * C O D E M E M O R Y * * * * * * *
    *** GAP ***
    CODE 01D3H 008CH UNIT ?C_C51STARTUP
    CODE 025FH 0018H UNIT ?C_INITSEG
    CODE 0277H 0011H UNIT ?PR?UART0_ISR?BOOTLOAD
    CODE 0288H 00C5H UNIT ?PR?MAIN?BOOTLOAD
    CODE 034DH 00B3H UNIT ?PR?BOOT_LOAD?BOOTLOAD
    CODE 0400H 0782H UNIT ?PR?MAIN_START?IDENTIFIER

    Principle: ?PR?MAIN_START?IDENTIFIER(0X400)
    BaseRle: 0X400(DWNLD_SECTOR)


    第二种方法

    在工程的Option For Target - BL51 Locate页的CODE编辑框内填入“?PR?
    函数名?文件名(地址)”,多个定位用“,”隔开。
    例如:?PR?_SetLedFlash?MAIN(0x1000),?PR?ClrLedFlash?MAIN(0x1100)
    把函数void SetLedFlash(U8 m_data);和void ClrLedFlash(void);分别定位在
    0x1000和0x1100处。
    定位的时候要注意留够足够空间。另外,一般只有系统需要做在线更新,或者是汇编与C混
    合,或者同一个单片机里有多个工程,通常是不需要做函数定位的,这样做会降低编译器

  • 相关阅读:
    react native 学习资料整理
    yii cookie ,session 操作
    react native 的js 文件从哪里获取
    react native与现有的应用程序集成
    ubuntu 12.04 react-native 安装
    html ul li的学习
    CAGradientLayer的一些属性解析
    ubuntu 安装 swoole 和mac 安装swoole 扩展
    iOS React-Native入门指南之HelloWorld
    实现微信浏览器内打开App Store链接(已被和谐,失效了)
  • 原文地址:https://www.cnblogs.com/Richard1981/p/2832395.html
Copyright © 2020-2023  润新知