<紙>さんLOG

「パソコンヲタクの雑記帳」
 PC/Linux系/物理・化学で遊んでいます。
思いついたことを綴っています。

PIC(13) GCBC

2008年07月03日 | PIC・マイコン
                                                日記@BlogRanking
 PIC16F をステて、PIC18F 一本でと思いながらも、まだ未練がある。
そんなときに、フリーのGreat Cow BASICに手を出してしまった。
 open-source で、PIC16F、PIC18F 両用である。
標準ライブラリはまあまあで、Forum にも若干ある。

だが、結論から言うと、欠点が多いBASIC 言語である。
1.バグが少なくない。
 <紙>が見つけた、重大なものの2件を後で示す。
2.変数は、殆どバイト型のみ。(ワード型も使えるが)
 宣言文で「As Byte」は省略可。
3.原始BASICのように、変数宣言しなくても使える。
 逆に言えば、デバッグ効率が落ちる。
4.割込処理が弱い。つまり、USBデバイスは作れない。

良いところは、
1.オブジェクトサイズが十分に小さい。
2.tiny bootloader に対応したオブジェクトを生成できる。
 (「#option bootloader」が追加されている。)
3.参照されるサブルーチンを後で記述できる。(前方参照可能)
 mikroBASIC や Swordfish BASIC は後方参照のみ可能。
 C言語では、プロトタイプが必要。
4.アセンブラを使うよりは、格段に生産性を高められる。


それで、chip をまた取り替えた。今度は、PIC16F873Aにグレードダウン。
と言っても、18F2550 を外して 16F873A を挿しただけですが。

で、これまでのうち9本を移植してみた。
バグに悩まされて、Swordfish の時とは逆に、1~2日に1本のペースだった。
バグを承知ならば、PIC16F 用には十分使えるかも。
(PIC18F は試していない。Swordfish BASIC がある。)


発見した重大なバグ2件は、「Forum」→「Compiler Problems」と辿って、
「BANKSEL is incorrect」
「IntOff is incorrect」
を見て下さい。(下手な英語ですが)

BANKSEL の件は、SDCCとは逆に最適化しようとしているようだが、
複雑(?)なif 文などの場合に生成が漏れてしまうようである。
if 文はなるべく単純化することで回避した。

IntOff/IntOn については、ついにコンパイラそのものを直してしまった。
FreeBASIC で書かれているので、FreeBASIC コンパイラをDLし、
Great Cow BASIC コンパイラソースを解読した。
これで、割込処理は安心して使えそうである。


最後に、オブジェクトが小さい一例を載せる。
<紙>の結果(概数)
------------------------------- ROM used -- 主な原因
16F877A + mikroBASIC(標準 LCD lib)1,700 Word  "LCD lib"
16F877A + mikroBASIC(自作 LCD lib)1,200 Word
16F877A + SDCC    (自作 LCD lib)1,800 Word  "BANKSEL"
18F2550 + Swordfish  (標準 LCD lib)(2,220Byte)
16F873A + Great Cow (標準 LCD lib)1,140 Word

これは、「Forum」→「Open Discussion」に載せている。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking

PIC(12) SFBC

2008年07月03日 | PIC・マイコン
                                                   日記@BlogRanking
Swordfish BASIC compiler を見つけた。
PIC18F 専用(PIC16F 版の予定はないとのこと)であるが、こんな記述がある。

 The Special Edition (SE) version of Swordfish is a free, fully functional
and non expiring version of the compiler.
 It includes everything you get with the commercial version, including the full list of supported microcontrollers and library source code.
 The compiler is only constrained in terms of the amount of RAM available during compilation.

つまり、データサイズの制限以外は完全フリーで使える。
さらに、オブジェクトサイズが比較対象に比べて格段に小さいと宣伝している。
これは、試してみたい。PIC16F はステてもいいかも。

で、ブレッドボード上、16F877A をはずして、18F2550 に取り替えた。

tiny bootloader は、以前のUSBデバイスのテストの時に書き込んである。

標準のLibが多いし、Forum にも幾つか有る。
それで、既存プログラムを毎日、1~2本ずつ移植してみた。
ADC、USART(<-->PC)、PWM、I2C(master)-RTC、CCP(赤外線リモコン)、割込みなど、計13本。

確かに、オブジェクトサイズは小さいと感じた。


一方で、mikroBASIC でのI2Cスレーブのサンプルソースを見つけたので、
PIC18F2550(master) <---> PIC16F88(slave) の通信実験も行った。
I2Cスレーブは、割込方式とポーリング方式の2種類を。

お手数をおかけします。2クリック(投票を)お願いします ⇒ 日記@BlogRanking