프로젝트 난제의 프로그래밍은 데이터가 재발급되지 않는 메커니즘을 실현한다

ARM은 PC기가 직렬로 보낸 데이터를 수신하고 데이터는 프레임 형식으로 포장되며 바늘 끝이 있다. 내가 실현하고자 하는 기능은 ARM이 프레임 바늘 끝이 정확한지 검사함으로써 PC기에 이전 프레임의 데이터를 다시 보내달라고 요청할지 결정하는 것이다.
우리는 어셈블리에 특정 위치로 이동하는 프로그램의 기능이 있다는 것을 알고 있지만, C 언어에는 없다. 그 중에는 고토가 하나밖에 없다. 그러나 고토는 문제가 생겨 사순환을 일으키기 때문에 사용을 권장하지 않는다.여기서 나는 두 가지 방식을 통해 상술한 기능을 실현하는데 이 두 가지 방식은 모두 실제 검증을 통해 절대로 실행할 수 있다.
1. main 프로그램의while에 표지 위치를 추가하여 ARM에 데이터를 다시 보내야 하는지 알려줍니다. 구체적인 코드는 다음과 같습니다.
int main()
{
    ............(       )
    bool flag=false;   //           
    unsigned int CtrlFlag[6];   //    PC    
    while(1)  
    {	
			
	uartGet(CtrlFlag,0);
	if(CtrlFlag[0]==0xFF && CtrlFlag[5]==0xEE)   //      
	{  
	   flag=false;
           .......(         )
        }
	else  //  PC    ,    
       {
	    flag=true;
			
        }
	if(flag==true)
	   uartSend(RETRANSMIT,0);//    
		  
	
    }
}

2. 하위 함수에서 반복 호출을 사용한다.
/*********uart.cpp************/
.....................
/*******        ***********
*function:UartProtol
*input: whichUart:   
*output:    10    
*********************************/
float *UartProtol(int whichUart)
{
	unsigned int init_HexData=0;
	unsigned int *HexData=&init_HexData;       //      16   (2     )
	static float tmp_DecData[6]={0,0,0,0,0,0};    //      static,          
        float *DecData=tmp_DecData;     
	
	uartGet(HexData,whichUart);
	if(HexData[0]==0xff && HexData[5]==0xee)  //      
	{
	   .......(      )
	   return 	  DecData;
	}
	else   //              
	{
	    unsigned int  ReTransmit[6]= {0xff,0x22,0xff,0xff,0xff,0xee};   //      
	    uartSend(ReTransmit,0);

	    return UartProtol(0);    //    
	}

	
		   

}
...................
/*****main.c*****/
#include "uart.cpp"
int main()
{
    while(1)  
    {	
	//test          
	float ch[6]={0,0,0,0,0,0};
	float *chpt=ch;
	chpt=UartProtol(0);
	int iii=(int)(*chpt);
	uartSendHex(iii,0);	
		
	}
}

나는 두 번째 방법을 사용하는 것을 추천한다. 왜냐하면 그것은 간결하고 쓰기 쉽기 때문이다.

좋은 웹페이지 즐겨찾기