完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现在遇到一个,偶尔会出现被rt_event_recv 挂起线程无法返回的问题,这个问题出现的概率比较低,有时候几个小时碰到一次,有时候几天碰到一次 程序是这样的,在业务线程里会调用USBD_DAQ_Transmit函数发送USB数据到host,在获取到USB发送锁usb_tx_lock后 串口会有打印begin usb tx,紧接着调用rt_event_recv函数等待usb发送完成事件usb_tx_finish_event,USB发送完成事件是在USB的中断函数USB_DataIn_handler中, 出问题的时候 串口会打印出begin usb tx 和 send usb_tx ev之后就停止了,整个业务就终止了,即没有end usb tx打印 也没有 usb tx timeout打印,说明USB中断中发送了事件,但是接收线程没有返回,连超时也没有起作用,各位帮忙看看,有可能什么原因导致的 USB发送完成中断函数 struct rt_event usb_tx_finish_event; #define EVENT_USB_SEND_FINISH (1 << 0) void USB_DataIn_handler(USBD_HandleTypeDef *pdev, uint8_t epnum) { if(epnum == (DAQ_EPIN_ADDR & EP_ADDR_MSK)) { rt_event_send(&usb_tx_finish_event, (EVENT_USB_SEND_FINISH)); rt_kprintf("send usb_tx evn"); } } USB发送函数,在一个线程里 rt_err_t USBD_DAQ_Transmit ( uint32_t size) { ...... result = rt_sem_take(&usb_tx_lock, RT_WAITING_FOREVER); if(result != RT_EOK) { return result; } rt_kprintf("begin usb txn"); /* Update the packet total length */ hUsbDevice.ep_in[DAQ_EPIN_ADDR & 0xFU].total_length=size; USBD_LL_Transmit (&hUsbDevice, DAQ_EPIN_ADDR,USB_Data_TX_Buff,size); //等待USB 发送完成 result = rt_event_recv(&usb_tx_finish_event, (EVENT_USB_SEND_FINISH),RT_EVENT_FLAG_CLEAR|RT_EVENT_FLAG_OR,RT_TICK_PER_SECOND, &e); if(result == RT_EOK) { rt_kprintf("end usb txn"); rt_sem_release(&usb_tx_lock); } else { rt_kprintf("usb tx timeoutn"); rt_sem_release(&usb_tx_lock); } return RT_EOK; } 这是出现异常的一次情况,daq线程是发送usb数据的业务线程 utx_e 就是用来同步daq线程和USB发送完成事件的 |
|
相关推荐
1个回答
|
|
后来将事件量 改为完成量,测试也是一样会出问题
最后写了一个这样的代码,替代事件量,目前已经运行30天,该问题算是这样解决了 void daq_event_send(rt_event_t event) { event->set=1; } rt_err_t daq_event_recv(rt_event_t event, rt_uint32_t rt_ticks) { while(rt_ticks) { rt_thread_delay(1); if(event->set==1) { event->set=0; return RT_EOK; } else rt_ticks--; } return -RT_ETIMEOUT; } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
754 浏览 0 评论
3703 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2459 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2892 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31079 浏览 11 评论
72783 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 19:45 , Processed in 0.500349 second(s), Total 40, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号