完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题1: 我最近在做一个程序,要通过串口读取外部设备发来的串口数据,然后判断和匹配 那么我思路是这样的:中断接收到一个包,就发送一个邮箱,然后建立一个等待线程,建立一个处理线程,如果按照谁急迫谁优先的话,那么显然接收线程应该高,但是问题来了,倘若接收线程大于处理线程,数据一直来,所以接收线程一直抢占,处理线程没有时间处理,这样也就没有意义,反过来,接收线程小于处理线程,那么当处理线程在处理的时候接收线程就不能保存来自串口的数据,丢失掉,肿木办? 问题2: 为什么在线程中用rt_delay挂起线程的时候会死呢?而在某些线程中却是没问题,我遇到过,比如说一个线程在等一个报警事件,当这个事件来临的时候我要鸣响警笛,延续5秒之后关闭,就是这个5秒我用的系统延时,按理说5秒之后应该进入这个线程,可是他开了就不关闭了,这个延时一旦被调用那么这个线程就会挂起,时间到了没有其他优先级更高的线程的话就会重新进入,但是确实没进入。难道是他挂起后,有别的比他优先级高的一直占用处理机?未可知? 问题3: LWIP的网络。比如说我建立了一个SOCKET,然后在这个上面等待连接,如果有链接进来会被唤醒并且进入接收数据,但是为什么我进入连接之后向远端IP发送数据后出现了一个很奇怪的现象,线连的状态不确定,但是物理层工作正常,LWIP的三服务都正常,就是没有数据进来了,很郁闷。这个现象也是我测试的时候无意发现的,而且所有的上层网络相应都没有了,物理层还在那里正常的工作,跟踪数据发现到TCP、ip服务线程那里都给丢掉了!什么原因呢?奇怪。。。 |
|
相关推荐
2个回答
|
|
问题1.我最近做的一个项目也差不多。提供以下两种思路:
(1)数据接收,处理放在同一个线程下,接收到就处理。(不知道你的处理是否很复杂) (2)将这数据接收和处理线程设置为相同的优先级,然后根据实际情况分配时间片,我是这么做的,我做的项目显示这样做一般不会破坏实时性,响应速度也很快。当然也和你的数据量有关,数据量较大或处理较复杂的时候不知道是否可行。 问题2.最好贴代码让大家看看吧,或者自己单步跟踪看看。 问题3.没研究过LWIP。。。 希望对你有帮助 |
|
|
|
并不是优先级的问题,而是处理能力的问题。
当处理线程处理不完时,肯定会导致丢包。但如果是突发情况,可以加缓冲以平衡处理速度。 比较好的方式是mail box。 调试。另外,需要记住,不要在定时器超时函数中再调用rt_thread_delay()函数; “但是为什么我进入连接之后向远端IP发送数据后出现了一个很奇怪的现象,线连的状态不确定” 看不太明白。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
883 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3025 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1409 浏览 0 评论
2039 浏览 0 评论
1574 浏览 0 评论
75124 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 12:04 , Processed in 0.673514 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号