91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

outportb函數與inportb函數是什么

發布時間:2021-10-14 10:48:56 來源:億速云 閱讀:262 作者:柒染 欄目:編程語言

outportb函數與inportb函數是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

outportb函數是屬于Turbo CTC)語言庫函數,這是一個輸出到硬件端口的函數,似乎是當年學習C語言的時候用這個東西,現在用的C++里面沒有這個函數,今天在做一個軟件說明書時,看到這個函數,在網上搜索了下,放在這里,以備大家使用時查明:

-----------------------------------------------------------------

outportb函數
函數原型: void outportb(unsigned char port, unsigned char value)
函數功能: 向port地址的接口輸出value
函數返回:
函數說明: port 端口地址,value要輸出的8位數
所屬文件: <dos.h>
程序例:

#include <stdio.h> 

  #include <dos.h> 

  int main(void) 

  { 

  int value = 64; 

  int port = 0; 

  outportb(port, value); 

  printf("Value %d sent to port number %d\n", value, port); 

  return 0; 

}


---------------------------------------------------------------------------------------------

另附上與之對應的inportb函數的說明

函數名: inportb

  功 能: 返回從指定硬件端口讀入的一個8位二進制(一個字節)。

  用 法: int inportb(int port);

  程序例:

 

#include <stdio.h> 

  #include <dos.h> 

  int main(void) 

  { 

  int value ; 

  int port =0x210; 

  value=inportb(port); 

  printf("port 0x%x sent Value is%d\n", port,value ); 

  return 0; 

  }

 

而在C++中,沒有像inportb/outportb,inportw/outputw專門的端口讀寫函數  
 
但可以用::CREATEFILE(。。。。)


例子:

  BOOL   CSerialPort::InitPort(CWnd*   pPortOwner, //   the   owner   (CWnd)   of   the   port   (receives   message)   
        UINT     portnr, //   portnumber   (1..4)   
        UINT     baud, //   baudrate   
        char     parity, //   parity     
        UINT     databits, //   databits     
        UINT     stopbits, //   stopbits     
        DWORD   dwCommEvents, //   EV_RXCHAR,   EV_CTS   etc   
        UINT     writebuffersize) //   size   to   the   writebuffer   
  {   
  assert(portnr   >   0   &&   portnr   <   5);   
  assert(pPortOwner   !=   NULL);   
    
  //   if   the   thread   is   alive:   Kill   
  if   (m_bThreadAlive)   
  {   
  do   
  {   
  SetEvent(m_hShutdownEvent);   
  }   while   (m_bThreadAlive);   
  TRACE("Thread   ended\n");   
  }   
    
  //   create   events   
  if   (m_ov.hEvent   !=   NULL)   
  ResetEvent(m_ov.hEvent);   
  m_ov.hEvent   =   CreateEvent(NULL,   TRUE,   FALSE,   NULL);   
    
  if   (m_hWriteEvent   !=   NULL)   
  ResetEvent(m_hWriteEvent);   
  m_hWriteEvent   =   CreateEvent(NULL,   TRUE,   FALSE,   NULL);   
    
  if   (m_hShutdownEvent   !=   NULL)   
  ResetEvent(m_hShutdownEvent);   
  m_hShutdownEvent   =   CreateEvent(NULL,   TRUE,   FALSE,   NULL);   
    
  //   initialize   the   event   objects   
  m_hEventArray[0]   =   m_hShutdownEvent; //   highest   priority   
  m_hEventArray[1]   =   m_ov.hEvent;   
  m_hEventArray[2]   =   m_hWriteEvent;   
    
  //   initialize   critical   section   
  InitializeCriticalSection(&m_csCommunicationSync);   
    
  //   set   buffersize   for   writing   and   save   the   owner   
  m_pOwner   =   pPortOwner;   
    
  if   (m_szWriteBuffer   !=   NULL)   
  delete   []   m_szWriteBuffer;   
  m_szWriteBuffer   =   new   char[writebuffersize];   
    
  m_nPortNr   =   portnr;   
    
  m_nWriteBufferSize   =   writebuffersize;   
  m_dwCommEvents   =   dwCommEvents;   
    
  BOOL   bResult   =   FALSE;   
  char   *szPort   =   new   char[50];   
  char   *szBaud   =   new   char[50];   
    
  //   now   it   critical!   
  EnterCriticalSection(&m_csCommunicationSync);   
    
  //   if   the   port   is   already   opened:   close   it   
  if   (m_hComm   !=   NULL)   
  {   
  CloseHandle(m_hComm);   
  m_hComm   =   NULL;   
  }   
    
  //   prepare   port   strings   
  sprintf(szPort,   "COM%d",   portnr);   
  sprintf(szBaud,   "baud=%d   parity=%c   data=%d   stop=%d",   baud,   parity,   databits,   stopbits);   
    
  //   get   a   handle   to   the   port   
  m_hComm   =   CreateFile(szPort, //   communication   port   string   (COMX)   
            GENERIC_READ   |   GENERIC_WRITE, //   read/write   types   
            0, //   comm   devices   must   be   opened   with   exclusive   access   
            NULL, //   no   security   attributes   
            OPEN_EXISTING, //   comm   devices   must   use   OPEN_EXISTING   
            FILE_FLAG_OVERLAPPED, //   Async   I/O   
            0); //   template   must   be   0   for   comm   devices   
    
  if   (m_hComm   ==   INVALID_HANDLE_VALUE)   
  {   
  //   port   not   found   
  delete   []   szPort;   
  delete   []   szBaud;   
    
  return   FALSE;   
  }   
    
  //   set   the   timeout   values   
  m_CommTimeouts.ReadIntervalTimeout   =   1000;   
  m_CommTimeouts.ReadTotalTimeoutMultiplier   =   1000;   
  m_CommTimeouts.ReadTotalTimeoutConstant   =   1000;   
  m_CommTimeouts.WriteTotalTimeoutMultiplier   =   1000;   
  m_CommTimeouts.WriteTotalTimeoutConstant   =   1000;   
    
  //   configure   
  if   (SetCommTimeouts(m_hComm,   &m_CommTimeouts))   
  {         
  if   (SetCommMask(m_hComm,   dwCommEvents))   
  {   
  if   (GetCommState(m_hComm,   &m_dcb))   
  {   
  m_dcb.fRtsControl   =   RTS_CONTROL_ENABLE; //   set   RTS   bit   high!   
  if   (BuildCommDCB(szBaud,   &m_dcb))   
  {   
  if   (SetCommState(m_hComm,   &m_dcb))   
  ;   //   normal   operation...   continue   
  else   
  ProcessErrorMessage("SetCommState()");   
  }   
  else   
  ProcessErrorMessage("BuildCommDCB()");   
  }   
  else   
  ProcessErrorMessage("GetCommState()");   
  }   
  else   
  ProcessErrorMessage("SetCommMask()");   
  }   
  else   
  ProcessErrorMessage("SetCommTimeouts()");   
    
  delete   []   szPort;   
  delete   []   szBaud;   
    
  //   flush   the   port   
  PurgeComm(m_hComm,   PURGE_RXCLEAR   |   PURGE_TXCLEAR   |   PURGE_RXABORT   |   PURGE_TXABORT);   
    
  //   release   critical   section   
  LeaveCriticalSection(&m_csCommunicationSync);   
    
  TRACE("Initialisation   for   communicationport   %d   completed.\nUse   Startmonitor   to   communicate.\n",   portnr);   
    
  return   TRUE;   
  }


 

關于outportb函數與inportb函數是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

耿马| 三都| 佛冈县| 车险| 阿克苏市| 澎湖县| 渝北区| 六安市| 太康县| 社会| 汉川市| 长顺县| 都昌县| 惠水县| 二连浩特市| 同心县| 平和县| 邵阳市| 松滋市| 罗甸县| 晋宁县| 县级市| 塔城市| 西林县| 云浮市| 浦城县| 信丰县| 兴化市| 肥西县| 巩留县| 府谷县| 平舆县| 当涂县| 剑阁县| 勃利县| 道孚县| 根河市| 邵东县| 泽库县| 缙云县| 南雄市|