我写了一个SPI驱动,运行在s3c2410上。
在microsoft embedded visual c++中做了一个MFC程序,在打开驱动函数中写了
void CTestSPIDlg::OnOpen()
{
DWORD IDThread;
HANDLE hReadSPIThread;
hFile=CreateFile(TEXT("SPI1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);//打开spi 设备
if(hFile==INVALID_HANDLE_VALUE)
{
MessageBox(_T("打开SPI驱动失败!"));
return;
}
else
MessageBox(_T("打开SPI驱动成功!"));
hReadSPIThread=CreateThread(0,0,ReadSPIThread,(LPVOID)this,0,&IDThread);
if(hReadSPIThread==NULL)
{
CloseHandle(hFile);
hFile=INVALID_HANDLE_VALUE;
MessageBox(_T("CREATE THREAD FAILED!"));
return;
}
CloseHandle(hReadSPIThread);
}
创建的ReadSPIThread线程函数是:
DWORD CTestSPIDlg::ReadSPIThread(LPVOID lparam)
{
CTestSPIDlg *pthis=(CTestSPIDlg *)lparam;
BYTE recbuf[50];
while(1)
{
if(hFile==INVALID_HANDLE_VALUE)
{
pthis->MessageBox(_T("FILE HANDLE LOST"));
break;
}
try
{
RetRead=ReadFile(hFile,recbuf,len,&actlen,NULL);
}
catch(CFileException *e)
{
pthis->MessageBox(_T("READFILE FAILED!"));
e->Delete();
}
。。。。。。。。。。。。。。。
}
在执行过程中,线程总是意外终止,就不能从SPI 线上读到数据了。用try和catch 语句后,catch语句里的对话框也没有弹出,应该是捕获不到异常吧。
但是线程为什么总是意外终止呢??
请各位大侠看看,可能是什么原因,怎么查出原因啊
小妹在此先谢过了
又是小妹??
嘿嘿,小妹的要回。
你的班子的串口打印出异常信息了吗?一般在这种情况下都会推出的。
呵呵呵呵,谢谢回复啊
串口没有打印任何信息
不过我在应用程序里也没有用uart输出任何信息啊,,,驱动也没写什么retailmessage函数
要打印的话在哪加信息啊,应用程序还是驱动程序中???
>> 意外终止
是线程不存在了还是不执行呀?
一般情况下,意外终止的话系统都会打印出来一些信息才对
感谢guopeixin兄:
今天又测了下,线程存在但不执行了
很奇怪的一个现象就是,线程运行一分钟,有时候运行1个多小时都没问题。
在线程内多增加一些输入语句,看看执行到哪里停止运行的
谢谢91program,我试试。。。。
感觉这个问题挺奇怪,不知是不是和硬件有关系,信号上噪声大而导致的??