프로젝트 난제의 프로그래밍은 데이터가 재발급되지 않는 메커니즘을 실현한다
2041 단어 컴퓨터 프로그래밍 종합keilARM
우리는 어셈블리에 특정 위치로 이동하는 프로그램의 기능이 있다는 것을 알고 있지만, 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);
}
}
나는 두 번째 방법을 사용하는 것을 추천한다. 왜냐하면 그것은 간결하고 쓰기 쉽기 때문이다.