接着下来这段代码,是跟调试有关的,如下:

/*

* Debugging stuff

*

* Note that these macros must notcontain any code which is not

* 100% relocatable. Any attemptto do so will result in a crash.

* Please select one of thefollowing when turning on debugging.

*/

这段注释意思是说下面的宏定义代码只能包括100%可重定位的代码,否则会导致运行崩溃的危险。如果要调试时,要选择合适的宏来使用。



#ifdefDEBUG

如果定义了宏变量DEBUG,就选择编译调试宏代码。


#ifdefined(CONFIG_DEBUG_ICEDCC)

如果定义使用CP14调试协处理器,就使用下面的宏定义。


#ifdefCONFIG_CPU_V6

.macro loadsp,rb

.endm

.macro writeb,ch, rb

mcr p14,0, \ch, c0, c5, 0

.endm

#else

.macro loadsp,rb

.endm

.macro writeb,ch, rb

mcr p14,0, \ch, c1, c0, 0

.endm

#endif

这段代码主要根据CONFIG_DEBUG_ICEDCC宏定义来处理,如果编译时定义了CONFIG_DEBUG_ICEDCC宏,那么就使用这些调试宏。这个宏CONFIG_DEBUG_ICEDCC是什么意思呢?从那里冒出来的呢?先从字面上解释一下,CONFIG是配置的意思,DEBUG是调试,ICEDCC是什么呢?ICE其实是isee you的缩写,DCCdebugcommunicationschannel的缩写。要明白上面这段代码意思,需要深入查看ARM公司的ARM9EJ-S的嵌入式调试文档,就可以看到与CP14调试通信通道协处理器相关内容。调试通信通道协处理DCC提供了两个32位寄存器用于传送数据,还提供了6位通信数据控制寄存器,其中两位用于目标和主机调试器之间进行同步握手作用。

其中使用指令:

MRC p14, 0,Rd, c0, c0

上面这条指令用来向调试处理器获取数据保存到Rd里。


MCR p14, 0,Rd, c1, c0

上面这条指令用来向调试处理器输出数据Rd

因此,上面的V6版本的CPU,就是采用下面的指令输出调试信息:

mcr p14, 0,\ch, c0, c5

而其它版本的CPU使用下面的指令输出:

mcr p14, 0,\ch, c1, c0


通过上面的分析和学习,了解了ARMCP14调试协处理器,知道调试输出为什么区分不同的宏输出,以及相关的意义。



//QQ:9073204 EMAIL:[email protected]

//蔡军生  2012-1-8


更多相关文章

  1. Android 系统自定义签名
  2. android 开发,用一行代码操作只使用一次的 view
  3. Android——服务的基本用法之定义一个服务并进行启动与停止
  4. Android:自定义ImageView展示大图中的指定区域并切圆角(雪碧图)
  5. android studio 61歌曲服务器搭建 歌曲app 下载 完整代码
  6. [转]代码实现渐变背景
  7. Android左右滑动实现Activity切换类 (整合代码实例)
  8. 获取Android各类系统相关信息的接口实现代码
  9. [置顶] android,在java代码中,如何给textview设置不同的颜色,以及引

随机推荐

  1. Android(安卓)Studio 使用小技巧和快捷键
  2. Android开源网站一网打尽
  3. android content provider
  4. Android的pagerAdapter源码,在线查看网址
  5. Android 加载大图片是出现的 OutOfMemory
  6. Supporting Multiple Screens(支持Androi
  7. 设置 Toolbar(ActionBar) 上的按钮颜色
  8. android 安装软件
  9. 让背景小图不是拉伸而是多个重复
  10. android 4.0 (Ice Cream Sandwich) 已经开