0

Windows 7 で PICDEM 2 PLUS DEMO BOARD、VC++ を使用した私のプロジェクト。コードと PIC ボードとの通信には、UART/USB ケーブル (USB シリアル ポート 8) を使用しました。これまでのところ、PIC ボードに接続でき、データの送受信もできます。しかし、「Prolific USB to Serial Com Port」を使いたいです。ドライバーの更新、ポート番号の変更など(インターネットで見つかった)あらゆる可能な方法を試しました(最初にProlificケーブルに接続すると、自動的にポート4が使用されます)。しかし、このエラーから私を助けるものは何もありません。私のPCはUSBポートに正しく接続されていると思いますが、データの送信または受信ができません。[理由がわからない!!! :-(] 接続を確立するために特定のコードを記述する必要がある場合があります。

以下は、エラーが発生したコードです-

    bool SerialCommunicator::SerialRx(void) {

     //the function to be called by the receiver thread 
     BYTE buf[1024*8];
 unsigned int read;
 static UINT16 crc;
 static UINT8 ptr_rxd_buffer = 0;
 UINT8 crc1, crc2;
 UINT8 c;

do
{
    read = port->ReadAvailable(buf,1000); // catch the received bytes, read= nb   of received bytes in th buffer buf

    for( unsigned int k =0; k<read; k++)
    {
        c= buf[k];
        if(receiverLocked) return 0; // if rxd buffer is locked immediately     return

        // the rxd buffer is unlocked
        if((ptr_rxd_buffer == 0) && (c == '#')) // if rxd buffer is empty and syncronisation character is received
        {
    receivedPacket.data[ptr_rxd_buffer++] = c; // copy 1st byte to buffer
            crc = c; // init crc
        }else if (ptr_rxd_buffer < serialComms::RXD_BUFFER_LEN) // collect incomming bytes
        {
            if(c != '\r') // no termination character
            {
                receivedPacket.data[ptr_rxd_buffer++] = c; // copy byte to rxd buffer
                crc += c; // update crc
            }else // termination character was received
            {
                // the last 2 bytes are not subject for checksum calculation
                // they are the checksum itself
                crc -= receivedPacket.data[ptr_rxd_buffer-2];
                crc -= receivedPacket.data[ptr_rxd_buffer-1];
                // calculate checksum from transmitted data
                crc %= 4096;
                crc1 = (UINT8) ('=' + crc / 64);
                crc2 = (UINT8) '=' + crc % 64;
                // compare checksum to transmitted checksum bytes
                if((crc1 == receivedPacket.data[ptr_rxd_buffer-2]) && (crc2 == receivedPacket.data[ptr_rxd_buffer-1]))
                {   // checksum valid
                    receivedPacket.data[ptr_rxd_buffer] = '\r'; // set termination character
                    receivedPacket.size = ptr_rxd_buffer + 1;// store number of received bytes
                    receiverLocked = true;          // lock the rxd buffer

                    USART_ProcessRxData();
                }else
                {   // checksum invalid
                    receiverLocked = false; // unlock rxd buffer
                }
                ptr_rxd_buffer = 0; // reset rxd buffer pointer
            }
        }else // rxd buffer overrun
        {
            ptr_rxd_buffer = 0; // reset rxd buffer
            receiverLocked = false; // unlock rxd buffer
        }
    } // for( unsigned int k =0; k<read; k++)

        }while(read>0); //end of do/while

    return 0;
    }

Project.exe の 0x00316329 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000000。

エラーは行に表示されます

      read = port->ReadAvailable(buf,1000); // catch the received bytes, read= nb of received bytes in th buffer buf

誰かがこれから私を助けてくれたら、非常に感謝します。本当に大問題

ありがとう :-)

4

0 に答える 0