【发布时间】:2012-11-20 23:35:06
【问题描述】:
我正在使用 Microchip C18 编译器做一个项目。我有一个称为块的结构,它指向其他块(东北西南)。这些块将使我成为一张地图。 然后我有一个指针,我用它来评估所有内容。
仅使用 RAM 它看起来像:
struct block{
struct block *north;
struct block *east;
struct block *south;
struct block *west;
};
struct block map[5] =
{ // just a simple line.
{ NULL, &map[1], NULL, NULL },
{ NULL, &map[2], NULL, &map[0]},
{ NULL, &map[3], NULL, &map[2]},
{ NULL, &map[4], NULL, &map[3]},
{ NULL, NULL, NULL, &map[4]}
};
struct block* position = &map[0];
这让我可以做以下事情:
void goWest()
{
if(position -> west != NULL) position = position -> west;
}
问题是我的项目中的 RAM 用完了,需要使用 ROM 到目前为止我所拥有的是:
struct block{
rom struct block *north;
rom struct block *east;
rom struct block *south;
rom struct block *west;
};
rom struct block map[5] =
{ // just a simple line.
{ NULL, &map[1], NULL, NULL },
{ NULL, &map[2], NULL, &map[0]},
{ NULL, &map[3], NULL, &map[2]},
{ NULL, &map[4], NULL, &map[3]},
{ NULL, NULL, NULL, &map[4]}
};
我已经做了一些调试,并且可以告诉上面的部分工作,但试图使位置指针让我很伤心。 所以我想我的问题是:
如何将 ROM 变量地址保存在可以编辑其值的指针中?
当我尝试时:
struct block *position = &map[0];
我收到“警告 [2066] type qualifier mismatch in assignment”
我意识到 ROM 变量和 RAM 变量是两个不同的东西, 但我不知道该怎么做。
【问题讨论】:
-
您好 Cal Pratt,欢迎您。我对你的文字做了一些小的修改,你可能想看看。