编辑代码

#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;				//DMA发送使能标志 0:禁止发送;1:允许发送
		uint8_t*			SendBufAddr;			//发送的数据起始地址
		uint8_t*			ReceiveBufAddr;			//接收的数据起始地址
		void 				(*USART_DMA_Sent)(uint32_t,uint16_t);//DMA发送函数
}_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]={0x55,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A};
    uint8_t USART_RX_BUF[30]={'U','P','8','\r'};
    uint8_t USART_TX_BUF[30];
//cmd_func[0].str[2]='0';
    _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;
}