6299|14

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince6 s3c2440 串口驱动移植怪异的问题 [复制链接]

最近正在做s3c2440下面的wince6.0 r2移植, 补丁包打到今年的8月份。
移植的主要是三串口驱动,com0作为调试串口,com1发现了一个非常怪异的问题
那就是串口发送数据,在低于17个字符的时候,WriteFile陷入阻塞状态,根本就没有任何反应。
超过17个字符以上一切正常,低于17个字符,就算设置超时时间也不行,使用串口调试工具也是一样,初步判断
是驱动的原因。
我把应用程序源代码和串口的驱动都贴上,哪位大侠有没有遇到过这种问题?

下面的是应用程序代码:

  1. // SerialTestDlg.cpp : 实现文件
  2. //

  3. #include "stdafx.h"
  4. #include "SerialTest.h"
  5. #include "SerialTestDlg.h"

  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif

  9. // CSerialTestDlg 对话框

  10. CSerialTestDlg::CSerialTestDlg(CWnd* pParent /*=NULL*/)
  11.         : CDialog(CSerialTestDlg::IDD, pParent)
  12.         , m_bit(_T(""))
  13.         , m_strPort(_T(""))
  14.         , m_strSecond(_T(""))
  15.         , m_nCount(0)
  16.         , m_strMessage(_T(""))
  17.         , m_isLoop(false)
  18. {
  19.         m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  20. }

  21. void CSerialTestDlg::DoDataExchange(CDataExchange* pDX)
  22. {
  23.         CDialog::DoDataExchange(pDX);
  24.         DDX_Text(pDX, IDC_EDIT_BIT, m_bit);
  25.         DDX_Text(pDX, IDC_EDIT_BIT_PORT, m_strPort);
  26.         DDX_Text(pDX, IDC_EDIT_SECOND, m_strSecond);
  27.         DDX_Control(pDX, IDC_BUTTON_SEND, m_button_Send);
  28.         DDX_Text(pDX, IDC_EDIT_COUNT, m_nCount);
  29.         DDX_Text(pDX, IDC_EDIT_MESSAGE, m_strMessage);
  30. }

  31. BEGIN_MESSAGE_MAP(CSerialTestDlg, CDialog)
  32. #if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
  33.         ON_WM_SIZE()
  34. #endif
  35.         //}}AFX_MSG_MAP
  36.         ON_BN_CLICKED(IDC_BUTTON_SEND, &CSerialTestDlg::OnBnClickedButtonSend)
  37.         ON_BN_CLICKED(IDC_BUTTON_OPEN, &CSerialTestDlg::OnBnClickedButtonOpen)
  38. END_MESSAGE_MAP()


  39. // CSerialTestDlg 消息处理程序

  40. BOOL CSerialTestDlg::OnInitDialog()
  41. {
  42.         CDialog::OnInitDialog();

  43.         // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  44.         //  执行此操作
  45.         SetIcon(m_hIcon, TRUE);                        // 设置大图标
  46.         SetIcon(m_hIcon, FALSE);                // 设置小图标

  47.         // TODO: 在此添加额外的初始化代码
  48.         m_strPort = _T("COM2");
  49.         m_strSecond = "100";
  50.         m_bit = "115200";
  51.         m_strMessage = "agh11111111111111";
  52.         m_isLoop = true;
  53.         UpdateData(FALSE);
  54.         m_button_Send.EnableWindow(FALSE);
  55.        
  56.         return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  57. }

  58. #if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
  59. void CSerialTestDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
  60. {
  61.         if (AfxIsDRAEnabled())
  62.         {
  63.                 DRA::RelayoutDialog(
  64.                         AfxGetResourceHandle(),
  65.                         this->m_hWnd,
  66.                         DRA::GetDisplayMode() != DRA::Portrait ?
  67.                         MAKEINTRESOURCE(IDD_SERIALTEST_DIALOG_WIDE) :
  68.                         MAKEINTRESOURCE(IDD_SERIALTEST_DIALOG));
  69.         }
  70. }
  71. #endif


  72. void CSerialTestDlg::OnBnClickedButtonSend()
  73. {
  74.         // TODO: 在此添加控件通知处理程序代码
  75.         CString strCaption;
  76.         m_button_Send.GetWindowText(strCaption);
  77.         if(strCaption == "发送")
  78.         {
  79.                 OnSend();
  80.                 m_button_Send.SetWindowText(_T("暂停"));

  81.         }
  82.         else if (strCaption == "暂停")
  83.         {
  84.                 m_button_Send.SetWindowText(_T("发送"));
  85.         }

  86. }

  87. BOOL CSerialTestDlg::OpenPort(LPCTSTR Port, int BaudRate, int DataBits, int StopBits, int Parity)
  88. {
  89.         COMMTIMEOUTS CommTimeOuts;

  90.         // 打开串口
  91.         m_hComm = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, NULL,NULL);
  92.         if(m_hComm == INVALID_HANDLE_VALUE)
  93.         {
  94.                 MessageBox(_T("无法打开端口或端口已打开!请检查是否已被占用."));
  95.                 return FALSE;
  96.         }

  97.         GetCommState(m_hComm, &dcb);                                                /* 读取串口的DCB */
  98.         dcb.BaudRate = BaudRate;                       
  99.         dcb.ByteSize = DataBits;
  100.         dcb.Parity = Parity;
  101.         dcb.StopBits = StopBits;       
  102.         dcb.fParity = FALSE;                                                                /* 禁止奇偶校验 */
  103.         dcb.fBinary = TRUE;
  104.         dcb.fDtrControl = 0;                                                                /* 禁止流量控制 */
  105.         dcb.fRtsControl = 0;
  106.         dcb.fOutX = 0;
  107.         dcb.fInX = 0;
  108.         dcb.fTXContinueOnXoff = 0;
  109.         dcb.DCBlength = sizeof(DCB);

  110.         SetupComm(m_hComm, 0, 0);                                        /* 设置接收与发送的缓冲区大小 */
  111.         if(!SetCommState(m_hComm, &dcb))                                        /* 设置串口的DCB */
  112.         {
  113.                 CString str;
  114.                 str.Format(_T("无法按当前参数配置端口,lasterror=%d"),GetLastError());
  115.                 MessageBox(str,TEXT(" Error"),MB_OK);

  116.                 ClosePort();
  117.                 return FALSE;
  118.         }

  119.         //初始化缓冲区中的信息 清除
  120.         PurgeComm( m_hComm, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR ); //清干净输入、输出缓冲区

  121.         //设置状态参数
  122.         SetCommMask(m_hComm, EV_RXCHAR|EV_TXEMPTY );//设置事件驱动的类型

  123.         //SetCommMask(m_hComm, EV_RXCHAR);                                        /* 串口事件:接收到一个字符 */       


  124.         //设置超时参数
  125.         GetCommTimeouts(m_hComm, &CommTimeOuts);               
  126.         CommTimeOuts.ReadIntervalTimeout = 100;                                /* 接收字符间最大时间间隔 */
  127.         CommTimeOuts.ReadTotalTimeoutMultiplier = 1;               
  128.         CommTimeOuts.ReadTotalTimeoutConstant = 100;                /* 读数据总超时常量 */
  129.         CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
  130.         CommTimeOuts.WriteTotalTimeoutConstant = 0;               
  131.         if(!SetCommTimeouts(m_hComm, &CommTimeOuts))
  132.         {
  133.                 MessageBox(_T("无法设置超时参数!"));
  134.                 ClosePort();
  135.                 return FALSE;
  136.         }

  137.         PurgeComm(m_hComm, PURGE_TXCLEAR | PURGE_RXCLEAR);         /* 清除收/发缓冲区 */               
  138.         return TRUE;               
  139. }

  140. /*******************************************************************************************
  141. 函数名称: CSerialPortDlg::ClosePort
  142. 描    述: 关闭串口
  143. 输入参数: 无
  144. 输出参数: 无
  145. 返    回: FALSE: 失败;    TRUE: 成功
  146. ********************************************************************************************/
  147. BOOL CSerialTestDlg::ClosePort(void)
  148. {
  149.         if(m_hComm != INVALID_HANDLE_VALUE)
  150.         {
  151.                 SetCommMask(m_hComm, 0);               
  152.                 PurgeComm(m_hComm, PURGE_TXCLEAR | PURGE_RXCLEAR);        /* 清除收/发缓冲 */
  153.                 CloseHandle(m_hComm);                                                                /* 关闭串口操作句柄 */
  154.                 m_hComm = INVALID_HANDLE_VALUE;
  155.                 return TRUE;
  156.         }

  157.         return FALSE;
  158. };
  159. void CSerialTestDlg::OnBnClickedButtonOpen()
  160. {
  161.         // TODO: 在此添加控件通知处理程序代码
  162.         UpdateData(TRUE);

  163.         CString strPort = _T("COM3:");                                /* 查表获取参数值 */
  164.         DWORD baud                = 115200;
  165.         DWORD databit   = 8;
  166.         BYTE stopbit    = 0;
  167.         BYTE parity                = 0;

  168.         BOOL ret = OpenPort(strPort, baud, databit, stopbit, parity);        /* 打开串口 */
  169.         if (ret == FALSE)
  170.                 return;
  171.         m_button_Send.EnableWindow();
  172. }

  173. void CSerialTestDlg::OnSend(void)
  174. {
  175.         DWORD dwactlen;

  176.         if (m_hComm == INVALID_HANDLE_VALUE)
  177.         {
  178.                 MessageBox(_T("串口未打开!"));
  179.                 return;
  180.         }

  181.         int len = m_strMessage.GetLength();                                 /* 取得输入字符串长度 */
  182.         char *psendbuf = new char[len];

  183.         for(int i = 0; i < len;i++)
  184.                 psendbuf[i] = (char)m_strMessage.GetAt(i);                 /* 转换为单字节字符 */

  185.         while (m_isLoop)
  186.         {
  187.                 OVERLAPPED olWrite;
  188.                 memset(&olWrite,0,sizeof(olWrite));
  189.                 olWrite.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);

  190.                 UpdateData();
  191.                 WriteFile(m_hComm, psendbuf, len, &dwactlen, &olWrite);         /* 从串口发送数据 */
  192.                 m_nCount += len;
  193.                 UpdateData(FALSE);
  194.                
  195.                 Sleep(_ttoi(m_strSecond.GetBuffer(0)));
  196.                 //Sleep(1000);
  197.         }

  198.         delete[] psendbuf;
  199. }
复制代码


此帖出自WindowsCE论坛

最新回复

支持  详情 回复 发表于 2009-11-19 08:18
点赞 关注
 

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
pdds3c2440_ser.h源码

  1. //
  2. // Copyright (c) Microsoft Corporation.  All rights reserved.
  3. //
  4. //
  5. // Use of this source code is subject to the terms of the Microsoft end-user
  6. // license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
  7. // If you did not accept the terms of the EULA, you are not authorized to use
  8. // this source code. For a copy of the EULA, please see the LICENSE.RTF on your
  9. // install media.
  10. //
  11. /*++
  12. THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  13. ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  14. THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  15. PARTICULAR PURPOSE.

  16. Module Name:  

  17. Abstract:

  18.     Platform dependent Serial definitions for 16550  controller.

  19. Notes:
  20. --*/
  21. #ifndef __PDDS3C2440_SER_H_
  22. #define __PDDS3C2440_SER_H_

  23. #include
  24. #include
  25. #include
  26. #define DEFAULT_S3C2440A_PCLK (296350000 / 4)    //c ksk 20051112

  27. /////////////////////////////////////////////////////////////////////////////////////////
  28. //// S3C2440 UART Register

  29. ///////++ UART CONTROL REGISTER ++
  30. // Line control register bitvalue mask
  31. #define SER2440_PARITY_MASK     0x38
  32. #define SER2440_STOPBIT_MASK    0x4
  33. #define SER2440_DATABIT_MASK    0x3
  34. #define SER2440_IRMODE_MASK     0x40

  35. // Fifo Status
  36. #define SER2440_FIFOSTAT_MASK   0xf0

  37. //
  38. #define SER2440_FIFOFULL_TX     0x200
  39. #define SER2440_FIFOCNT_MASK_TX 0xf0
  40. #define SER2440_FIFO_DEPTH_TX 64
  41. #define SER2440_FIFO_DEPTH_RX 64

  42. //
  43. #define SER2440_INT_INVALID     0x5a5affff

  44. // Modem control register
  45. #define SER2440_AFC             (0x10)
  46. #define SER2440_RTS             0x1
  47. //Receive Mode
  48. #define RX_MODE_MASK          (0x11)
  49. #define RX_DISABLE            (0x00)
  50. #define RX_INTPOLL            (0x01)
  51. #define RX_DMA0               (0x10)
  52. #define RX_DMA1               (0x11)
  53. //Transmit Mode
  54. #define TX_MODE_MASK          (0x11 << 2)
  55. #define TX_DISABLE            (0x00 << 2)
  56. #define TX_INTPOLL            (0x01 << 2)
  57. #define TX_DMA0               (0x10 << 2)
  58. #define TX_DMA1               (0x11 << 2)
  59. //Send Break Signal
  60. #define BS_MASK               (0x01 << 4)
  61. #define BS_NORM               (0x00 << 4)
  62. #define BS_SEND               (0x01 << 4)
  63. //Loop-back Mode
  64. #define LB_MASK               (0x01 << 5)
  65. #define LB_NORM               (0x00 << 5)
  66. #define LB_MODE               (0x01 << 5)
  67. //Rx Error Status Interrupt Enable
  68. #define RX_EINT_MASK          (0x01 << 6)
  69. #define RX_EINTGEN_OFF        (0x00 << 6)
  70. #define RX_EINTGEN_ON         (0x01 << 6)
  71. //Rx Time Out Enable
  72. #define RX_TIMEOUT_MASK       (0x01 << 7)
  73. #define RX_TIMEOUT_DIS        (0x00 << 7)
  74. #define RX_TIMEOUT_EN         (0x01 << 7)
  75. //Rx Interrupt Type
  76. #define RX_INTTYPE_MASK       (0x01 << 8)
  77. #define RX_INTTYPE_PUSE       (0x00 << 8)
  78. #define RX_INTTYPE_LEVEL      (0x01 << 8)
  79. //Tx Interrupt Type
  80. #define TX_INTTYPE_MASK       (0x01 << 9)
  81. #define TX_INTTYPE_PUSE       (0x00 << 9)
  82. #define TX_INTTYPE_LEVEL      (0x01 << 9)
  83. // Clock selection
  84. #define CS_MASK        (0x01 << 10)
  85. #define CS_PCLK (0x00 << 10)
  86. #define CS_UCLK        (0x01 << 10)
  87. // UER State Error Bit.
  88. #define UERSTATE_BREAK_DETECT 0x8
  89. #define UERSTATE_FRAME_ERROR  0x4
  90. #define UERSTATE_PARITY_ERROR 0x2
  91. #define UERSTATE_OVERRUN_ERROR 0x1

  92. /////////////////////////////////////////////////////////////////////////////////////////
  93. // Required Registry Setting.
  94. #define PC_REG_2440UART_INTBIT_VAL_NAME TEXT("InterruptBitsShift")
  95. #define PC_REG_2440UART_INTBIT_VAL_LEN sizeof(DWORD)
  96. #define PC_REG_2440UART_IST_TIMEOUTS_VAL_NAME TEXT("ISTTimeouts")
  97. #define PC_REG_2440UART_IST_TIMEOUTS_VAL_LEN sizeof(DWORD)
  98. /////////////////////////////////////////////////////////////////////////////////////////
  99. #define S2440UART_INT_RXD 1
  100. #define S2440UART_INT_TXD 2
  101. #define S2440UART_INT_ERR 4
  102. ////////////////////////////////////////////////////////////////////////////////////////
  103. // WaterMarker Pairs.
  104. typedef struct  __PAIRS {
  105.     ULONG   Key;
  106.     ULONG   AssociatedValue;
  107. } PAIRS, *PPAIRS;


  108. class CReg2440Uart {
  109. public:
  110.     CReg2440Uart(PULONG pRegAddr);
  111.     virtual ~CReg2440Uart() { ; };
  112.     virtual BOOL    Init() ;
  113.     // We do not virtual Read & Write data because of Performance Concern.
  114.     void    Write_ULCON(ULONG uData) { WRITE_REGISTER_ULONG( m_pReg, (uData)); };
  115.     ULONG   Read_ULCON() { return (READ_REGISTER_ULONG(m_pReg)); } ;
  116.     void    Write_UCON (ULONG uData) { WRITE_REGISTER_ULONG(m_pReg+1 , uData); };
  117.     ULONG   Read_UCON() { return READ_REGISTER_ULONG(m_pReg+1 ); };
  118.     void    Write_UFCON(ULONG uData) { WRITE_REGISTER_ULONG( m_pReg+2, uData);};
  119.     ULONG   Read_UFCON() { return READ_REGISTER_ULONG(m_pReg + 2); };
  120.     void    Write_UMCON(ULONG uData) { WRITE_REGISTER_ULONG(m_pReg + 3, uData);};
  121.     ULONG   Read_UMCON() { return READ_REGISTER_ULONG(m_pReg + 3);};
  122.     ULONG   Read_UTRSTAT() { return READ_REGISTER_ULONG(m_pReg + 4);};
  123.     ULONG   Read_UERSTAT() { return READ_REGISTER_ULONG(m_pReg + 5);};
  124.     ULONG   Read_UFSTAT() { return READ_REGISTER_ULONG(m_pReg + 6);};
  125.     ULONG   Read_UMSTAT() { return READ_REGISTER_ULONG(m_pReg + 7);};
  126.     void    Write_UTXH (UINT8 uData) { WRITE_REGISTER_ULONG( (m_pReg + 8), uData) ; };
  127.     UINT8   Read_URXH() { return (UINT8) READ_REGISTER_ULONG(m_pReg + 9); };
  128.     void    Write_UBRDIV(ULONG uData) { WRITE_REGISTER_ULONG( m_pReg + 10, uData );};
  129.     ULONG   Read_UBRDIV() { return READ_REGISTER_ULONG(m_pReg + 10); };

  130.     virtual BOOL    Write_BaudRate(ULONG uData);
  131.     PULONG  GetRegisterVirtualAddr() { return m_pReg; };
  132.     virtual void    Backup();
  133.     virtual void    Restore();
  134. #ifdef DEBUG
  135.     virtual void    DumpRegister();
  136. #endif
  137. protected:
  138.     volatile PULONG const  m_pReg;
  139.     BOOL    m_fIsBackedUp;
  140. private:
  141.     ULONG    m_ULCONBackup;
  142.     ULONG    m_UCONBackup;
  143.     ULONG    m_UFCONBackup;
  144.     ULONG    m_UMCOMBackup;
  145.     ULONG    m_UBRDIVBackup;
  146.    
  147.     ULONG    m_BaudRate;
  148.     ULONG    m_s3c2440_pclk;
  149. };
  150. class CPdd2440Uart: public CSerialPDD, public CMiniThread  {
  151. public:
  152.     CPdd2440Uart (LPTSTR lpActivePath, PVOID pMdd, PHWOBJ pHwObj);
  153.     virtual ~CPdd2440Uart();
  154.     virtual BOOL Init();
  155.     virtual void PostInit();
  156.     virtual BOOL MapHardware();
  157.     virtual BOOL CreateHardwareAccess();
  158. //  Power Manager Required Function.
  159.     virtual void    SerialRegisterBackup() { m_pReg2440Uart->Backup(); };
  160.     virtual void    SerialRegisterRestore() { m_pReg2440Uart->Restore(); };

  161. // Implement CPddSerial Function.
  162. // Interrupt
  163.     virtual BOOL    InitialEnableInterrupt(BOOL bEnable ) ; // Enable All the interrupt may include Xmit Interrupt.
  164. private:
  165.     virtual DWORD ThreadRun();   // IST
  166. //  Tx Function.
  167. public:
  168.     virtual BOOL    InitXmit(BOOL bInit);
  169.     virtual void    XmitInterruptHandler(PUCHAR pTxBuffer, ULONG *pBuffLen);
  170.     virtual void    XmitComChar(UCHAR ComChar);
  171.     virtual BOOL    EnableXmitInterrupt(BOOL bEnable);
  172.     virtual BOOL    CancelXmit();
  173.     virtual DWORD   GetWriteableSize();
  174. protected:
  175.     BOOL    m_XmitFifoEnable;
  176.     HANDLE  m_XmitFlushDone;

  177. //
  178. //  Rx Function.
  179. public:
  180.     virtual BOOL    InitReceive(BOOL bInit);
  181.     virtual ULONG   ReceiveInterruptHandler(PUCHAR pRxBuffer,ULONG *pBufflen);
  182.     virtual ULONG   CancelReceive();
  183.     virtual DWORD   GetWaterMark();
  184.     virtual BYTE    GetWaterMarkBit();
  185.     virtual void    Rx_Pause(BOOL bSet) {;};
  186. protected:
  187.     BOOL    m_bReceivedCanceled;
  188.     DWORD   m_dwWaterMark;
  189. //
  190. //  Modem
  191. public:
  192.     virtual BOOL    InitModem(BOOL bInit);
  193.     virtual void    ModemInterruptHandler() { GetModemStatus();};
  194.     virtual ULONG   GetModemStatus();
  195.     virtual void    SetDTR(BOOL bSet) {;};
  196.     virtual void    SetRTS(BOOL bSet);
  197. //
  198. // Line Function.
  199.     virtual BOOL    InitLine(BOOL bInit) ;
  200.     virtual void    LineInterruptHandler() { GetLineStatus();};
  201.     virtual void    SetBreak(BOOL bSet) ;
  202.     virtual BOOL    SetBaudRate(ULONG BaudRate,BOOL bIrModule) ;
  203.     virtual BOOL    SetByteSize(ULONG ByteSize);
  204.     virtual BOOL    SetParity(ULONG Parity);
  205.     virtual BOOL    SetStopBits(ULONG StopBits);
  206. //
  207. // Line Internal Function
  208.     BYTE            GetLineStatus();
  209.     virtual void    SetOutputMode(BOOL UseIR, BOOL Use9Pin) ;

  210. protected:
  211.     CReg2440Uart *  m_pReg2440Uart;
  212.     PVOID           m_pRegVirtualAddr;

  213.     volatile S3C2440A_INTR_REG   * m_pINTregs;   
  214.     DWORD           m_dwIntShift;
  215. public:
  216.     void    DisableInterrupt(DWORD dwInt) {
  217.         m_pINTregs->INTSUBMSK |= (dwInt<
  218.     }
  219.     void    EnableInterrupt(DWORD dwInt) {
  220.         m_pINTregs->INTSUBMSK &= ~(dwInt<
  221.     }
  222.     void    ClearInterrupt(DWORD dwInt) {
  223.         m_pINTregs->SUBSRCPND = (dwInt<
  224.     }
  225.     DWORD   GetInterruptStatus() { return ((m_pINTregs->SUBSRCPND) >> m_dwIntShift);};
  226.     DWORD   GetIntrruptMask () { return ((~(m_pINTregs->INTSUBMSK) )>> m_dwIntShift); };
  227.    
  228. protected:
  229.     CRegistryEdit m_ActiveReg;
  230. //  Interrupt Handler
  231.     DWORD       m_dwSysIntr;
  232.     HANDLE      m_hISTEvent;
  233. // Optional Parameter
  234.     DWORD m_dwDevIndex;
  235.     DWORD m_dwISTTimeout;

  236. };

  237. #endif

复制代码
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
神奇,期待答案,

是否是应用程序的问题呢?
此帖出自WindowsCE论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

4
 
上班帮顶,没有看见过这样的问题
此帖出自WindowsCE论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
应该不是 我用串口调试的程序是这样
由于担心是应用程序的问题 我自己又写了一个小程序用来测试这个串口
感兴趣的可以加我QQ 458909240 咱们可以做进一步的讨论
引用 2 楼 gooogleman 的回复:
神奇,期待答案,

是否是应用程序的问题呢?
此帖出自WindowsCE论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

6
 
mark
此帖出自WindowsCE论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

7
 
把波特率改改 试试
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
试了 没用
这个问题真怪异 只有 > 17个字符的时候可以
引用 6 楼 cfanlwn 的回复:
把波特率改改 试试
此帖出自WindowsCE论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
我移植的没有出现过,不过我是从4.2——》5.0——》6.0的串口和你不一样。
此帖出自WindowsCE论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
让COM1作为系统调试输出口,这样看看 他能不能正常
此帖出自WindowsCE论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
又发现了一个新的情况
那就是当使用RETAILMSG输出调试信息时
调试信心可以从调试串口输出
但是WriteFile无论写多少都已经阻塞了
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 luna8411 的回复:
又发现了一个新的情况
那就是当使用RETAILMSG输出调试信息时
调试信心可以从调试串口输出
但是WriteFile无论写多少都已经阻塞了


是不是同一个串口啊。比如调试信息用了,但是那个应用程序就不要再去操作了!
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
非常肯定不是一个串口 板子上有三个串口
调试信息用的是COM0
另外一个应用程序用的是COM1

引用 11 楼 gooogleman 的回复:
引用 10 楼 luna8411 的回复:
又发现了一个新的情况
那就是当使用RETAILMSG输出调试信息时
调试信心可以从调试串口输出
但是WriteFile无论写多少都已经阻塞了


是不是同一个串口啊。比如调试信息用了,但是那个应用程序就不要再去操作了!
此帖出自WindowsCE论坛
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

14
 
不知道2440的bsp移植前是不是正常的,感觉timeout的配置出问题的可能性比较大
建议把mdd的代码移到bsp下调试一下
此帖出自WindowsCE论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 guopeixin 的回复:
不知道2440的bsp移植前是不是正常的,感觉timeout的配置出问题的可能性比较大
建议把mdd的代码移到bsp下调试一下


支持
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表