完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
项目中使用pipe通道,两个fd,一个线程读pipe的数据,一个线程写pipe的数据,优先级读的高一些,写的线程100ms写一次,读的线程判了select,设置了超时3s退出(系统配置的是硬件时钟,软时钟没启动),系统运行一段时间后发现读线程的select不返回了,类似于在select里进入了死循环,看了内核的select.c poll.c pipe.c timer.c的代码,去官网搜了已知bug,这几个文件我更新到了最新,但是现象依然存在。现象出现时,我查看了这两线程都处于ready状态,但是运行计数都不在增加,现在就是没有排查思路了,麻烦大神指点一下可能出问题的地方,万分感谢。 自己有几个疑问:1.如果是超时出了问题,那么线程应该处于挂起才对,在poll_wait_out函数中设置定时器时先挂起线程。 static int poll_wait_timeout(struct rt_poll_table *pt, int msec) 2.在_poll_add函数中 static void _poll_add(rt_wqueue_t *wq, rt_pollreq_t *req) 使用rt_malloc分配了堆内存,但是我去查看并未发现有释放堆的操作 void rt_wqueue_wakeup(rt_wqueue_t *queue, void *key) |
|
相关推荐
4个回答
|
|
系统死机也不见得是在select上,你需要追踪死机时的系统调用顺序。
|
|
|
|
感谢您的回复,从应用程序的角度分析是在select里面死循环了,每次现象出现都是select未返回导致,你说的死机时系统的调用顺序,是根据线程属性里面的栈指针去定位还是?有没有具体的文档说明,这块不是很懂,一直也想学习一下
|
|
|
|
不知道你所使用的MCU型号,不过如果是arm cortex-M的MCU,有个软件包CmBacktrace可以尝试一下。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
170 浏览 0 评论
IaaS+on+DPU(IoD)+下一代高性能算力底座技术白皮书
1336 浏览 0 评论
飞凌嵌入式-ELFBOARD 常用的USB接口及其不同版本介绍第1期
1022 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board上OSPI-Flash实践
1472 浏览 0 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 应用层更改引脚复用的方法
3710 浏览 0 评论
64037 浏览 21 评论
297297 浏览 82 评论
嵌入式热门DIY项目:智能机器人开源资料合集(原理图、代码、论文)
67072 浏览 20 评论
57059 浏览 32 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-7 04:57 , Processed in 0.559249 second(s), Total 46, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191