8.5.6 マスタのスタートアップ

次の2点を除き、必要な処理はPIC/PID機能を用いない通常のプログラムと同じです。「7.3 スタートアッププログラムの作成」に従ったスタートアップに、次の2つの内容を追加してください。

(1)

アプリケーションの起動と復帰

main関数で、PIDレジスタを設定し、PICのエントリアドレスに分岐してアプリケーションを起動します。また、アプリケーションからマスタに戻れる手段を用意しておく必要があります。

(2)

使用する共有ライブラリ関数の参照

アプリケーションが利用する共有ライブラリは、あらかじめマスタでも参照しておく必要があります。

以下に、main関数からPIC/PIDアプリケーションを呼び出す例を示します。

なお、この例は次の条件に基づきます。

-

アプリケーションの終了時、RTS命令でマスタに復帰できるものとします。

-

アプリケーションは戻り値を持たないものとします。

-

アプリケーションに対するPICの起動アドレス(PIC_entry)、およびPIDの先頭アドレス(PID_address)は、マスタをビルドする時点で既知および固定であるとします。

-

PIDレジスタはR13であるものとします。

-

アプリケーション側のセクション領域の初期化は、マスタ側では行わないこととします。

-

共有ライブラリとして、アプリケーションはprintf関数のみ使用するものとします。

/* マスタ側プログラム */
/* PIC/PIDアプリケーションを起動する */
/* (アプリケーションが、戻り値を返さず、RTSで復帰するシステム仕様の場合) */
#include <stdio.h>
#pragma inline_asm Launch_PICPID_Application
void Launch_PICPID_Application(void *pic_entry, void *pid_address)
{
    MOV.L    R2,__PID_R13
    JSR      R1
}
int main()
{
    void *PIC_entry   = (void*)0x500000;  /* PICの起動アドレス */
    void *PID_address = (void*)0x120000;  /* PIDの先頭アドレス */
 
    /* (1)アプリケーションの起動と復帰 */
    Launch_PICPID_Application(PIC_entry, PID_address);
 
    return 0;
}
 
/* (2)アプリケーションで使用する共有ライブラリの参照 */
void *_dummy_ptr = (void*)printf;  /* printf関数 */