3

関数 void loadableSW (void) を位置 0x3FF802 に配置したいと考えています。別の関数 ResidenceMain() では、関数へのポインターを使用してこの場所にジャンプします。これを達成するために関数 loadableSW を宣言する方法。わかりやすくするために、residentMain のスケルトンを添付しました。

更新: ターゲット ハードウェアは TMS320C620xDSP です。これは航空宇宙プロジェクトであるため、決定論的な動作は望ましい設計目標です。理想的には、特定の時点でメモリのどの部分に何が含まれているかを知りたいと考えています。私が知ったばかりの解決策は、リンカー ファイルでメモリ内のセクションを定義することです。セクションは 0x3FF802 (関数を配置する場所) から開始します。loadableSW 関数のサイズは既知であるため、メモリ セクションのサイズも決定できます。そして、ディレクティブ#pragma CODESECTION ("function_name", "section_name")はその関数を指定されたセクションに配置できます。

プラグマ ディレクティブはテスト スクリプトでは許可されていないため、リンカー ディレクティブを使用せずにこれを行う方法が他にないかどうか疑問に思っています。

その上、私は興味があります。C++ に関数の配置構文はありますか? オブジェクト用のものがあることは知っていますが、関数ですか?

    void residentMain (void)
    {
        void (*loadable_p) (void) = (void (*) (void)) 0x3FF802;
        int hardwareOK = 0;

        /*Code to check hardware integrity. hardwareOK = 1 if success*/

        if (hardwareOK)
        {
            loadable_p (); /*Jump to Loadable Software*/
        }
        else
        {
            dspHalt ();
        }
    }
4

2 に答える 2

0

あなたのOS/ツールチェーン/IDEについてはわかりませんが、次の答えがうまくいくはずです:

関数が格納されるメモリ位置を指定する方法は?

私が知っている方法は1つだけで、最初の回答に示されています。

アップデート

gcc でセクションを定義する方法:

変数: http://mcuoneclipse.com/2012/11/01/defining-variables-at-absolute-addresses-with-gcc/

メソッド (セクション (「セクション名」)): http://gcc.gnu.org/onlinedocs/gcc-3.2/gcc/Function-Attributes.html#Function%20Attributes

于 2013-10-31T08:28:03.940 に答える