完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题:在一个线程中共有前后2部分使用rt_thread_mdelay()进行延时等待,前面部分延时是正常的,后面部分进入rt_thread_mdelay()函数后立马打印hardfault错误,定位了一下错误点是到rt_thread_mdelay()中的_timer_start()函数中卡死。 // 线程中第一部分使用的延时,没有错误 hw_ethernet_write(send_buf, sizeof(send_buf)); while(recv_ack_flag != 1 ) { rt_thread_delay(1000); rt_kprintf("wait !! \r\n"); } // 线程中第二部分使用的延时,进入while循环立马报错 hw_ethernet_write(send_buf, sizeof(send_buf)); while(recv_ack_flag != 1 ) { rt_thread_mdelay(1000); rt_kprintf("wait 2 !! \r\n"); } 有趣的点是:当我减小send_buf大小值的时候,线程中第二部分延时也不报错,试了send_buf数组大小为700的时候不报错,当send_buf大小为1000的时候就开始报上述错误。 hw_ethernet_write函数是通过lwip协议栈中的socket进行通信,实际使用send函数进行封装。 |
|
相关推荐
1个回答
|
|
根据您提供的信息,我将尝试分析可能导致hardfault的原因。请注意,这只是一个分析,实际问题可能需要更详细的调试信息。
1. 首先,检查您的硬件和固件是否与RT-Thread兼容。确保您的开发板和固件版本支持RT-Thread。 2. 确保您的代码没有内存泄漏或栈溢出。这可能导致hardfault。您可以使用RT-Thread的内存检测功能来检查内存使用情况。 3. 检查您的代码中是否有死锁。死锁可能导致线程无法继续执行,从而导致hardfault。检查您的代码,确保没有循环等待或资源竞争。 4. 检查您的代码中是否有递归调用。递归调用可能导致栈溢出,从而导致hardfault。 5. 检查您的代码中是否有未初始化的变量或指针。这可能导致访问无效的内存地址,从而导致hardfault。 6. 检查您的代码中是否有错误的中断处理。错误的中断处理可能导致硬故障。 7. 检查您的代码中是否有错误的时钟配置。错误的时钟配置可能导致定时器异常,从而导致hardfault。 8. 检查您的代码中是否有错误的系统调用。错误的系统调用可能导致内核错误,从而导致hardfault。 9. 检查您的代码中是否有错误的硬件操作。错误的硬件操作可能导致硬件异常,从而导致hardfault。 10. 如果以上检查都没有问题,您可以尝试使用RT-Thread的调试工具(如RT-Thread Studio)来获取更详细的错误信息,以便更好地定位问题。 总之,要解决这个问题,您需要仔细检查您的代码和硬件设置,确保没有错误或不兼容的地方。希望这些建议能帮助您找到问题的原因。 |
|
|
|
只有小组成员才能发言,加入小组>>
156个成员聚集在这个小组
加入小组【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
900 浏览 0 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
1300 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
930 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
1196 浏览 0 评论
【Vision Board创客营连载体验】RA8D1-Vision Board使用7寸屏设置为RGB666大端模式模式成功显示摄像头图案
1203 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 09:43 , Processed in 0.749664 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号