3189|11

59

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

快疯了,100分eVC测试 [复制链接]

开发板上有几个跳线,我写了一个测试的程序,却出问题了,大家帮忙看看...

跳线驱动部分内容:
BOOL Addr_Init()
{
   //地址映射
}


BOOL WINAPI  DllEntry(HANDLE hInstDll,DWORD dwReason,LPVOID lpvReserved)
{   
}


DWORD JMP_Init(DWORD dwContext)
{      
    Addr_Init();
    return 1;
}

DWORD JMP_Deinit(DWORD dwContext)
{  
    //取消地址映射,释放内存等
}


DWORD JMP_Open(DWORD hDeviceContext,DWORD AccessCode,DWORD ShareMode)
{   
       //相关引脚的初始化
        return 1;
}

BOOL JMP_Close(DWORD hOpenContext)
{      
      //还原引脚状态
}

BOOL JMP_IOControl(DWORD hOpenContext,
  DWORD dwCode,
          PBYTE pBufIn,
  DWORD dwLenIn,
  PBYTE pBufOut,
          DWORD dwLenout,
      PDWORD pdwActualOut
  )
{

    //这个部分返回引脚状态  
    unsigned int pin = 0;
    pin  = g_pPIOB->PIO_PDSR & JUMP_MASK;

    pin = pin ^ JUMP_MASK;
   
    *((unsigned int *)pBufOut) = pin;

    return 1;

}

测试程序部分,一个按钮触发测试,有一个线程调用ReadJumphread检测。如下


HANDLE hFile = NULL;           //设备文件操作句柄
HANDLE ExitThreadEvent;


BOOL CJump_TestDlg::OnInitDialog()
{
        CDialog::OnInitDialog();

        SetIcon(m_hIcon, TRUE);                        // Set big icon
        SetIcon(m_hIcon, FALSE);                // Set small icon
       
        CenterWindow(GetDesktopWindow());        // center to the hpc screen

        // TODO: Add extra initialization here
        ExitThreadEvent = CreateEvent(NULL,TRUE,FALSE,NULL);

        return TRUE;  // return TRUE  unless you set the focus to a control
}


DWORD CJump_TestDlg::ReadJumphread(PVOID pArg)
{
        CString strCount;
                static unsigned int flag = 0xff;
                unsigned long Size =0;
                unsigned int Jump = 0;
                CJump_TestDlg *pDlg = (CJump_TestDlg *)pArg;
            CStatic * pTestStatic = (CStatic *)pDlg ->GetDlgItem(IDC_JUMP);
        
                while(1)
                {   
            
                        if(WaitForSingleObject(ExitThreadEvent,0) == WAIT_OBJECT_0)
                        {       ResetEvent(ExitThreadEvent);
                                strCount.Format(_T("%s"), _T("kill thread "));
                                    pTestStatic->SetWindowText(strCount);
                                break;
                        }
                       

                        else
                        {
                                DeviceIoControl(hFile,0,NULL,0,&Jump,sizeof(unsigned int),&Size,NULL);
               
                                if(Jump == flag)
                                        continue;

                                else
                                {
                                        if(Jump == 0)
                                        {
                                          strCount.Format(_T("%s"), _T("JUMP 0 1 2 3 opened "));
                                      pTestStatic->SetWindowText(strCount);
                                        }
                                        else if(Jump == (1<<6))
                                        {
                                          strCount.Format(_T("%s"), _T("JUMP 0 closed 1 2 3 opened "));
                                      pTestStatic->SetWindowText(strCount);
                                        }

                                        else if(Jump == (1<<7))
                                        {
                                          strCount.Format(_T("%s"), _T("JUMP 1 closed 0 2 3 opened "));
                                      pTestStatic->SetWindowText(strCount);
                                        }
                                        else if(Jump == (1<<8))
                                        {
                                          strCount.Format(_T("%s"), _T("JUMP 2 closed 0 1 3 opened "));
                                      pTestStatic->SetWindowText(strCount);
                                        }
                                        else if(Jump == (1<<10))
                                        {
                                          strCount.Format(_T("%s"), _T("JUMP 3 closed 0 1 2 opened "));
                                      pTestStatic->SetWindowText(strCount);
                                        }

                                        Size =0;
                                        flag = Jump;
                                }
                        }
                  
                }

                return 1;
}

void CJump_TestDlg::OnOpen()
{
        // TODO: Add your control notification handler code here
        hFile = CreateFile(TEXT("JMP0:"),GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
        if(hFile == NULL)
        {
         MessageBox(_T("不能打开JMP"));
        }
        else
        {
        MessageBox(_T("打开JMP成功"));
        }
}

void CJump_TestDlg::OnTest()
{
        // TODO: Add your control notification handler code here
        HANDLE hJumpTestThread ;
        DWORD IDThread;

    hJumpTestThread = CreateThread(0,0,ReadKeyThread,this,0,&IDThread);
        if(hJumpTestThread == NULL)
        {
                CloseHandle(hFile);
                hFile = NULL;
                return ;
        }
        CloseHandle(hJumpTestThread);

}

void CJump_TestDlg::OnClose()
{
        // TODO: Add your control notification handler code here

        SetEvent(ExitThreadEvent);
        KillThread = 1;
        Sleep(200);

        if(hFile)
        {
         
                 CloseHandle(hFile);
         hFile = NULL;
                 MessageBox(_T("关闭JMP"));
        }
}

void CJump_TestDlg::OnDestroy()
{
        CDialog::OnDestroy();
       
        // TODO: Add your message handler code here
        CloseHandle(ExitThreadEvent);
       
}
现象:完成一次测试后,点击关闭驱动的按钮,弹出对话框后,触摸屏没有反应了。界面也停留不动了,但是用鼠标还是可以关闭之前的界面。
      完成一次测试,点击关闭驱动后,在点打开驱动,开始测试,无法得到测试结果...

      好多天了,可能就是那一个地方我给弄错了,可是就是没有找出来,高分求救,等......

最新回复

void CJump_TestDlg::OnTest() { // TODO: Add your control notification handler code here HANDLE hJumpTestThread ; DWORD IDThread;     hJumpTestThread = CreateThread(0,0,ReadKeyThread,this,0,&IDThread); if(hJumpTestThread == NULL) { CloseHandle(hFile); hFile = NULL; return ; } CloseHandle(hJumpTestThread); } 楼上,本人调试VC程序的经验,多线程的程序的单步调试很容易造成死机现象。可能有两个问题,但不一定是对的。 1、OnTest函数最后不应该调用CloseHandle(hJumpTestThread); 2、ReadJumphread函数中,WaitForSingleObject(ExitThreadEvent,0) 函数的第2个参数最好不要设置为0,比如设置为100ms。  详情 回复 发表于 2009-1-10 19:53
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没发现什么问题,
还是顶一下!
沙发……
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这种问题,最好是单步调试,让别人看代码找问题有点困难。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 91program 的回复:
这种问题,最好是单步调试,让别人看代码找问题有点困难。

哎,要是有办法单步调试就好了,起码可以看出点什么东西,但是条件限制啊,没有办法,大家帮帮忙了...
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
希望你可以早点找出来这其中的问题
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
是啊,这个代码帖的时候带上格式啊。
这样看很不舒服。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 
看起来有点头晕,没看个明白
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 xajhuang 的回复:
看起来有点头晕,没看个明白


楼主把驱动和应用的关键代码贴出来,带上格式,像我一样帖代码啊。这样会显示关键字等等,
你上面的代码真的很累人...........
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 
不知道LZ要做什么测试???!!!
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

10
 
结合下打印信息看看吧。。。怀疑是你的流驱动打开错误了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
看着晕那
你可以在你认为可能有问题的地方加MESSAGEBOX消息,这样也可以调试啊
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
void CJump_TestDlg::OnTest()
{
// TODO: Add your control notification handler code here
HANDLE hJumpTestThread ;
DWORD IDThread;

    hJumpTestThread = CreateThread(0,0,ReadKeyThread,this,0,&IDThread);
if(hJumpTestThread == NULL)
{
CloseHandle(hFile);
hFile = NULL;
return ;
}
CloseHandle(hJumpTestThread);
}

楼上,本人调试VC程序的经验,多线程的程序的单步调试很容易造成死机现象。可能有两个问题,但不一定是对的。
1、OnTest函数最后不应该调用CloseHandle(hJumpTestThread);
2、ReadJumphread函数中,WaitForSingleObject(ExitThreadEvent,0) 函数的第2个参数最好不要设置为0,比如设置为100ms。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表