完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
连接stlink调试的时候发现,485通信线上有大量数据,不是主机发的,不知道从哪里来的,然后单步调试运行一会,会卡在dummy == 0这里 void rt_assert_handler(const char *ex_string, const char *func, rt_size_t line) { volatile char dummy = 0; if (rt_assert_hook == RT_NULL) { #ifdef RT_USING_MODULE if (dlmodule_self()) { /* close assertion module */ dlmodule_exit(-1); } else #endif /*RT_USING_MODULE*/ { rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line); while (dummy == 0); } } else { rt_assert_hook(ex_string, func, line); } } 看一下打印信息里的参数,提示是下面函数的断言失效, 问题一:在什么情况下,一个信号量的类型不是信号量呢? rt_err_t rt_sem_release(rt_sem_t sem) { register rt_base_t temp; register rt_bool_t need_schedule; /* parameter check */ RT_ASSERT(sem != RT_NULL); RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore); 问题二:有开门狗,平时打断点让代码停下,时间一长,看门狗会复位,但是现在死循环卡在上面dummy那里,为什么看门狗反而不起作用了呢。 |
|
相关推荐
7个回答
|
|
|
RTOS环境下,如果中断服务函数里的回调函数卡在了while循环,还会进行线程切换吗?看了一下,这个信号量释放的函数是在串口接收中断服务函数的回调函数里执行的。相当于中断服务函数里有一个while循环,还会进行线程切换吗?感觉等systick中断服务函数执行完,还是会继续在这个中断服务函数里执行,这时候不能喂狗,如果有看门狗的话应该会重启吧。
|
|
|
|
|
|
卡在中断函数里面线程是没法运行的,看门狗不复位是不是这个时候看门狗都还没初始化到
|
|
|
|
|
|
程序跑飞了呗,在不应该调用到这个函数的时候调用了它。
看门狗在debug的时候,打断点看门狗也会暂停的吧。中断里的while循环不会再回到线程调度。也就不会再喂狗,但是看门狗没动作,说明看门狗也被杀死了呗 |
|
|
|
|
|
莫名的大量数据,肯定是线路上由硬件引入的呗。因为收到大量数据,导致程序跑飞,看门狗死掉又说明软件有bug,应付不了这种大量接收数据的情况了
|
|
|
|
|
|
看门狗是硬件设备,不喂狗就会复位,为什么会被杀死呢
|
|
|
|
|
|
寄存器被修改,看门狗就禁用了
|
|
|
|
|
|
可能是信号量还没初始化就触发中断了,检查一下是不是先开了串口中断再初始化的信号量
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
999 浏览 0 评论
2781 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9368 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2895 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2300 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 18:56 , Processed in 0.759797 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
610