VxWorks控制台在哪里存储数据

where does the VxWorks console store data

我正在使用控制台解决 "errno" 像这样:

-> strerror(0x23)
value = 22279888 = 0x153f6d0
-> d 0x153f6d0
NOTE: memory values are displayed in hexadecimal.
0x0153f6d0:  5f53 7265 6e72 5f6f 4e45 544f 5553 0050  *S_errno_ENOTSUP.*
0x0153f6e0:  0000 0000 0000 0000 0000 0000 0000 0000  *................*
...
0x0153f7c0:  0000 0000 0000 0000 0000 0000 0000 0000  *................*
value = 0 = 0x0

此外,如果我创建一个新变量:

-> a=6
New symbol "a" added to kernel symbol table.
a = 0x45446f60: value = 6 = 0x6

现已存储并可用。 但现在我想知道这些字节保存在哪里? 控制台是否在后台进行了内存分配,或者它是否已经为这些目的分配了一些 RAM? 我应该担心这将被保存在哪里吗? 我想只要我在使用控制台,这些数据就会一直存储到重新启动并耗尽内存。

我查看了 "Kernel Shell User's Guide" 但找不到答案。 (VxWorks 7.0)

strerror returns 按错误号指向错误文本的指针。错误文本不是一些动态字符串,它是编译开始前已知的预定义常量,因此它必须与所有其他常量一起存储在 .data segment 中,紧挨着所有其他初始化数据。每当您使用相同的参数调用 strerror 时,您将获得相同内存区域的相同地址,请随意尝试。

创建新变量是另一回事,它实际上从堆中分配内存的方式与 malloc/new 相同。如果您在创建新变量后立即为少量数据(例如 16 字节)调用 malloc,您可能会得到非常接近新变量地址的指针。甚至更多,您可以从控制台调用 free &a 以正确释放内存,不会出现错误。

如果你想的话,你可以真正研究内存映射

  • stack/heap 的开始和大小应在您的项目配置中的某处确定
  • 您可以要求链接器生成 .map 文件 并检查其中的段地址。

所以无论哪种方式,您都可以通过指针值猜测内存部分

注意,我只使用旧版本的 VxWorks(5.5 有 ),所以这可能不是不准确的,但主要思想应该没问题。