アドレスを表す引数や戻り値を持つ組み込み関数については、その型を従来のunsigned longからvoid * に変更しました。変更になった関数を表 11.1に示します。
この変更により、V.1.00でこれらの関数を利用されていたプログラムでは、V.1.01では型が合わない等の警告やエラーになる場合があります。この場合は、キャストを追加または削除して型を合わせてください。
例として、V.1.00で標準的に使用されていたスタートアッププログラム例を示します。この例はV.1.01ではW0520167の警告メッセージが表示されますが、キャストをはずし型を合わせることで警告を回避できます。
#include <machine.h> #pragma entry Reset_Program void PowerON_Reset_PC(void) { ... set_intb((unsigned long)__sectop("C$VECT")); // 警告W0520167になる ... } |
#include <machine.h> #pragma entry Reset_Program void PowerON_Reset_PC(void) { ... set_intb(__sectop("C$VECT")); // キャスト (unsignd long)を削除 ... } |
V.1.01では、文字列リテラルなどのリテラル領域を収録するLセクションを導入しました。
セクションが増えたことで、リンク時にLセクションが末尾に並ぶため、最適化リンケージエディタからアドレスエラーF0563100が発生する場合があります。
これを回避するためには、次のいずれかの方法を採ってください。
-start=B_1,R_1,B_2,R_2,B,R,SU,SI/01000,PResetPRG/0FFFF8000,C_1,C_2,C,C$*,D*,P,PIntPRG, W*/0FFFF8100,FIXEDVECT/0FFFFFFD0 |
-start=B_1,R_1,B_2,R_2,B,R,SU,SI/01000,PResetPRG/0FFFF8000,C_1,C_2,C,L,C$*,D*,P, PIntPRG,W*/0FFFF8100,FIXEDVECT/0FFFFFFD0 |
コンパイル時に-section=L=Cを指定することで、リテラル領域の出力先がCセクションに変更され、V.1.00互換のセクション構成にすることができます。