嵌入式技术william hill官网
直播中

张艳

7年用户 1590经验值
私信 关注
[问答]

请问什么情况下会导致代码卡在rt_device_write函数这里呢

调试的时候,发现代码卡在这里,不运行了

rt_uint8_t rt_object_get_type(rt_object_t object)
{
/* object check */
RT_ASSERT(object != RT_NULL);
return object->type & ~RT_Object_Class_Static;
}
停在return那里
我看LR寄存器,发现是在rt_device_write函数里调用这个函数的,我现在用到rt_device_write的只有串口一个设备,我推测是串口发送时候出现的问题。

不考虑我的推测,请问什么情况下会卡在这里呢?

rt_size_t rt_device_write(rt_device_t dev,
rt_off_t pos,
const void buffer,
rt_size_t size)
{
/
parameter check /
RT_ASSERT(dev != RT_NULL);
//第二个断言
RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device);
if (dev->ref_count == 0)
{
rt_set_errno(-RT_ERROR);
return 0;
}
/
call device_write interface /
if (device_write != RT_NULL)
{
return device_write(dev, pos, buffer, size);
}
/
set error code */
rt_set_errno(-RT_ENOSYS);
return 0;
}

回帖(4)

刘超

2022-9-14 11:15:52
RT_ASSERT(object != RT_NULL); 是断言的意思, 也就是 while (1),参数不对,如object 指针为空
举报

张艳

2022-9-14 11:16:04
这个不是一开始就不行,是运行一段时间才不行,30分钟以内
举报

刘超

2022-9-14 11:16:12
先检查代码吧,可能有内存越界操作,把内核对象内存给破坏了
举报

张红

2022-9-14 11:16:25
程序跑飞了,运行到这里不稀奇,你应该去检查因为什么导致程序跑飞了

大概率内存溢出之类的非法写内存了
举报

更多回帖

发帖
×
20
完善资料,
赚取积分