次の2点を除き、必要な処理はPIC/PID機能を用いない通常のプログラムと同じです。「7.3 スタートアッププログラムの作成」に従ったスタートアップに、次の2つの内容を追加してください。
main関数で、PIDレジスタを設定し、PICのエントリアドレスに分岐してアプリケーションを起動します。また、アプリケーションからマスタに戻れる手段を用意しておく必要があります。
アプリケーションが利用する共有ライブラリは、あらかじめマスタでも参照しておく必要があります。
以下に、main関数からPIC/PIDアプリケーションを呼び出す例を示します。
なお、この例は次の条件に基づきます。
- | アプリケーションの終了時、RTS命令でマスタに復帰できるものとします。 |
- | アプリケーションは戻り値を持たないものとします。 |
- | アプリケーションに対するPICの起動アドレス(PIC_entry)、およびPIDの先頭アドレス(PID_address)は、マスタをビルドする時点で既知および固定であるとします。 |
- | アプリケーション側のセクション領域の初期化は、マスタ側では行わないこととします。 |
- | 共有ライブラリとして、アプリケーションは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関数 */
|