搜索
bottom↓
回复: 0

求教ucos官方的例程开任务接收串口数据为什么没有丢失

[复制链接]

出0入0汤圆

发表于 2014-12-16 14:24:27 | 显示全部楼层 |阅读模式
官网的例程是在接收中断发送一个接收数据的信号量,然后在任务等待信号量。信号量来临开始接收数据到缓存,直到接收到0x0d或0x0a结束。我现在在接收任务后加延时100毫秒OSTimeDlyHSM(0,0,0,100);但是串口依然可以连续接收到以0x0d 0x0a的字符串数据。实际上接收任务中接收数据后已经关掉串口接收中断,应该等下次任务调度再次开启串口接收中断然后等待串口中断发送过来的信号量,但是这样子的100ms串口数据早就丢掉了,怎么还能接收正常?

//串口单字节接收数据函数
CPU_INT08U BSP_Ser_RdByteUnlocked(void)
{
        CPU_INT08U rx_byte;
        USART_ITConfig(USART3, USART_IT_RXNE,ENABLE);
        BSP_OS_SemWait(&BSP_SerRxWait,0);
        USART_ITConfig(USART3, USART_IT_RXNE,DISABLE);
        rx_byte = BSP_SerRxData;
}

//串口字符串接收数据函数
CPU_INT08U BSP_Ser_Rdstr(INT8U *p_str, INT16U len)
{
//连续接收到0x0d 0x0a接收的字符串数据
}

//串口接收中断
void BSP_Ser_ISR_Handler(void)
{
        if(USART_GetITStatus(USART3,USART_IT_RXNE)==SET)
        {
                BSP_SerRxData=USART_ReceiveData(USART3)&0xFF;
                USART_ClearITPendingBit(USAR3,USART_IT_RXNE);
                BSP_OS_SemPost(&BSP_SerRxWait);
        }
}

//ucos任务
void apptask(void *p_arg)
{
        BSP_Ser_Rdstr(rev, 1000);//接收字符串
        OSTimeDlyHSM(0,0,0,100);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 08:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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