このSTM8S discoveryですが、STM8マイコンの普及を狙ってホビースト向けにも販売しているものと推測しますが、ホービースト向けにしては開発環境に難ありなんです.
コンパイラが2社から提供されています.RaisonanceとCosmicです.そのコンパイラを買うと10万円ぐらいしちゃうのでホビーストには手出しが難しい.そこで、機能制限版のコンパイラがフリーで提供されているのですが、このポリシーがしばしば変わるんです.
記憶を辿って5年より前は、
(1) Cosmic バイナリサイズ16KB制限フリー版を提供 (いまいち小さい)
(2) Raisonance フリー版を提供せず
5年ぐらい前に、
(1) Cosmic フリー版を提供せず
(2) Raisonance バイナリサイズ制限無しフリー版を提供 (こいつはGOODだ)
現在、
(1) Cosmic バイナリサイズ32KB制限フリー版を提供 (よかよか)
(2) Raisonance フリー版を提供せず (アウトォォォ!)
この振り子のような往復運動にはあきれるばかり.わざとホビーユーザーの離反を誘っているのか? gccのクロスコンパイラがあればなぁと思ったらSDCCというのがあるみたいですねぇ.今度試してみようそうしよう.
その振り子運動に揺さぶられまくりなわたしの遍歴では、最初はCosmic16Kを使っていて、5年前にRaisonanceの無制限版に乗り換えて、いまでもRaisonanceを使えるんですけど古くて使わなくなったノートPCでしか動きません.なので、現在となってはCosmic32Kに乗り換えなくちゃいけないわけなんです.(両社共、メールにてライセンスファイルを取得する必要があります)
RaisonanceとCosmicのコンパイラを行き来するときに、STVDのプロジェクトファイルには互換がありませんし、ソースを少し書き換えなくちゃいけませんからかったるい.以下、Raisonance → Cosmicへの変更点についてメモっておきます.
(0)workspaceを新規作成
STVDの既存workspaceのコンパイラ設定だけを変更できれば無問題なのだが、やってみるとそれはできないので、新規workspaceを作って、必要なソースファイルを追加してやらねばならない.
(1)割り込みルーチンの記述
【Raisonance】
void Tim3Update(void) interrupt 15
【Cosmic】
@far @interrupt void Tim3Update(void)
(2)Cosmicの割り込みベクタへの登録
【Raisonance】
不要 (上記のinterrupt 15で済んでしまうから)
【Cosmic】
stm8_interrupt_vector.cを書き換える必要がある.
①externで関数プロトタイプを追加
②関数名を上書き
①extern @far @interrupt void Tim3Update(void);
struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
省略
{0x82, NonHandledInterrupt}, /* irq14 */
② {0x82, Tim3Update}, /* irq15 */
{0x82, NonHandledInterrupt}, /* irq16 */
省略
};
【Raisonance】
farかnearかについて、悩んだことはない.
【Cosmic】
manualによるとバイナリサイズ<64kBならば@nearでよいはずなのだが、理由は不明だが@farでないと割り込みルーチンへ飛んで行かなかった.なので@farで決め打ちにしました.
(4)割り込みルーチンの返り値
【Raisonance】
voidと明示しないと怒られる
【Cosmic】
怒られはしないがintにしたぞとwarningが出る
いずれにせよvoidにしておくのが無難であろう.
(5)mainルーチンの末尾
【Raisonance】
while()にし、returnするなとmanualに書かれている
【Cosmic】
main(){;} あるいは main(){return;} にしてみたところ、コンパイルは通りました.FLASHに焼いたらどういう動作をするのかまでは試していません.
いずれにせよwhile()にしておくのが無難であろう.
【Cosmic】
printf()などの書式指定が、
uint8 i;
printf("%02x",(int)i);
のようにキャストしないと表示数値が化けるんだけど、それってオレだけ? つまり%dや%xにintでない整数を突っ込むと化けるのだが、それでいて(warningを表示させても)warningが出ない.
投了してSDCCに乗り換えたら幸福かも.
かしこ
=== STMのアフィリエイト始めました ===
STM32のwelcome-kitです
試用レポはいずれまた...
人気ブログランキングへ
0 件のコメント:
コメントを投稿