Cosmic C コンパイラのソースコードを、Raisonance C コンパイラのソースコードに書き換える方法

2011.9末をもって、Cosmic C コンパイラの16kBバージョンが廃止になったようです.(2011.10時点)
昔からある32kBバージョンは残っていますが、こちらは1年間の使用期限があります.

そこで、フリー版でライセンスに使用期限の制限がないRaisonance C コンパイラを使おうとしています.

Cosmic用に書いたソースコードをRaisonance用に書き換えるにはどこを書き換えたらよいか?
意外と簡単っぽいんです.いまのところ、下記だけという気がしています.

●インタラプトルーチンの先頭を書き換える.
Cosmicの場合:
@far @interrupt void UART2RX_isr(void)

Raisinanceの場合:
void UART2RX_isr(void) interrupt 21

末尾の21は、UART2の割り込み番号が21だから21なだけです.

Cosmicの場合はこの関連づけを、stm8_interrupt_vector.c というファイルでやっていましたが、Raisonanceではいきなり書いて良いということで簡単です.

●stm8_interrupt_vector.c をprojectから除外する.不要なので.

●raisonanceでは、割り込みルーチンに必ずvoidをつけないと怒られるようです.返値がvoidということです.

●raisonanceのmain()ルーチンがretrurnで戻ってはいけない.
最後にはwhile(1)で永久ループすることと、raisonanceの資料に書いてある.

●不具合で
悩んだ末の仮説なんですが、raisonanceでは、グローバル変数=0と宣言と同時にゼロで初期化すると、不具合が生じることがあるような気がする.
    int cnt=0;
    void main(void){  処理  }
上記のソースでトラブル発生.しかし、
    int c;
    void main(void){  処理  }
上記の形ではトラブルなし.あるいは、
    int cnt=1;
    void main(void){  処理  }
というふうに非ゼロの初期化ではトラブルなし.

そのトラブルというのが、UARTを動かすプログラムで、clockを外部(HSE)に設定したときに、UARTのボーレートが異常になる という微妙な症状なので断定するのは難しいのです.
レジスタ領域を壊しているのかな??? 
念のため、gloval変数=0という宣言は避けた方が無難かもしれないです.

Release 2011.10

inserted by FC2 system