“谁动了我的GPIO”,我想很多做嵌入式开发的同行可能也碰到过类似的问题:硬件没有按照设计的程序工作,好像是相关的寄存器在别处被改了。遇到这种情况,一般有两种处理方法,一是通过JTAG仿真器进行调试,单步跟踪,确认相关的寄存器就是我们要设的值。而这在调试WinCE驱动或者应用程序时是不方便实现的,一般在WinCE中通过添加打印信息来确认。前面曾讲过基于KITL调试WinCE的方法,这种方法固然强大,但也只是一种手段。个人以为,在WinCE已经跑通的情况下,调试驱动或应用还是少用KITL的好,不到万不得已,不动用它!大BUG靠想,小BUG靠调,我一直这么认为。过于依赖某种调试手段而不去分析问题的本身,反而影响调试。
“谁动了我的GPIO”是一个问题。这两天在调试VI程序时又碰到另外的问题。VI中采用了多片CPLD,扩展了一些板上寄存器。按理来说,这一部分应该是比较简单的,但在调试时却出现了很多状况,主要是软件设计和硬件设计版本的不一致,以致于需要经常修改软件来确认硬件逻辑正确与否,很费时间。
为了解决这两个问题,写了个小软件,MEMMgr.exe。功能很明确,在WinCE中用来读写寄存器,包括CPU内部的控制寄存器和总线上外扩的寄存器。这样,我们就可以监视GPIO了,再也不怕谁来动我的GPIO。:-D控制板上寄存器也更方便。程序界面如下:
其中,PhyAddr是寄存器的物理地址,如S3C2410的RTC寄存器0x57000070。Length是数据宽度,1对应的是一个BYTE,2对应的是一个WORD,4对应的是一个DWORD。Value对应的是寄存器的值。
该程序在S3C2410和PXA270的WinCE5.0上运行都没问题。由于WinCE6.0的内存管理发生了很大变化,所以该程序不能在CE6.0上正常工作。等需要时再做支持吧,车到山前再开路。
MEMMgr.exe的下载地址:http://files.cnblogs.com/we-hjb/MEMMgr.rar。