0

こんにちは、私の問題です。

私は 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 ベース) では機能しません。私はまだこの問題を理解しようとしています。

4

1 に答える 1

0

これを試しましたか: リンカー スクリプト: 生成されたコードに関数の絶対アドレスを挿入します

最後の答えはあなたが探しているものかもしれないと思います。

于 2017-05-23T06:44:37.833 に答える