OSAL串口

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;
  }       

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值