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

📄 j1939_tl.c

📁 基于ucosSAEj1939的汽车组合仪表,硬件是MC9S12H128
💻 C
📖 第 1 页 / 共 2 页
字号:
                    }
                    else
                    {
                        go_on = FALSE;//break;
                    }
                }
                else
                {
                    go_on = FALSE;//break;
                }
                break;
            }
            
            case INIT_REASSEMBLE_STRUCTURE:                     //INIT_REASSEMBLE_STRUCTURE和CHECK_PACKET
            {                                                                   //合成为一个状态
                if(ReceiveStatuMachine.TP==TP_CM_RTS)           //面向连接的长报文传输请求           
                {   
                }
                else if(ReceiveStatuMachine.TP==TP_CM_BAM)      //面向未连接的BAM请求
                {
                    if(ReceiveStatuMachine.byte_count<NUMBER_TRANS_RX_BUFFERS) //判断是否超出缓冲区
                    {                       
                        J1939MPMessage.PGN = ReceiveStatuMachine.PGN;
                        J1939MPMessage.dest_addr = ReceiveStatuMachine.dest_addr;
                        J1939MPMessage.source_addr = ReceiveStatuMachine.source_addr;
                        J1939MPMessage.byte_count = ReceiveStatuMachine.byte_count;
                    
                        for(i=0;i<NUMBER_TRANS_RX_BUFFERS;i++)
                        {
                            J1939MPMessage.data[i] = 0;
                        }                                  
                        ReceiveStatuMachine.status = WAIT_FOR_DATA;
                    }
                    else
                    {
                        ReceiveStatuMachine.status= WAIT_FOR_MESSAGE;
                        ReceiveStatuMachine.timer_counter = 0;
                        go_on = FALSE;
                        //break;
                    }           
                }
                else
                {
                    ReceiveStatuMachine.status = WAIT_FOR_MESSAGE;
                    ReceiveStatuMachine.timer_counter = 0;
                    go_on = FALSE;
                    //break;
                }
                break;
            }
  
            case CHECK_PACKET:
            {
                break;
            }
        
            case SEND_ABORT:
            {
                break;
            }
        
            case SEND_CTS_WITH_COUNT:
            {
                break;
            }
            
            case WAIT_FOR_DATA:
            {
                 //printp("mn=%d",J1939PDU.data[0]);//test
                if(J1939PDU.PGN==TP_DT)
                {
                    ReceiveStatuMachine.status = CHECK_DATA_PACKET;
                   // printp("mn=%d",J1939PDU.data[0]);//test
                    //break;
                }
                else
                {
                    ReceiveStatuMachine.status = CHECK_TIMER;
                    //break;
                }
                break;
            }  
            
            case CHECK_TIMER:
            {
                if(ReceiveStatuMachine.timer_counter>(750/TICK))    //750ms超时
                {
                    ReceiveStatuMachine.status = RESET_REASSEMBLY_STRUCTURE;
                    //ReceiveStatuMachine.timer_counter = 0;
                    //break;
                }
                else
                {
                    ReceiveStatuMachine.status = WAIT_FOR_DATA;
                    go_on = FALSE;//break;
                }
                break;                        
            }         

            case RESET_REASSEMBLY_STRUCTURE:
            {
                ReceiveStatuMachine.PGN = 0;           
                ReceiveStatuMachine.dest_addr = 0;
                ReceiveStatuMachine.source_addr = 0;
                ReceiveStatuMachine.packet_number = 0;
                ReceiveStatuMachine.timer_counter = 0;
                ReceiveStatuMachine.total_packet_number = 0;
                ReceiveStatuMachine.byte_count = 0;
                J1939MPMessage.PGN = 0;
                J1939MPMessage.dest_addr = 0;
                J1939MPMessage.source_addr = 0;
                J1939MPMessage.byte_count = 0;
                for(i=0;i<NUMBER_TRANS_RX_BUFFERS;i++)
                {
                    J1939MPMessage.data[i] = 0;
                }
                ReceiveStatuMachine.status = WAIT_FOR_MESSAGE;
                go_on = FALSE;
                break; 
            }          

            case CHECK_DATA_PACKET:
            {
                if(ReceiveStatuMachine.TP==TP_CM_BAM)           //面向未连接的BAM
                {                   
                    if(J1939PDU.source_addr==ReceiveStatuMachine.source_addr&&
                        J1939PDU.dest_addr==ReceiveStatuMachine.dest_addr)
                    {
                        //printp("mn=%d",J1939PDU.data[0]);//test
                        if(ReceiveStatuMachine.packet_number==J1939PDU.data[0]-1)
                        {
                            ReceiveStatuMachine.status = SAVE_DATA;
                            ReceiveStatuMachine.timer_counter = 0;
                            J1939PDU.data[0] = 0;                   
                        }
                        else if(J1939PDU.data[0]!=0)
                        {
                            ReceiveStatuMachine.status = RESET_REASSEMBLY_STRUCTURE;     //包序号错错
                        } 
                        else 
                        {
                            ReceiveStatuMachine.status = WAIT_FOR_DATA;
                            go_on = FALSE;
                        }
                    }
                    else
                    {
                        ReceiveStatuMachine.status = WAIT_FOR_DATA;
                        go_on = FALSE;
                    }
                }
                else if(ReceiveStatuMachine.TP==TP_CM_RTS)  //面向连接的长报文传输
                {}
                else
                {} 
                break;       
            }
            
            case SAVE_DATA:
            {
                i=0;
            
                while((i<7)&&((ReceiveStatuMachine.packet_number*7+i)<=ReceiveStatuMachine.byte_count))
                {
                    J1939MPMessage.data[ReceiveStatuMachine.packet_number*7+i] = J1939PDU.data[i+1];
                    J1939PDU.data[i+1] = 0;
                    i++;
                }
                ReceiveStatuMachine.packet_number++;
            
                if(ReceiveStatuMachine.packet_number==ReceiveStatuMachine.total_packet_number)
                {
                    ReceiveStatuMachine.status = FILL_USER_MESSAGE;                                  
                }
                else
                {
                    ReceiveStatuMachine.status = WAIT_FOR_DATA;
                    go_on = FALSE;
                }
                break;
            }
                 
            case SEND_EOM:
            {
            }
        
            case SEND_CTS:
            {
            }
        
            case FILL_USER_MESSAGE:
            {                        
                ReceiveStatuMachine.status = RESET_REASSEMBLY_STRUCTURE;
                ReceiveStatuMachine.timer_counter = 0;
                NML_process(&J1939MPMessage);					//处理报文
                
                //go_on = FALSE;
                break;
            }
            

            default:
            {
                go_on = FALSE;
                break;
            }
                                                               
        }//end switch   
    }//end while    
}

⌨️ 快捷键说明

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