基本
基本的なPCアーキテクチャの違う箇所は事前に修正します。
具体的には
IOアドレス(outbyte、inbyteを行っている箇所)
絶対番地(rqe$create$descriptorを行っている箇所)
ドライブ名の変更
等は事前に変更しておく必要があります。
1.iRMX®ヘッダファイルの変更 IC286 IC386 --------------------------------------------------------------------------- rmx_nucleus.h
rmx_bios.h
rmx_eios.h
rmx_udi.hrmx_c.h
2.変数サイズによる変更 IC286 IC386 --------------------------------------------------------------------------- ・int
・unsigned int
※iRMX®オブジェクト取得部分
・int
・unsigned intshort
unsigned short
TOKEN
TOKEN
3.タスクエントリ名の変更 IC286 IC386 ---------------------------------------------------------------------------- void Task1() void far Task1(void)
4.プロトタイプ宣言を明確に定義する IC286においては関数のプロトタイプ宣言はあまり明確に行わなくても動作したが、IC386へ移植する際には、プロトタイプ宣言を明確に行う必要があります。
特に、外部関数は明確に宣言する必要があります。
有効な手段としては、コンパイル、バインド時のオプションで「type」設定することです。
この設定でコンパイル及びバインドを行うと、WARNING表示することができます。
IC286 IC386 ---------------------------------------------------------------------------- extern Sub(); extern void Sub(int, char *);
5.Exceptionモードの設定 旧システムのデフォルトエクセプションモードは指定のない限り一般的に0(システムコール例外をアプリケーション内で処理)となっています。
デフォルトエクセプションモードを0に変更するために、イニシャルタスクの最初の処理を以下のようにします。
main( )
{EXCEPTIONSTRUCT handler;
WORD wStatus;
/* JOBのエクセプションモードを0に変更 */
memset(&handler, 0x00, sizeof(handler));
handler.exceptionmode = 0;
rqe_set_exception_handler(&handler, &wStatus );
rqe_get_exception_handler(1, &handler, &wStatus);
handler.exceptionmode = 4;
rqe_set_exception_handler(&handler, &wStatus);