11.4.1 V.1.01以降【V.1.00との互換性】

(1)

組み込み関数の仕様変更について

アドレスを表す引数や戻り値を持つ組み込み関数については、その型を従来のunsigned longからvoid * に変更しました。変更になった関数を表 11.1に示します。

表 11.1

型が変更された組み込み関数の一覧

 

項目

仕様

機能

変更内容

箇所

内容

1

ユーザスタック

ポインタ(USP)

void set_usp(void *data)

USPの設定

引数

unsigned long → void *

2

void *get_usp(void)

USPの参照

戻り値

unsigned long → void *

3

割り込みスタック

ポインタ(ISP)

void set_isp(void *data)

ISPの設定

引数

unsigned long → void *

4

void *get_isp(void)

ISPの参照

戻り値

unsigned long → void *

5

割り込みテーブルレジスタ(INTB)

void set_intb (void *data)

INTBの設定

引数

unsigned long → void *

6

void *get_intb(void)

INTBの参照

戻り値

unsigned long → void *

7

バックアップPC(BPC)

void set_bpc(void *data)

BPCの設定

引数

unsigned long → void *

8

void *get_bpc(void)

BPCの参照

戻り値

unsigned long → void *

9

高速割り込み

ベクタレジスタ(FINTV)

void set_fintv(void *data)

FINTVの設定

引数

unsigned long → void *

10

void *get_fintv(void)

FINTVの参照

戻り値

unsigned long → void *

この変更により、V.1.00でこれらの関数を利用されていたプログラムでは、V.1.01では型が合わない等の警告やエラーになる場合があります。この場合は、キャストを追加または削除して型を合わせてください。

例として、V.1.00で標準的に使用されていたスタートアッププログラム例を示します。この例はV.1.01ではW0520167の警告メッセージが表示されますが、キャストをはずし型を合わせることで警告を回避できます。

 

set_intb関数の利用例

#include <machine.h>
#pragma entry Reset_Program
void PowerON_Reset_PC(void)
{
        ...
        set_intb((unsigned long)__sectop("C$VECT")); // 警告W0520167になる
        ...
}

 

V.1.01用の記述に変更した例

#include <machine.h>
#pragma entry Reset_Program
void PowerON_Reset_PC(void)
{
       ...
       set_intb(__sectop("C$VECT")); // キャスト (unsignd long)を削除
       ...
}

(2)

Lセクション追加について(sectionオプション、Startオプション)

V.1.01では、文字列リテラルなどのリテラル領域を収録するLセクションを導入しました。

セクションが増えたことで、リンク時にLセクションが末尾に並ぶため、最適化リンケージエディタからアドレスエラーF0563100が発生する場合があります。

これを回避するためには、次のいずれかの方法を採ってください。

(a)

リンク時の最適化リンケージエディタのStartオプションに指定するセクション列にLを追加する

V.1.00での指定例

-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

変更例 (Cの後にLを追加する)

-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

(b)

コンパイル時に-section=L=Cを選択する

コンパイル時に-section=L=Cを指定することで、リテラル領域の出力先がCセクションに変更され、V.1.00互換のセクション構成にすることができます。

なお、上記のリンク時のStartオプションを変更する方法に比べ、コード効率に影響が出る場合があります。