こんにちは、私の問題です。
私は 2 つの異なるプロジェクトを持っています。最初に、次のようにマッピングされたリンカー ファイルがあります。
MEMORY
{
rom (rx) : ORIGIN = 0x08000000, LENGTH = 0x0000C400
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}
2 番目のリンカー ファイルは次のとおりです。
MEMORY
{
rom (rx) : ORIGIN = 0x0800C400, LENGTH = 0x00019CFC
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}
どちらのプロジェクトも同じ MCU で実行され、別々にフラッシュに書き込まれます。2 番目のプロジェクトでは、最初のプロジェクトで宣言された関数にポインターをマップしたいと考えています。以下のコードを試してみましたが、動作しません。実行時にデバッガーからシンボルが見つからないというメッセージが表示されましたが、最初のプロジェクトの .map ファイルによると、使用したい関数にアドレス (0x0800458C) がマップされています。 .
uint32_t (*Myfunction)(void);
int main(void)
{
Myfunction = ((uint32_t(*) (void)) 0x0800458C); // address in the first project
Myfunction();
}
誰もこれを経験したことがありますか?ありがとう !!
編集:プロジェクトに.symbolsファイルを直接含めると、Keil IDEで動作するようです。しかし、CoIDE (Eclipse ベース) では機能しません。私はまだこの問題を理解しようとしています。