如题,用其他单片机串口发数据给cc2530,接收函数MT_uart.c中处理如下
void MT_UartProcessZToolData_DIY ( uint8 port, uint8 event )
{
uint8 flag=0,i,j=0; //flag 是判断有没有收到数据,j 记录数据长度
uint8 buf[128]; //串口 buffer 最大缓冲默认是 128,我们这里用 128.
(void)event; // Intentionally unreferenced parameter
while (Hal_UART_RxBufLen(port)) //检测串口数据是否接收完成
{
HalUARTRead (port,&buf[j], 1); //把数据接收放到 buf 中
j++; //记录字符数
flag=1; //已经从串口接收到信息
}
if(flag==1) //已经从串口接收到信息
{ /* Allocate memory for the data */
//分配内存空间,为结构体内容+数据内容+1 个记录长度的数据
pMsg = (mtOSALSerialData_t *)osal_msg_allocate( sizeof
( mtOSALSerialData_t )+j+1);
//事件号用原来的 CMD_SERIAL_MSG
pMsg->hdr.event = CMD_SERIAL_MSG;
pMsg->msg = (uint8*)(pMsg+1); //把数据定位到结构体数据部分
pMsg->msg [0]= j; //给上层的数据第一个是长度
for(i=0;i<j;i++) //从第二个开始记录数据
pMsg->msg [i+1]= buf;
osal_msg_send( App_TaskID, (byte *)pMsg ); //登记任务,发往上层
/* deallocate the msg */
osal_msg_deallocate ( (uint8 *)pMsg ); //释放内存
}
}
数据存在结构体中了发往上层了,我现在想在SampleApp.c的 SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg)处理函数中将收到的数据读出来该怎么写啊,我自己的如下,貌似读不出来
void SampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg)
{
uint16 receive_data[10];
uint8 i,len,*str=NULL; //len有用数据长度
str=cmdMsg->msg; //指向数据开头
len=*str; //msg里的第1个字节代表后面的数据长度
/********打印出串口接收到的数据,用于提示*********/
for(i=1;i<=len;i++)
{
HalUARTWrite(0,str+i,1 );
receive_data=*(str+i);
}
HalUARTWrite(0,"n",1 );//换行
if(receive_data[2]=='b')
HalLedblink( HAL_LED_1, 6,50, 500 ); //LED1 闪烁提示
(PS,我发给CC2530的是char Data[4]={'a','b','c','d'};我想判断收到的数据第二位是否正确,跪求指点)
|