mikroBASIC使いこなし

mikroBASICはプログラムのサイズが小さければ無料で使用できるPIC用統合開発環境です。このページに情報蓄積していくことにしました


2015-02-13

2005-12-15

◆入手
  mkikroElectronikaのサイトからダウンロードできる
  新しいバージョンが出ると旧バージョンは非公開になってしまうようなのでダウンロードファイルは保存しておいたほうがよい。
  上位互換が保証されていないので新バージョンではコンパイルできない可能性があります。

◆価格
  ・プログラムサイズ2Kワードなら無料
     プログラムサイズ2Kワードはソースコードの行数にして500~1000行程度
     無料でいいのだろうか?
  ・それ以上の物を開発するなら$149。安いが、いくつかBUGにもぶち当たったので「品質と価格のバランスが良い」ともいえる。
  ・バージョンアップ料金は不要。一度ライセンスを入手すると、同じライセンスキーで新バージョンも使用することが出来る。
   V5は同じライセンスキーが使えなくなったみたいです。再度ライセンスキーを要求する必要があります。バージョンアップ料金はかかりません。
   2008-04現在V6にしましたが、やはり無料でバージョンアップできます。本当にこのまま永久に無料なのだろうか?
   次から次へと新デバイスが出てくるPICにはありがたいことです。
   (2009-04-17追記)
     mikroBasic PRO for PIC 2009 が発売されました。ライセンスの互換性が無いようです。価格は$199(USD)
     対応しているPICの種類を見る限りバージョンアップなのですが別製品となっています。
     来年は新製品の mikroBasic PRO for PIC 2010 が発売されるということはないでしょうが、2009を製品名に入れたところを見ると
     何年か経過したら別製品にするつもりなのでしょう。
     バージョンアップが無料なので、適当なタイミングで別製品にして収入を得ないとやっていけなくなったのかもしれません。
   (2011-06-30追記)
     OSの入れ替えをするとライセンスが無効になる。
     ユーザーはメールアドレスで識別されているようなので途中でアドレスが変わるとライセンス無効。
     ライセンス要求出しているが今のところ回答なし。販売終了しているのでダメな可能性大。
     プロバイダ変更や再インストールによりライセンスを失う可能性有り。
     (2011-07-01追記)
       ちょっと遅かったがライセンスキーのURLが送られてきた。購入時はメールに添付されてきたが方式が変わっていた。
       ハードディスクをフォーマットした場合にライセンスが無効になるようだ。
       ライセンスキーを要求するときに
         購入時の旧メールアドレス
         旧プロダクトキー
       の2つをメールに書いておいた

◆制約事項
  ・2Kワードの上限に達するとリンク時に「Linker error:Demo limit」のエラーを出します。
   コンパイルには制限が無いので、構文が正しいことは2kワードの制限を気にせずに実施できます。(HEXコードが生成されないのであまり意味ありませんが)
   USBを使いたい場合は、有料版を購入する必要があります。USBライブラリーはそれなりに大きいので、この制限に引っかかって使用できません。
  ・割り込みルーチンの中では関数やサブルーチンが使用できません。
    -> Ver4になって、この制約が無くなったみたいです。但し、割り込みルーチンの中と、それ以外の場所で同じサブルーチンコールが出来ません。
        同じサブルーチンをコールするとリンカーがエラーを出します。
  ・ひとつのサブルーチンのサイズは最大300行程度に収める必要があります。超えるとリンカーがエラーを出します。
   1つのサブルーチンはページ境界を越えられないようです。
  ・PIC24シリーズやdsPICには対応していません。対応しているのはPIC12シリーズ、PIC16シリーズ、PIC18シリーズです。
   厳密に言うとPIC24,dsPIC用は別製品になっていて、mikroBasic (dsPIC30/33 & PIC24) という製品名になっている。
   同じく$149とかなり安い。

◆生成するコード
  ・あまり早くないがインタープリタ方式よりずっと早い。物にもよるがアセンブラーの3倍から5倍程度遅いと見ておけば良さそう。

◆言語仕様
  ・BASICというよりかなりC言語風
   ...であるが マイクロソフトのVisualBASICもC言語風の構文になっているので、古いBASICを知らない人にとっては普通の構文なのだと思う

◆注意点など
  ・括弧付きの四則演算は使用してはいけない。使用するとでたらめなコードが生成される。
   演算子を一つずつばらして実行すること。
   例) A=B*C+D は
      A=B*C
      A=A+D
      に分解してプログラムを書く
   そもそも、メモリーの少ないPICでは長い式を書くのはお作法違反
   殆どのケースで括弧は正しく解釈してくれるので「何だか計算結果が変だなー」と思ったら括弧を外してみるという手順の方が効率的かもしれない。
  ・符号無し変数と負号有り変数の型変換は正しく行われない(マニュアルに明記されている)
  ・統合開発環境なのだがデバッガはあまり使いやすくない
  ・インラインアセンブラが使用できるがMPASMとは書式が若干異なる。
    -アセンブラーの書式に関するマニュアルがない?
    -banksel疑似命令がないところが使いにくい
    ユーザーから要望があがっているようだ、次期バージョンに期待
    -ラベル名にアンダースコアは使用できない
    -WizC(C言語)よりはずっとアセンブラーとの相性が良い。(WizCが悪すぎるともいえる)
  ・コメントに日本語は使用できない
    フォントをfixedsysにすると使えるが、文字のサイズが変更できないのでいまいち
  ・ATMELのシリアルEEPROM(AT24C1024)とうまく通信できなかった
  ・longint変数の符号変換は下のようにやるとうまくいかない
     longval = -longval
   こうやるとうまくいく。でも、これだと符号変換ではなくて引き算。
     longint = 0 - longint
   これ以外にも、自分自身を変更するような式(代入式の左辺の変数を右辺にも使う式)が正しく動かないことがある。

◆テクニック、定石
  ・absoluteを使うと変数領域の共有が出来る。C言語のunionと同じ使い方が出来て便利。デジタル回転計はこの仕組みを知らずにアセンブラーで書いてしまいました。

dim data1 as byte absolute $20
dim data2 as byte absolute $21
dim data3 as byte absolute $22
dim data4 as byte absolute $23
dim long_data as longint absolute $20 ' same address

◆便利な機能

  1.C言語の/* */のように、複数行をまとめてコメントにする書式はないが {..} アイコンで複数行をまとめてコメントにする機能がある。

◆ライセンスの購入方法

Step1 MikroElektronikaのホームページで製品を購入。実際は2CO.COMという別会社がクレジットカード決済の代行を行っているようです。住所などの入力が必要ですが、ライセンスキーだけのオンライン購入なのであまり意味がありません。いろいろな通貨で購入できるようですが自分はUSDで購入しました。¥だと為替レートが円安みたいです。 
Step2 注文ありがとうというメールがMikroElektronikaから送られてきて、そのメールの中に「HELP-HOW TO REGISTERに従ってライセンスの登録をしてくれ」というような内容が書いてあります。
Step3 mikroBASICを起動して「HELP」-「HOW TO REGISTER」メニューを選んで、入力欄に氏名を入力して「SEND」ボタンを押すとメールが自動作成されます。当然、この時点で無料版をインストールしておく必要があります。必要な内容は全て入力されているので送信ボタンを押してメールを送信。
Step4 MikroElektronikaからライセンスキーを登録するプログラムがメールに添付されてきます。zip形式で圧縮されていて150kb程度の大きさです。これを実行して登録完了です。

   手数が多いのですがPM5:30頃オーダーをしてStep1~Step4まで2時間程度で完了してしまいました。

◆バージョンの差異
  Version2でlong型変数を定義すると、アセンブラーからは
    main_global_変数名_1 <-1バイト目
    main_global_変数名_2 <-2バイト目
    main_global_変数名_3 <-3バイト目
    main_global_変数名_4 <-4バイト目
  のようにアクセスできたのですが
  Version4から
    main_global_変数名  <-1バイト目
    main_global_変数名+1 <-2バイト目
    main_global_変数名+2 <-3バイト目
    main_global_変数名+3 <-4バイト目
  としてアクセスするように変わったみたいです
 Version5からは
    _変数名  <-1バイト目
    _変数名+1 <-2バイト目
    _変数名+2 <-3バイト目
    _変数名+3 <-4バイト目
  となってます。しかし良く変わるな~

2006-08-11に出たバージョン5は旧バージョンとライセンスキーの互換性が無いようです。それでも、バージョンアップは無料です

PICT0568.jpg
PICT0564.jpg

◆開発事例
デジタル回転計
自転車走行ロガー
LowCost DRO
電流計付き5V電源
NC翼型フォームカッター
FMSアダプター
沢山有りすぎて更新が面倒になったので開発事例をここに追記するの止めます。
バージョンアップが無料なので他の言語に乗り換えるメリットが殆どないため、当面mikroBASIC以外の言語を使用することはないと思います。

◆その他

・1000行以上になるとLINKの時間が気になり始めます。Pen4 2.8GHzで20秒くらい。
・Ver4トラブル
Ver4になってRAMの使い方がおバカになってしまったのでしょうか? 「 Const truncated : 配列名 」のエラーが出ます。このエラーが出た配列に書き込むと誤動作します。Statisticsのメモリーマップを見ながらabsoluteでアドレス指定してあげると出なくなり、動作も正しくなるようです

PICT3511.jpg

◆バグ

PIC16F88でeeprom_write(),eeprom_read()を使うとコンパイルエラーになります。対処方法はinclude文を追加することです。V4,V5双方のバグです

PICT0571.jpg
PICT0573.jpg

コンパイルエラーが発生するとこんなエラーが出続けることが時々あります。ソースを修正しコンパイルし直すと回復しますが。それまでこれが5~10秒置きに出続けます。
V6では今のところこのエラーに遭遇していません

PICT2027.jpg

デバイスはここで変更できるようになっていますが、デバイスを変更はしない方がいいみたいです。正しいコードが生成されないことがあるような気がします。面倒でもプロジェクトファイルを作り直すのが無難です

PICT3412.jpg

7セグメントLEDを点灯させるときのコードを生成する機能が付いているのですが、各セグメントとポートのビット位置の対応は配線の取り回しのしやすさによって変えるので、これ、何の役にも立ちません

7segmb.GIF

そんなわけで、EXCELで汎用性の高いものつくりました。EXCELを持っていない人は無料のOpenOfficeで開いてください。見た目全く同じです。ピンク色の部分がmikroBASIC用の定数定義。これをコピペして使います

led7seg.GIF
7セグメントLED点灯パターンデータ生成プログラム
ファイル ファイルタイプ 添付ファイルの解説
7LED.xls OTHER EXCELファイル
inserted by FC2 system