我正在使用 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] 分配中的类型限定符不匹配”
我意识到 ROM 变量和 RAM 变量是两个不同的东西,但我不知道该怎么做。