完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、使用uwb模块测距,如果模块没加载,uwb线程会卡死,但不会影响其他线程; |
|
相关推荐
8个回答
|
|
看syswatch依赖项是RT_Thread 4.0
Nano应该是不行的 不过syswatch本质还是看门狗实现的 你看自己的实际需求,是否可以使用看门狗来实现线程异常的检测? 如果可行,自己添加看门狗也是可以的 |
|
|
|
另外你说你的程序运行到 rt_thread_delay(10);后,就不会继续执行循环了。
这应该是被其他线程一直占用cpu了,所以导致你当前的线程无法继续执行。 可以检查下你的所有线程优先级的设置是否合适。。。 |
|
|
|
一、看门狗已经使用了,不过是作为整个系统的跑飞时的恢复措施;
二、另外卡死,并不是在延时rt_thread_delay(10);而是在uwb_app(),测距函数中,有一个等待回复的while循环(此循环,在模块配置时会配置延时等待时间,时间一到,会直接退出这个循环;但是如果在这个过程中uwb模块因为外界原因,导致模块电压不稳,或者物理损坏,就会直接卡在那个循环里); 三、并且此线程会一直卡在那里,并且不会对其他线程造成影响 四、并且此时,再次对线程模块中写入参数,也是不可行;(硬件上已有方案,就是添加开关;但还是想看看能不能软件解决) |
|
|
|
明白了, 关键在于对uwb模块的使用了
建议搞清楚uwb模块进入while死循环的原因,是硬件故障导致还是软件时序或配置错误导致 如果是硬件故障,只有通过硬件解决。如果是软件原因,才能从软件解决了 可以在while内部增加超时判断,可以检测出uwb故障,但解决还需从uwb模块本身入手了 |
|
|
|
是的,已在while中添加超时判断,并在一天的测试中,也并没有发现线程卡死现象;这个问题只能是来说是解决了;
|
|
|
|
不过关于模块出现故障,再次使用软件复位,还是没成功,需要再次研究;
|
|
|
|
1.线程执行延时函数不是卡在这了,每个线程的while(1)里必须得有延时函数,线程执行完操作后执行延时,释放出CPU去执行别的线程,这是正常的;
2.你这种情况建议可以这样操作: ①如果初始化失败,则不进入while(1)测距,可以在这里等待并循环初始化,直到初始化成功再执行while(1)测距; ②可以在while(1)测距循环中使用跳转语句,当判断需要重新初始化uwb时,跳转到开始的初始化即可。 以上供参考。 |
|
|
|
感谢
一、回答1,线程中是有延时的 static void uwb_thread_entry(void *parameter) { printf(“uwb_thread start\r\n”); printf("uwb_config\r\n"); //UWB模块初始化配置 uwb_config(); while(1) { /*APP*/ uwb_app(); rt_thread_delay(10); } 二、回答2,初始化并没有失败;至于在循环中添加跳转,这个好像不太行,我之前试过,在每次测距之前,都初始化一变UWB模块,但是初始化后并不能测距(猜测是多次初始化对UWB模块造成了什么错误); |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
590 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2241 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1233 浏览 0 评论
1788 浏览 0 评论
1464 浏览 0 评论
74854 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 13:33 , Processed in 0.913471 second(s), Total 53, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号