OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2636|回复: 0

ucosii串口中断接收数据,通过消息邮箱发送到其他任务来解析,一直发送不成功。各位大神帮忙看看什么问题。

[复制链接]

2

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2015-9-6
在线时间
8 小时
发表于 2018-10-10 15:19:22 | 显示全部楼层 |阅读模式
刚刚接触ucosii移植,想把串口收到的数据通过消息邮箱发送到其他任务处理,一直实现不了。串口收到数据以后发送一个信号量,其他任务可以解析,完成相应的操作。串口确实接收到了数据,但是发送消息邮箱的时候不知道怎么回事了。哪位师兄可以帮忙看下,谢谢啦!!!


/*串口1接收数据解析*/
void USART1_analysis(void)
{
        u16 i;
        if(USART_RX_STA&0x8000)
        {
                printf("%s",(unsigned char *)USART_RX_BUF); //打印串口收到的数据,可以实现
                OSMboxPost(com1_msg,(void *)&USART_RX_BUF);//发送消息邮箱
                OSSemPost(sem_led1);//发送信号量
        }
       
        for(i=0;i<1024;i++){USART_RX_BUF=0x00;}//接收缓冲区数组清零
        USART_RX_STA=0;
}


//串口1数据解析任务
void com1_task(void *pdata)
{
  INT8U err;
  INT8U *msg;
  pdata=pdata;
        while(1)
        {
                msg=(unsigned char *)OSMboxPend(com1_msg,0,&err);//等待串口接收成功的邮箱消息
                printf("%s",(unsigned char *)msg);//打印邮箱接收到的数据,没有反应。
                if(msg[0]=='1')//根据接收到的指令,控制灯的亮灭
                {
                        LED1=0;
                }
                if(msg[0]=='2')
                {
                        LED1=1;
                }
                delay_ms(100);//ucos系统延时
        }
}


//LED灯任务,显示信号量操作
void led1_task(void *pdata)
{
        u8 err;
        while(1)
        {
                OSSemPend(sem_led1,0,&err);//接收到的信号量,可以实现功能
                LED1=0;
                delay_ms(200);
                LED1=1;
                delay_ms(800);
        }                                                                         

}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 18:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表