⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 probe_rs232.c

📁 ucos-ii 的完整代码
💻 C
📖 第 1 页 / 共 3 页
字号:
#endif

    ProbeRS232_InitTarget(baud_rate);                               /* Initialize target specific code                      */
}


/*
*********************************************************************************************************
*********************************************************************************************************
**                                            Task
*********************************************************************************************************
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                        ProbeRS232_Task()
*
* Description : The task whcih parses the received packet, forms a response, and begins transmission.
*
* Argument(s) : p_arg        The argument passed to 'ProbeRS232_Task()' by  'ProbeRS232_OS_Task()'.
*
* Return(s)   : none.
*********************************************************************************************************
*/

#if (PROBE_RS232_PARSE_TASK > 0)
void  ProbeRS232_Task (void *p_arg)
{
    CPU_INT16U  len;


    (void)p_arg;

    while (DEF_TRUE) {
        ProbeRS232_OS_Pend();                                       /* Wait for a packet to be received                     */

        len = ProbeRS232_ParseRxPkt();                              /* Parse packet and formulate a response                */

        if (len > 0) {                                              /* If we have a response                                */
            ProbeRS232_TxLen = len;
            ProbeRS232_TxStart();
        }
    }
}
#endif


/*
*********************************************************************************************************
*********************************************************************************************************
**                                         Rx and Tx Handlers
*********************************************************************************************************
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                        ProbeRS232_RxHandler()
*
* Description : Called when a byte is received.
*
* Argument(s) : rx_data     Received data byte.
*
* Return(s)   : none.
*********************************************************************************************************
*/

void  ProbeRS232_RxHandler (CPU_INT08U rx_data)
{
#if (PROBE_COM_STAT_EN > 0)
    ProbeRS232_RxCtr++;
#endif

    switch (ProbeRS232_RxState) {

        case PROBE_RS232_RX_STATE_SD0:                              /* Receive the start first  start delimiter (SD0)       */
             if (rx_data == PROBE_RS232_PROTOCOL_RX_SD0) {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD1;
                 ProbeRS232_RxBufClr();
             }
             break;

        case PROBE_RS232_RX_STATE_SD1:                              /* Receive the start second start delimiter (SD1)       */
             if (rx_data == PROBE_RS232_PROTOCOL_RX_SD1) {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD2;
             } else {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
             }
             break;

        case PROBE_RS232_RX_STATE_SD2:                              /* Receive the start third  start delimiter (SD2)       */
             if (rx_data == PROBE_RS232_PROTOCOL_RX_SD2) {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD3;
             } else {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
             }
             break;

        case PROBE_RS232_RX_STATE_SD3:                              /* Receive the start fourth start delimiter (SD3)       */
             if (rx_data == PROBE_RS232_PROTOCOL_RX_SD3) {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_LEN1;
             } else {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
             }
             break;


        case PROBE_RS232_RX_STATE_LEN1:                             /* Receive the first  length byte                       */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
             ProbeRS232_RxChkSum    = rx_data;
#endif
             ProbeRS232_RxRemainLen = rx_data;
             ProbeRS232_RxState     = PROBE_RS232_RX_STATE_LEN2;
             break;

        case PROBE_RS232_RX_STATE_LEN2:                             /* Receive the second length byte                       */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
             ProbeRS232_RxChkSum    += rx_data;
#endif
             ProbeRS232_RxRemainLen |= rx_data << 8;

             if ((ProbeRS232_RxRemainLen == 0) || (ProbeRS232_RxRemainLen > PROBE_RS232_RX_BUF_SIZE)) {

                 ProbeRS232_RxState  = PROBE_RS232_RX_STATE_SD0;    /* ... Cannot handle a packet of this size              */
             } else {

                 ProbeRS232_RxLen    = ProbeRS232_RxRemainLen;
                 ProbeRS232_RxState  = PROBE_RS232_RX_STATE_PAD1;
             }
             break;


        case PROBE_RS232_RX_STATE_PAD1:                             /* Receive the first  padding byte                      */
             ProbeRS232_RxState = PROBE_RS232_RX_STATE_PAD2;
             break;

        case PROBE_RS232_RX_STATE_PAD2:                             /* Receive the second padding byte                      */
             ProbeRS232_RxState = PROBE_RS232_RX_STATE_DATA;
             break;



        case PROBE_RS232_RX_STATE_DATA:                             /* Receive the data                                     */
             ProbeRS232_RxStoINT8U(rx_data);
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
             ProbeRS232_RxChkSum += rx_data;
#endif
             if (--ProbeRS232_RxRemainLen == 0) {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_CHKSUM;
             }
             break;




        case PROBE_RS232_RX_STATE_CHKSUM:                           /* Receive the checksum                                 */
#if (PROBE_RS232_USE_CHECKSUM == DEF_TRUE)
             ProbeRS232_RxChkSum += rx_data;
             if ((ProbeRS232_RxChkSum & 0xFF) == 0x00) {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_ED;
             } else {
                 ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
             }
#else
             ProbeRS232_RxState   = PROBE_RS232_RX_STATE_ED;
#endif
             break;




        case PROBE_RS232_RX_STATE_ED:                               /* Receive the end delimiter                            */
             if (rx_data == PROBE_RS232_PROTOCOL_RX_ED) {
                 ProbeRS232_RxPkt();                                /* ... Parse received packet                            */
             }
             ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
             break;




        default:
             ProbeRS232_RxState = PROBE_RS232_RX_STATE_SD0;
             break;
    }
}


/*
*********************************************************************************************************
*                                        ProbeRS232_TxHandler()
*
* Description : Called when a byte has been transmitted.
*
* Argument(s) : none.
*
* Return(s)   : none.
*********************************************************************************************************
*/

void  ProbeRS232_TxHandler (void)
{
    CPU_INT08U  tx_data;


#if (PROBE_COM_STAT_EN > 0)
    if ((ProbeRS232_TxState != PROBE_RS232_TX_STATE_SD0) ||
        (ProbeRS232_TxLen    > 0                       )) {

        ProbeRS232_TxCtr++;

    }
#endif

    switch (ProbeRS232_TxState) {
        case PROBE_RS232_TX_STATE_SD0:
             if (ProbeRS232_TxLen > 0) {                            /* If packet is waiting to be sent                      */
                 ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD0);       /*  ... Transmit start first  start delimiter (SD0)     */
                 ProbeRS232_TxActiveFlag = DEF_TRUE;                /*  ... Transmit in process                             */
                 ProbeRS232_TxState      = PROBE_RS232_TX_STATE_SD1;
                 ProbeRS232_TxBufRdIx    = 0;

             } else {                                               /* If no packet is waiting to be sent                   */
                 ProbeRS232_TxActiveFlag = DEF_FALSE;               /*  ... Transmission not active                         */
                 ProbeRS232_TxIntDis();                             /*  ... Disable transmit interrupts                     */
             }
             break;


        case PROBE_RS232_TX_STATE_SD1:                              /* Transmit start second start delimiter (SD1)          */
             ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD1);
             ProbeRS232_TxState = PROBE_RS232_TX_STATE_SD2;
             break;

        case PROBE_RS232_TX_STATE_SD2:                              /* Transmit start third  start delimiter (SD2)          */
             ProbeRS232_Tx1(PROBE_RS232_PROTOCOL_TX_SD2);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -