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 変数は 2 つの異なるものだと認識していますが、どうすればよいかわかりません。