关于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. CentOS6.5一键安装MySQL5.5.32(源码编译)

    ###################################################mysql_install.sh                                 ...

  2. Java基础知识强化之集合框架笔记60:Map集合之TreeMap(TreeMap<Student,String>)的案例

    1. TreeMap(TreeMap<Student,String>)的案例 2. 案例代码: (1)Student.java: package cn.itcast_04; public ...

  3. Android 高级UI设计笔记01:使用ExpandableListView组件(ListView的扩展)

    1.ExpandableListView是一个用来显示二级节点的ListView. 比如如下效果的界面: 2.使用ExpandableListView步骤 (1)要给ExpandableListVie ...

  4. 【Android】数据库的简单应用——增删改查的操作

    还记得getReadableDatabase()和getWritableDatabase()方法吧?在调用它们的时候会返回一个SQLiteDatabase对象,借助这个对象就可以进行CURD(Crea ...

  5. C#面向对象(二)

    一:抽象方法 1. 在面向对象编程语言中抽象方法指一些只有方法声明,而没有具体方法体的方法.抽象方法一般存在于抽象类或接口中. 在一些父类中,某些行为不是非常明确,因此无法用代码来具体实现,但是类还必 ...

  6. 《你不常用的c#之一》:略谈unsafe

    转自csdn:http://blog.csdn.net/robingaoxb/article/details/6199508 msdn里讲到: “在 C# 中很少需要使用指针,但仍有一些需要使用的情况 ...

  7. Android eclipse - aapt.exe has stopped working.

    今天在修改Android的布局文件的时候,发现每保存一次,就提示: aapt.exe has stopped working(appt.exe已停止工作).很是郁闷,当时Android控制台已经提示错 ...

  8. iOS与Android通用AES加密

    找了很久才成功的aes 加密  服务器java写的 下载地址 https://pan.baidu.com/s/1nvi1zjr

  9. OC调用Swift 整理步骤!总结别人的!方便自己查找!

    1. 2. 上面的修改了一个配置项,有一个Product Module Name在后面会使用. 在工程里面点击File/New/File…,选择iOS/Source/Cocoa Touch Class ...

  10. c#equals相关

    1.==是直接比较值类型的值或引用类型的引用地址,但==不能用于struct,struct只能用equals来比较.==一般情况下与object.equals得到的结果是相等的. 2.Referenc ...