OSAL串口使用
void MT_UartInit () //串口初始化
/*********************************************************
*@port:串口号 0 --->>> usart0 1 --->>> usart1
*@buf :发送数据缓存区地址
*@len :发送数据的长度
*********************************************************/
uint16 HalUARTWrite(uint8 port, uint8 *buf, uint16 len)
/*printf使用,在hal_uart.c中增加如下重定向代码*/
__near_func int putchar(int c)
{
unsigned char ch = c;
HalUARTWrite(0,&ch,1);
return(c);
}
使用printf的时候记得包含<stdio.h>头文件
任务间消息发送和接收
/*
*功能:给指定的任务发送消息
*参数
* @destination_task 任务ID
* @msg_ptr 消息指针
*给指定的任务事件置位,SYS_EVENT_MSG
*/
uint8 osal_msg_send( uint8 destination_task, uint8 *msg_ptr )
/*
*功能:接受系统消息
*参数:
* @task_id 任务ID
*返回值:message information or NULL if no message
*/
uint8 *osal_msg_receive( uint8 task_id )
串口接收数据
MT_UART.c
当串口接收到串口消息时,回调MT_UartProcessZToolData函数,来处理接收数据。
void MT_UartProcessZToolData ( uint8 port, uint8 event )
void MT_UartRegisterTaskID( byte taskID ) //接收抽口消息的任务登记函数
//MT_UART.c中修改MT_UartProcessZToolData 函数中的发送msg函数,不校验直接发
case FCS_STATE:
FSC_Token = ch;
osal_msg_send( App_TaskID, (byte *)pMsg );
/* Make sure it's correct */
if ((MT_UartCalcFCS ((uint8*)&pMsg->msg[0], MT_RPC_FRAME_HDR_SZ + LEN_Token) == FSC_Token))
{
//osal_msg_send( App_TaskID, (byte *)pMsg );
}
//在MytaskApp_Init函数中注册任务
MT_UartRegisterTaskID(MytaskApp_TaskID);
//在任务处理函数中接受消息打印测试,使用串口以十六进制发送:FE 02 01 02 03 04 00测试
if(event & SYS_EVENT_MSG){
int i = 0;
My_Msg = (mtOSALSerialData_t *)osal_msg_receive(MytaskApp_TaskID);
for(i = 0; i < 5; i++){
printf("%#x\n",(My_Msg->msg)[i]);
}
return event ^ SYS_EVENT_MSG;
}