常常是板子出了问题就手足无措,常常要给板子上面信号的时候要用ADS写长长的程序(我用ARM)
常常看到Jflash的程序出错就只知道重起板子,于是我就常常想阅读一下Jflash的源代码
今天,我终于祭起长久不用的Source Insight,建立工程,开始阅读Jflash
所谓打蛇打七寸,读程序先读main
我就从main开始对jflash进行解剖
我读的代码是windows版本的,用VC进行编译,我想Linux版本的应该也差不多,就是要定义一个宏吧,这个问题暂且不关注,先关注程序本身
程序一开始就是一大堆没有注释的变量,也许我是才疏学浅的原因,我硬是看不懂那些变量是做什么用的,暂且跳过吧,先看后面的程序
#ifdef __windows__
//Test operating system, if WinNT or Win2000 then get device driver handle
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
HANDLE h;
h = CreateFile("\\\\.\\giveio", GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(h == INVALID_HANDLE_VALUE)
error_out("Couldn't access giveio device");
CloseHandle(h);
}
#endif
版权信息就不说了,下面就是检测giveio是否已经安装好了
如果没有安装好,就提示Couldn't access giveio device
接着调用test_port()函数,以寻找一个可以用并口
在分析test_port()之前,我们首先对并口编程先进行一些介绍
我们的PC机一般有三个并口,他们的IO地址范围通常是:
0x3bc-0x3be
0x378 -0x37a
0x278-0x27a
在很多电脑里面,通常连接Jtag的并口是以0x378为基地址的并口
可以看到一个并口有三个IO地址,第一个是数据寄存器地址,第二个是控制寄存器地址,第三个是状态寄存器地址。