#include <stdio.h>
#include <string.h>
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
#define ARRAY_NUM(array) (sizeof(array) / sizeof((array)[0]))
void YModem_Process(void*u)
{}
void ClearRunTimeProcess(void*u)
{}
#pragma pack(8)
typedef struct
{
uint8_t RecSign;
uint16_t RecCount;
uint16_t SendCount;
uint8_t DMASent_En;
uint8_t* SendBufAddr;
uint8_t* ReceiveBufAddr;
void (*USART_DMA_Sent)(uint32_t,uint16_t);
}_USART_Status;
#pragma pack()
typedef void (*pFunc)(void *);
typedef struct
{
char *str;
pFunc Handler;
}Cmd_func;
Cmd_func cmd_func[] = {
{"UP8\r", YModem_Process },
{"15834130526\r", ClearRunTimeProcess },
};
void cmd_parse(_USART_Status *u,Cmd_func *Cmdfunc)
{
unsigned char index = 0;
Cmd_func *m=Cmdfunc;
for(index=0;index<ARRAY_NUM(cmd_func);index++)
{
if(!strncmp((char*)u->ReceiveBufAddr,m[index].str,strlen(m[index].str)))
{
if(m[index].Handler!=NULL)
{
m[index].Handler(u);
}
}
}
}
void Comm_Process(_USART_Status *usart_status)
{
_USART_Status *u=usart_status;
printf("%d\r\n%d\r\n",u->ReceiveBufAddr[0],u->RecCount);
cmd_parse(u,cmd_func);
if((u->ReceiveBufAddr[0]!=0x55) || (u->RecCount!=11))
{
printf("here\r\n");
cmd_parse(u,cmd_func);
}
else
{
printf("^^^here\r\n");
}
}
void USART0_DMA_Sent(const uint32_t DMA_MemoryBaseAddr,const uint16_t DMA_BufferSize)
{}
int main () {
unsigned char i;
uint8_t USART_RX_BUF[30]={'U','P','8','\r'};
uint8_t USART_TX_BUF[30];
_USART_Status USART_Status={0,1,0,1,USART_TX_BUF,USART_RX_BUF,USART0_DMA_Sent};
Comm_Process(&USART_Status);
printf("%d",sizeof(cmd_func[0].str));
printf("%s",cmd_func[0].str);
return 0;
}