2017-05-19 19 views
1

こんにちは皆私の問題です。別のプロジェクトのマップファイルからアドレスで関数呼び出し

MEMORY 
{ 
    rom (rx) : ORIGIN = 0x0800C400, LENGTH = 0x00019CFC 
    ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 
} 

プロジェクトの両方が同じで実行されます:次のように

MEMORY 
{ 
    rom (rx) : ORIGIN = 0x08000000, LENGTH = 0x0000C400 
    ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 
} 

第2のリンカーファイル:

は、私が2つのdistinctsプロジェクトを持って、最初に以下のようにマッピングされたリンカファイルを持っています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ベース)では動作しません。私はまだこの問題を理解しようとしています。

+3

どこから地図ファイルを入手しましたか?マップファイルと 'main()'が同じプロジェクトにあると仮定すると、関数を直接呼び出すことができないのです(これは理にかなっているようです)。混乱する。 – unwind

+0

マップファイルは、マイコンのメモリにある他のプロジェクトからのものです。最初のプロジェクトで作成された関数を使用する必要がある2番目のプロジェクトを構築しています。だから私は直接関数を呼び出すことができません。 – LOSwy

+2

フリースタンディングMCUの実装について書いているのであれば、画像全体を1つのユニットとして構築し、全体を1つのユニットとしてロードしたいと思うようです。 2つの別々の画像をロードしようとしたり、複数の画像を1つにマージしてから読み込んだりするなど、さまざまな問題が発生します。 –

答えて

関連する問題