程序运行一段时间后,在rt_schedule_remove_thread()
函数中rt_list_remove
的n->prev->next = n->next
行出现了Store address misaligned
异常(确认n->prev->next
地址不是4字节对齐)。
1、node
在rt_list_init
、insert
和remove
过程中,理论上thread tlist不会出现刚开始地址4字节对齐,运行一段时间后不对齐的case。这种理解对吗?
2、实际中这种情况发生,可能有哪些原因,有没有什么好的建议?
我觉得这里有个信息很重要,就是地址虽然不是4字节对齐了,但这个值本身是否正确?
如果值是正确的,那么来分析为什么有人给出不是对齐的地址。
如果值是错误的,那么应该去分析这个错误的地址是怎么来的。
如果这个节点的值不会经常变动,可以JTAG下个写断点看看。
如果这个节点经常变动,可以考虑对rt_list_init
、insert
和remove
过程加个检查(不过感觉也没什么用)
首先,这个值本身是不对的(或者说不该出现),有把node初始化或者insert时将node地址做了check。
其次,node后续的操作,我理解都是基于node初始化的值。如果一开始就有node地址不对齐,不应该在程序运行很长时间后出现。
感觉像是node处内存被踩?暂时还不太确定。