关于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混合,或者同一个单片机里有多个工程,通常是不需要做函数定位的,这样做会降低编译器的效率

谈谈在keil下的代码定位的更多相关文章

  1. KEIL C51之绝对地址定位

    单片机空间分配看*.M51文件,ARM,DSP空间分配看*.map文件 1.函数定位 假如要把C源文件 tools.c 中的函数 int BIN2HEX(int xx) { ... } 放在CODE ...

  2. C# 词法分析器(二)输入缓冲和代码定位

    系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 一.输入缓冲 在介绍如何进行词法分析之前,先来说说一 ...

  3. KEIL下分散加载文件的使用(zt)

    KEIL下分散加载文件的使用   对于分散加载的概念,在<ARM体系结构与编程>书中第11章有明确介绍. 分散加载文件(即scatter file 后缀为.scf)是一个文本文件,通过编写 ...

  4. ST在keil下开发时候文件options配置的一些小技巧

    作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:Conscience_Remains 总述     这是之前ST芯片载keil下开发时候总结的一些代码文件options配置小笔记,虽然不是很复杂 ...

  5. 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想

    首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...

  6. 让IE6下支持固定定位

    让IE下支持固定定位 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  7. 如何在sourcetree 下提交代码到gerrit上

    gerrit的审核机制决定了提交到远程到代码并非远程master分支,而是/refs/for/master 分支,所以需要解决怎么在sourcetree下提交代码到/refs/for/master分支 ...

  8. robotframework代码定位感悟

    robotframework代码定位感悟: 在做自动化的时候,有时候还是要考虑真实的操作,考虑人为反应,网络,页面渲染,服务器处理请求的过程及数据是否真实到达响应的位置, 不能一味的按照程序的速度 去 ...

  9. KEIL MDK 查看代码量、RAM使用情况--RO-data、RW-data、ZI-data的解释(转)

    源:KEIL MDK 查看代码量.RAM使用情况--RO-data.RW-data.ZI-data的解释 KEIL RVMDK编译后的信息 Program Size: Code=86496 RO-da ...

随机推荐

  1. OC学习笔记[注意事项]

    alloc  new  retain之后都必须要调用release方法 计数器要变只有这几种方法 retain release alloc new copy方法才会使计数器改变,谁想用人家对象,就对他 ...

  2. 随便说说removeFromSuperview方法

    之前写过一篇关于removeFromSuperview方法处理的文章,写完后一直就没怎么更新这篇文章.这两天回过头来看看,感觉这篇文章有些地方写的不够严谨,而且还有一些自己理解错的地方,所以打算重写这 ...

  3. Android(java)学习笔记189:eclipse 导入项目是提示:某些项目因位于工作空间目录中而被隐藏。

    导致这个错误的原因是工程重名了: 并不是仅仅指文件夹重名,相信很多人也曾经修改过文件夹的名称,可惜没什么用处,关键是修改工程里面的一个文件!也就是.project这个文件! 用记事本打开,修改一下&l ...

  4. CS=0xFFFF IP=0x0000与CS=F000 IP=FFF0

    计算机自动上电后,有些书上说CS=0xFFFF IP=0x0000,例如linux内核设计的艺术(第三版).也有一些书说CS=F000 IP=FFF0,例如赵炯的linux内核完全注释. 其实并不是说 ...

  5. 高效删除 ListItem

    The most efficient way to a lot of transaction in SharePoint is using of SPWeb.ProcessBatchData meth ...

  6. JavaScript入门(2)

    一.JS输出内容--(document.write) document.write()可用于直接向HTML输出流写内容,即直接在网页中输出内容. 第一种:输出内容用" "括起来,直 ...

  7. git warning: LF will be replaced by CRLF in 解决办法

    在使用git的时候,每次执行 #git add "目录" git add . 都会提示这样一个警告消息: warning: LF will be replaced by CRLF  ...

  8. delphi 截取指定符号之间的字符串-随机读取

    unit Unit1; interface uses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...

  9. 【html】【5】html class属性css样式

    必看参考: http://www.divcss5.com/css3-style/ http://www.jb51.net/css/142448.html http://www.w3school.com ...

  10. 函数还能这样玩儿~实现类似add(1)(2)(3)的函数

    人生的第一份前端工作找到了,感谢大神主子们给半路出家自学的我这么多的机会,很高兴正式踏上客观又乐趣满满的程序员之路,哇咔咔咔. ​ 分享一个准备面试时遇到的一个有趣的问题: 要求实现类似add(1)( ...