嵌入式硬件体系的调试图文.docx

上传人:b****1 文档编号:791143 上传时间:2022-10-13 格式:DOCX 页数:7 大小:19.04KB
下载 相关 举报
嵌入式硬件体系的调试图文.docx_第1页
第1页 / 共7页
嵌入式硬件体系的调试图文.docx_第2页
第2页 / 共7页
嵌入式硬件体系的调试图文.docx_第3页
第3页 / 共7页
嵌入式硬件体系的调试图文.docx_第4页
第4页 / 共7页
嵌入式硬件体系的调试图文.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

嵌入式硬件体系的调试图文.docx

《嵌入式硬件体系的调试图文.docx》由会员分享,可在线阅读,更多相关《嵌入式硬件体系的调试图文.docx(7页珍藏版)》请在冰豆网上搜索。

嵌入式硬件体系的调试图文.docx

嵌入式硬件体系的调试图文

《嵌入式系统硬件设计》教程

第十一讲嵌入式硬件体系的调试

编著与讲演:

怯肇乾

一.知识准备与上述相关讲义的回顾

知识准备:

电路测试、系统的模拟与仿真等;

相关讲义的回顾:

CPU器件的模拟与仿真、测量控制电路、系统基础电路。

二.常用电路测试工具及其使用

直流电源

示波器:

模拟示波器、数字示波器

多功能数字万用表

逻辑分析仪

三.常用调试手段与技巧介绍

1.用双路直流电源得到正负电源供给

-+-+

负源

正源

2.PCB板的板级测试

板上各种电源的短路测试;

首次加电测试,各种主要电源测试、主要IC的运行发热状况观察等;CPU之时钟电路测试、复位电路测试;

3.模拟信号源的实验板制作

主要是对信号发生器所产生信号的调理,包括缩放、零点调整等;

ADJST321

4

11

DB4ALM324RB528kRB512k

RB541k

RB535kCB2104

CB1104

-12V

+12V+12VCB31047

CB5104CB6104

4.逐一电路模块的测试:

飞线、割线等手段的使用

CPU之各种外扩存储器测试;

CPU之主要外设测试;

系统接口电路、通讯电路测试;

5.模拟干扰、振动实验等可靠性测试

使用可调的模拟干扰仪器、振动器,或自制的相应工具,得到相应的恶劣环境,置所设计系统于其中,进行测试、调整、完善。

四.PC机测试程序及其书写

DOS

Debug测试,VB、VC或C++Builder可视化应用测试程序书写等。

例:

1.DOSDebug的并口测试:

在DOS或WindowsDOS窗口下,可通过Debug软件的I(读或O(写命令对三个寄存器的状态进行观察改写,如:

C:

\>Debug

-O3785A

-I378

5A

-I379

78

-O37a55

-I37a

55

2.使用嵌入式汇编语言书写可视化测试程序

下面是用C++Builder书写的ISA收发卡的初始化和收发函数charTForm1:

:

initial(void//ISA卡的初始化函数

{asm{movdx,211h//0xff-->Port(211h

moval,0ffh

outdx,al

movbx,2fffh

}

loop1:

asm{decbx

jzend

movdx,211h//Port(211h.3=1?

inal,dx

testal,008h

jzloop1

}

asm{movdx,211h//0x00-->Port(211h

moval,000h

outdx,al

movbx,2fffh

}

loop2:

asm{decbx

jzend

movdx,211h//Port(211h.3=0?

inal,dx

testal,008h

jnzloop2

}

return0;

end:

return-1;

}

charTForm1:

:

ByteReceive(void//字节接收函数{charz;

asmmovbx,0fffh

loop:

asm{decbx

jznnn

movdx,211h

inal,dx

testal,002h

jnzloop

}

asm{movdx,210h

inal,dx

movz,al

}

gotoeee;

nnn:

z=0x20;

eee:

return(z;

}

voidTForm1:

:

ByteSend(charz//字节发送函数{loop:

asm{movdx,211h//Port(211h.0=1?

inal,dx

testal,001h

jzloop

}

asm{movdx,210h//Port(210h

moval,z

outdx,al

}

}

3.用WinAPI函数进行串行异步通信

HANDLEhCom;

DCBdcb;

BOOLfSuccess,bResult;unsignedlongnBytesWritten,nBytesRead;COMMTIMEOUTStimeouts;

//-----------------------------------------------------------------------

void__fastcallTForm1:

:

initial(void

{//opentheserialporttoreadorwrite

hCom=CreateFile(port,GENERIC_READ|GENERIC_WRITE,0,

NULL,OPEN_EXISTING,0,NULL;

if(hCom==INVALID_HANDLE_VALUE

{ShowMessage("notOpenSerialPortSelected!

";}

//setthesizesofin&outbuffer,inbytes

fSuccess=SetupComm(hCom,2000,2000;

if(!

fSuccessShowMessage("SetupCommunicationFail!

";//settimeoutsparameterstoreadserialport

timeouts.ReadIntervalTimeout=MAXDWORD;

timeouts.ReadTotalTimeoutMultiplier=MAXDWORD;

timeouts.ReadTotalTimeoutConstant=1000;//65000;

fSuccess=SetCommTimeouts(hCom,&timeouts;

if(!

fSuccess

ShowMessage("SetCommunicationTimeoutsFail!

";

setserialcommunicationparameters

fSuccess=GetCommState(hCom,&dcb;

if(!

fSuccessShowMessage("GetCommunicationFail!

";dcb.BaudRate=9600;

dcb.ByteSize=8;

dcb.Parity=NOPARITY;

dcb.StopBits=ONESTOPBIT;

fSuccess=SetCommState(hCom,&dcb;

if(!

fSuccessShowMessage("SetCommunicationfail!

";

}

//---------------------------------------------------------------------------

void__fastcallTForm1:

:

readport(void

{//readtheserialport

bResult=ReadFile(hCom,&inBuffer,1952,&nBytesRead,NULL;

if(!

bResult

{switch(GetLastError(

{caseERROR_INVALID_USER_BUFFER:

ShowMessage("ErrorInvalidUserBuffer!

";

break;

default:

ShowMessage(GetLastError(+"ReadDataFail!

";

break;

}

}//dealwithdatumreceivedanddisplay…}bResult=WriteFile(hCom,end,2,&nBytesWritten,NULL;if(!

bResultexit(0;}//closeserialport}break;default:

ShowMessage(GetLastError(+"WriteIDFail!

";break;*//*{switch(GetLastError({caseERROR_INVALID_USER_BUFFER:

ShowMessage("ErrorInvalidUserOutBuffer!

";}CloseHandle(hCom;五.底层设备驱动程序及其书写Win2000DDK、VToolsD、WinDriver等对常规硬件接口驱动程序的书写。

1.用Win2000DDK开发驱动程序驱动程序包括即插即用和电源管理功能,对内核模式驱动程序、内核流驱动程序、图形驱动程序、虚拟设备驱动程序等有特殊的写法要求。

开发步骤:

⑴编写驱动程序代码,应包括条件编译标记的调试检查。

⑵测试和调试,检查构建的驱动程序。

⑶测试和调试,自由构建的驱动程序。

⑷调整,自由构建的驱动程序。

⑸附加测试和调试,检查构建与自由构建的驱动程序和操作系统。

⑹测试和检查,最终的自由构建的驱动程序。

2.用VToolD开发驱动程序6

3.用WinDriver开发驱动程序⑴WinDriver的特点:

从用户层访问硬件;支持I/O读写、中断处理、物理内存读写;支持各厂家的PCI、ISA、EISA、ISAnP、PCMCIA、USB总线接口;支持主流PCI接口芯片:

PLX9050/9054/9060/9080、AMCC、Galileo、V3等PCI桥;支持通用Win32软件开发平台,如:

VisualC++、C++Builder,VisualB、Dephi、Java等;应用程序对Win9X与NT/2000二进制代码级兼容,对Win9X、NT2000/CE、Linux源代码级兼容;提供核心插件功能,可用于开发高性能驱动程序(对调试无误的要求苛刻的部分软件通过WinDriver提供的API插入到核心态运行;编程向导界面友好,可进行编程前的硬件诊断,可自动生成大部分驱动程序代码。

⑵开发步骤:

利用编程向导开发:

①插入设计好的板卡,打开WinDriverWizard,待开发板卡资源自动分析,生成驱动程序框架代码;②修改代码,加入定制功能;③在用户态执行与调试代码;④将性能苛刻部分插入到核心态;直接利用WinDriver提供的API函数书写:

①将windriver.h拷贝到应用程序的源代码目录中,以使应用程序可以找到它;②在应用程序的源文件中包含windows.h、winioctl.h、windriver.h三个头文件;③调用WD_Open(函数,打开WinDriver设备驱动程序,获得设备文件句柄;④调用WD_CardRegister(函数,向WinDriverkernal登记板卡信息;⑤调用WD_Transfer(函数,进行I/O和内存数据的存取.当然,也可直接用WD_CardRegister(函数返回的内存映像的线性地址存取硬件上的地址空间;⑥若使用中断的话,可调用WD_IntEnable(函数使能中断,此后可调用WD_IntWait(函数等待中断的到来,停止中断响应可调用WD_IntDisable(函数予以实现;⑦当不需要硬件操作时,可调用WD_CardUnregister(函数取消登记,而后调用WD_Close(函数关闭WinDriver设备驱动程序。

⑶ISA/PCI板卡驱动程序的WinDriver开发演示⑷举例:

WinWriver产生的C++builder的EPP并口API:

①并口开关函数BOOLLPT_O

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1