近日在调试bf532的程序,不得不要用仿真器调试。无奈手上并没有支持它的jtag
仿真器,只有一个wiggler并口jtag线。在网上下载支持bf532的调试代理源码,使用
cygwin编译(排除一些错误后可以编译通过)。跟着来是着手gdb的调试。以前因为有
使用gdb调试arm的经验(更多的是使用insight debugger),还是能用了。但因不知如
何看寄存器,sram信息等,感到很X不方便,差点放弃使用。后来在网上查找别人的使
用经验,慢慢明白一些脚本和命令的使用。使用了近一天,基本功能的使用已经了解一
二了,越来越觉得它的强大和方便。与很多网友一样,总认为图形界面才够直观方便(
还是微软给害的)。可能我好点,因为接触linux比较多,所以也不是太抗拒命令界面
。还有一点好处是,gdb对很多芯片支持,转换线支持也多,源码开放,如果有兴趣,
自己也可以设计一条转换线。程序可以预下载(用别的方便下载,我的就是用自己写的
bootloader通过以太网下载,下载速度非常快,有500多k/s,不用受罪,调试时用慢速
的并口线就行)。GDB唯一缺点是,要你花点时间去好好学习。其它的都很好,特别与
GCC一样,统一开发平台。改用不同的芯片,你不用再去熟识另一环境,也不为花高昂
费用买转换线烦恼。更加不用为使用D版软件而烦恼(波解找不到,担心版权费等)。
为何开源的大多数是命令界面,不是他们创造不出漂亮的界面,也不是因为他们技
术低,而是因为觉得它更方便。使用简单的命令就能完成很多东西,再加上强大的脚本
功能,配置和备份更方便,使用也更方便。
*************************************************************************
实现以上命令效果的脚本如下,脚本很简单。
**************************************************************************
# PLL control 注解
set $PLL_CTL = (unsigned short *) 0xffc00000 定义寄存器名和所对应的地址,数据类型
set $PLL_DIV = (unsigned short *) 0xffc00004
set $PLL_STAT = (unsigned short *) 0xffc0000c
set $PLL_LOCKCNT = (unsigned short *) 0xffc00010
define dump_pll 字义脚本命令名称
printf "------- PLL -------\n" 有点像C语言的输出打印
set $p = *$PLL_CTL 定义变量p,把PLL_CTL寄存器的值读出放在p里。
set $d = *$PLL_DIV 定义变量d,把PLL_DIV寄存器的值读出放在d里。
printf "PLL_CTL : 0x%04x\n", $p 打印出p的值
printf "PLL_DIV : 0x%04x\n", $d 打印出d的值
printf "PLL_STAT : 0x%04x\n", *$PLL_STAT 打印出寄存器PLL_STAT的值
printf "PLL_LOCKCNT : 0x%04x\n\n", *$PLL_LOCKCNT 打印出PLL_LOCKCNT的值。
set $mul = (($p >> 9) & 0x3f) 定义变量mul,把p经过运算的结果给于它。其实下面的都不用注
解了,估计你也开始懂了。
if $mul == 0
set $mul = 64
end
set $mul = (float) $mul / (($p & 1) + 1)
printf "VCO multiplier: %.1f\n", $mul
printf "Sys clock multiplier: %f\n", $mul / ($d & 0xf)
printf "Core clock multiplier: %f\n", $mul / (1 << (($d >> 4) & 0x3))
end
******************************************************************************************
文章评论(0条评论)
登录后参与讨论