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