有没有办法通过使用gdb确切知道RTEMS应用程序上的堆和堆栈的地址范围?我知道Linux上有info proc mappings
,但我不认为RTEMS有一个/ proc开头。使用x
检查内存会很棒,但我需要知道两者的地址范围。
我知道http://www.rtems.org/wiki/index.php/Debugging中有一些提示,但他们自己也承认这些是粗略估计。
答案 0 :(得分:1)
我也厌倦了在一周后弄清楚相同的事情。但我来了一个十字架,它完全依赖于Os和代码的实现。因为gcc编译器需要8mb的内存用于堆栈和那里的地址范围因为你一次又一次地编译它会继续改变。所以你必须知道它存储在连续堆栈中的位置或堆栈中哪些块与内存中的堆块交错。关注链接你会发现一些提示
答案 1 :(得分:1)
对于堆,您可以调查Heap_Control
结构(在cpukit / score / include / rtems / score / heap.h中定义)和两个变量RTEMS_Malloc_Heap
和_Workspace_Area
。特别是您似乎对Heap_Control.area_begin
和Heap_Control.area_end
字段感兴趣。 _Workspace_Area
可以是堆的一部分或单独的内存区域,它包含内核数据结构。 RTEMS_Malloc_Heap
指向描述传统C程序堆的Heap_Control。
对于堆栈,您可以查看与您的堆栈相关联的Thread_Start_information
中包含的Thread_Control
结构(在cpukit / score / include / rtems / score / thread.h中定义)想要检查。您可以使用_Thread_Executing
宏获取指向执行线程的指针。