完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
UCOSIII消息传递+串口空闲中断+DMA接收 任务可以收到数据程序没有问题
这里请大家分析一下红色处的问题 void USART1_IRQHandler(void) //串口1中断服务程序 { OS_ERR err; u8 Res,len=0,i=0; u8 *prt; CPU_SR_ALLOC(); OSIntEnter(); OS_CRItiCAL_ENTER(); //进入临界区 if( USART1->SR & (1<<4) ) //接收中断 { Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 len=DataSize-DMA2_Stream2->NDTR; prt=mymalloc(SRAMIN,len); strcpy((char *)prt,(char *)DMA2RX_buff); printf("%s, %dn",prt,len); printf("%s, %dn",DMA2RX_buff,len); for(i=0;i<=len;i++) 其次就是要将DMA的存储器接收的数据清空第二次显示才不会有问题 如果第一次发的数据长,第二次短,那么第二次显示就将第一次的一部分又重新显示一次很奇怪 DMA2RX_buff=0; 正常来说是不用清空数组的应为我开辟的空间是接收回来数据的长度,但是居然连第一次的没有覆盖的部分也显示出来不可思议,接收回来数据的长度是正确的 OSQPost((OS_Q* )&Data_message, // 指向一个消息队列 (void* )prt, //数据的首地址吧 首先是这里 如果我用DMA的存储器的首地址发过去,任务可以收到消息队列但是串口显示数据为空 (现在是strcpy((char *)prt,(char *)DMA2RX_buff);将数据复制到新的数组才没有问题不知道怎么回事) (OS_MSG_SIZE)len, //数据的长度 (OS_OPT )OS_OPT_POST_FIFO, //待发送的消息保存在消息队列的末尾 (OS_ERR* )&err); USART1->SR &=~(1<<4); MYDMA_Enable(DMA2_Stream2,DataSize); myfree(SRAMIN,prt); //释放内存 } OS_CRITICAL_EXIT(); //退出临界区 OSIntExit(); //退出中断 } 例4-1 UCOSIII移植.rar (5.75 MB ) |
|
相关推荐
2个回答
|
|
显示屏自己换吧
|
|
|
|
谢谢分享
|
|
|
|
只有小组成员才能发言,加入小组>>
758 浏览 1 评论
2161 浏览 5 评论
2469 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2252 浏览 6 评论
2197 浏览 7 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
338浏览 9评论
342浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
468浏览 6评论
335浏览 5评论
371浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-8 20:52 , Processed in 0.794497 second(s), Total 50, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号