【发布时间】:2018-11-28 17:13:47
【问题描述】:
对于嵌入式系统项目,数组应该放在 RAM 中。我已将设备的 RAM 分成两部分,一个存储全局变量和其他数据,另一部分 RAM_DATA,我希望存储两个数组(源位置和目标位置)。
有一个全局值 mem_val 设置为 RAM_DATA 地址的开头,现在想要使源数组从存储在 location 中的位置开始。
根据我从在线资源中获得的信息,他们利用stdint.h 头文件来使用uintptr_t 和uint32_t 值来设置数组的开始。调试程序时,数组不是从这个值开始的,正在询问如何解决这个问题。这是一些与问题相关的代码。
volatile uintptr_t mem_val = 0x0219;
int main(void)
{
char cur_loc[128];
uint32_t *cur_loc = (void *)mem_val;
...
return 0;
}
显然数组初始化并使其成为指针有问题,但除此之外,有没有一种方法可以使数组cur_loc 以赋予mem_val 的值开始?如果有帮助,我正在使用德州仪器 MSP430 嵌入式设备。谢谢
【问题讨论】:
-
听起来像是 XY 问题。这些地址在运行之间不应更改,因此它们可以由链接描述文件固定和给出。我想你有一个?然后你在那里定义你的部分。有问题的数组是在堆栈上分配的,所以不清楚你在这里要做什么。也许将其复制到静态位置?
-
0x0219- 这是真实地址吗?如果是这样,它是不对齐的。在 16 位 msp430 平台上,uint32_t需要 2 字节对齐,例如,0x0220。 -
@kfx,我不知道为什么,但将其移至
0x0220即可,谢谢您的提示。 -
@EugeneSh。我已修改链接描述文件以包含 RAM_DATA 部分并包含一些
#pragma语句,这些语句指定将数组存储在 RAM_DATA 部分中 -
您需要使用链接器命令文件。在该文件中,您可以指定所有内容所在位置的所有详细信息。在链接器命令文件中为每个数组创建一个特定的内存段,然后在源代码中引用内存段的名称。
标签: c arrays memory memory-management msp430