2014年12月12日

Firewing: PIC18F/PIC24F/PIC32MX: 無料のBASICコンパイラ Firewing (発見編)2014

PIC18F/PIC24F/PIC32MX: 無料のBASICコンパイラ Firewing (発見編)2014

* はじまり
* 概要
* なぜFirewingなのか?
* Firewingダウンロード
* 対応マイコンと対応コンパイラの関係
    PIC18F:
    PIC24F:
    dsPIC33F:
    PIC32MX:
* Firewingはいかなるものか? BASIC言語からC言語へのトランスレータ
* 外部コンパイラを使う手順
* 外部コンパイラ: ここまでの結果 orz
* PIC24Fのコンパイル成功
    デバイス・ファイルの修正点:
* PIC24FJ64GA002 でLEDチカチカとUART出力 (^^)/
    実験ハードウエア:
    LEDチカチカとUART出力 プログラム:
    ポイント:
    コンパイラはXC 1.11
    Pickit2
    Download:
    ファイル一式:
    config設定ファイル:
    UART出力:
* コンパイラのバグ
* コンパイラと使用可能なPICマイコン
* PIC32MX220F032BでLEDチカチカとUART出力 (^^)/
    Download:
    ファイル一式:
* Pickit2/Pickit3の登録方法
* ワンクリック・コンパイル&書込み

* はじまり
LunaAVRを見つけたばかりだけど、
今度はPIC用のスゴそうな :D 無料BASICコンパイラを発見しました。
Firewing
http://www.firewing.info/
フォーラム
http://www.firewing.info/forum/
ダウンロード
http://www.firewing.info/pmwiki.php?n=Firewing.Download
Firewing BASIC言語マニュアル
http://www.firewing.info/pmwiki.php?n=Firewing.Reference

VB.NETの言語仕様に近いBASICコンパイラで
PIC18F / PIC24F / PIC32MX 系を網羅しています。
浮動小数も使えます。
作者は、あのSwordfishという業界最強?のPIC18F用のBASICコンパイラを作った人の様です。
http://www.sfcompiler.co.uk/swordfish/
ページの作りがそっくりだったりします。xD

* 概要
(1) 開発環境はWindows専用です。
(2) ブートローダ方式も使える。
(3) 一つのIDEで PIC18F/PIC24F/PC32MXのBASICソースをコンパイル可能。
(4) PIC18Fは独自のコンパイラでMicrochipのアセンブラコードを
    吐き出し、最終的にmpasmwin.exeでアセンブルされます。
(5) PIC24F/PIC32MXは内部でGCCのソースに変換されGCCでコンパイルされます。
(6) デフォルトはFirewing内蔵コンパイラで特定のマイコンだけコンパイルできます、
(7) また、MPLABのデバイスファイルを変換したものとMPLABXコンパイラを使えば、
    全てのPICマイコン(18F系,24F系,32MX系)に対応可能です。(後述)
(8) デバイスファイル・クリエータ(ジェネレータ)があるので、今後出る新しいPICにも対応可能。

IDEは結構そっけないものの、登録ボタンを押せばPickit2/3を自動検索して登録してくれます。

* なぜFirewingなのか?
作者がフォーラムに書き込んだ概要です。
PIC18F用のSwordfishコンパイラを作ったけど、ユーザから仕様が独自で
Swordfishコンパイラの書式を覚えても将来のスキルにつながらないと
言われた様です。
それを受けて、VB.NETに準拠したBASICコンパイラを開発したそうです。
Firewingで覚えた書式は将来VB.NET系に生かせるということを狙っています。
あるいは、本物のVB.NETを使ったことがあれば簡単にFirewingで
組み込みプログラムが書けるということになります。
http://www.firewing.info/forum/viewtopic.php?f=7&t=75

* Firewingダウンロード
ダウンロード
http://www.firewing.info/pmwiki.php?n=Firewing.Download
安定版
Download Firewing 1.0.0.6 
その下の
Firewing 1.0.0.7 B3
自分はこちらをメインで試しています。


実は、ちょっとややこしいのでメモしておきます。
* 対応マイコンと対応コンパイラの関係
(1) Firewing内蔵コンパイラ(インストール直後)は以下のマイコンのみコンパイル可能です。
(このブログでは「もっとたくさんのマイコンでも使えるという作り」に着目しています。) xD 後述。
( *印は秋月電子で販売している物、又は容量違い等として使える or 使えそうなマイコン)
PIC18F:
        PIC18F14K50 * 220円 FLASH/SRAM=16KB/8KB USB http://akizukidenshi.com/catalog/g/gI-03031/
        PIC18F25K22 * 170円 FLASH/SRAM=32KB/1.5KB    http://akizukidenshi.com/catalog/g/gI-05557/
        PIC18F26K22
        PIC18F45K22
        PIC18F46K22
PIC24F:
        PIC24HJ128GP502 
dsPIC33F:
        dsPIC33FJ128GP802   
            * 互換で使えるPIC: 
                * 480円 dsPIC33FJ64GP802 FLASH/SRAM=64KB/16KB  
                http://akizukidenshi.com/catalog/g/gI-08458/
                (詳細未調査 * 380円 dsPIC33FJ32GP802 FLASH/SRAM=32KB/2KB)
PIC32MX:
        PIC32MX150F128B
        PIC32MX250F128B     * 360円 PIC32MX250F128B FLASH/SRAM=128KB/32KB
                            http://akizukidenshi.com/catalog/g/gI-07644/ 
            * 互換で使えるPIC?: 
                ( 詳細未調査 * 320円 PIC32MX230F64B FLASH/SRAM=64KB/16KB http://akizukidenshi.com/catalog/g/gI-07643/ )
        PIC32MX320F128H
        PIC32MX795F512L
(2) 内蔵コンパイラでPIC32MXの場合、全て「32bitのMIPSコード」にコンパイルされます。
    mips16は非対応の様です。orz

* Firewingはいかなるものか? BASIC言語からC言語へのトランスレータ
(1) 基本的に、BASIC言語からC言語に変換してコンパイルする。
    (内蔵のPIC18F用コンパイラは直接アセンブラ・ファイルをはき出す)
(2) 従って、Firewing内蔵コンパイラ以外に多数の既存コンパイラに対応している。
    内蔵コンパイラ以外に以下のC言語コンパイラ(以下、外部コンパイラ)を登録すれば、
    BASIC言語ソースをコンパイルすることが出来る。
    (a) PICBasic PRO / PIC18F
    (b) Swordfish / PIC18F 
    (c) XC16 / PIC24/PC3x 系
    (d) XC32 / PIC32MX 
    (e) MPIDE付属のGCC /PIC32MX  http://chipkit.net/started/install-chipkit-software/
    というスゴことになってるみたい。
    一網打尽とはこのことか。xD
(3) 外部コンパイラ使用時は「そのコンパイラで使えるマイコン」は基本全部使えるが(デバイスジェネレータ依存)、
    外部コンパイラが持つ使用制限範囲内(Free版、お試し版等)で使うことになる。
(4) 外部コンパイラを使う時は、専用のデバイスファイルを登録する必要がある。
(5) デバイスファイルは各種コンパイラ専用で、同じマイコンでも互換はない。(自信ない :D 多分ある オイ) 
    外部コンパイラ用のデバイスファイルがそれぞれ用意されている。
(6) 新規マイコン用や「デバイスファイルの再生成」をするためのツールが用意されている。
    デバイス・クリエータ(ジェネレータ)

* 外部コンパイラを使う手順
http://www.firewing.info/pmwiki.php?n=FirewingUser.Articles
上のページの以下の項目に手順が記載されています。
Adding More Devices to Firewing
例えば、XC16コンパイラを登録したい時は、
Installing the XC16 Toolsuite
http://www.firewing.info/pmwiki.php?n=FirewingUser.XC16Toolsuite 
というページに従います。

* 外部コンパイラ: ここまでの結果 orz
(1) XC16を登録してみたが、コンパイルエラーで orz
(2) XC32もorz

お〜〜い!
orz

どうやら、
Firewingのバージョンと用意されているデバイスファイルの構成が一致していない模様。
新しいFirewingと古いデバイスファイルという関係になってしまっている模様。
しかも、コンパイラのバージョンもからんでくるという、もうアレです。
orz

MPIDEでやってみるのだった。
* PIC24Fのコンパイル成功
Firewing内蔵コンパイラでは、「PIC24FJ64GA002」をコンパイルできないので、
外部コンパイラXC16を登録してみた。

参考:
Error when using Microchip 16 compiler
http://www.firewing.info/forum/viewtopic.php?f=17&t=101&start=20

Firewingの外部コンパイラとして、
XC16 v1.20:
    このコンパイラはうまく動かないらしいです。
    特に、v1.20はMicrochipの純正サンプルコードも動かなくなっちゃった様です。xD
但し、
XC16 v1.21:
    は大丈夫らしい。 ただ、コードサイズが無駄に大きくなるらしい。
XC16 v1.23:
    このブログのLEDブリンク、UART出力のサンプルは動作しました。
    v1.11に比べて10%程度コードが大きい。
XC16 v1.11:
    このブログのLEDブリンク、UART出力のサンプルは動作しました。
    ひとまずこのバージョンの実績はあるようなので、
    基本はこれで。コードサイズも小さい。

デバイスは、
 PIC24FJ64GA002 
の組合わせでコンパイル成功した。
提供されているデバイスファイルでエラーが出るので
修正したらOKになりました。
デバイス・ファイルの修正点:
例えば上の例だと、
C:\ProgramData\Mecanique\Firewing\Includes\24FJ64GA002.bas
内の
#const _xramstart = &H0800             ' x RAM start in bytes
という行を
#variable _xramstart = &H0800             ' x RAM start in bytes
に変更してFirewingを再起動します。

実際にマイコンに書き込んで動かした訳じゃないけど
ここまで (^^)/

* PIC24FJ64GA002 でLEDチカチカとUART出力 (^^)/
実際に動かしてみました。
実験ハードウエア:
   http://mpu.seesaa.net/article/399685477.html#toc_07


LEDチカチカとUART出力 プログラム:
システムクロック32MHz(16MIPS)(内蔵クロック)で動作させています。
 '   Firewing    http://www.firewing.info/
'   PIC24FJ64GA002
'   LED blik, UART and System setting test program.
'
'   2014/12: Made by audin.
'           Checked using XC16 v1.11 (Microchip 16)
'

device=24FJ64GA002
clock = 32    ' PLL out is 32MHz. 16MIPS.
imports config24FJ64GA002

'
' Hardware reference,
'   http://mpu.seesaa.net/article/399685477.html#toc_07
'
sub hardwareInit()
    ' UART1 pin setting 
    RPOR6   = ( RPOR6   and &h00ff ) or ( 3 << 8 ) 'set RP13 to TX1  24pin
    RPINR18 = ( RPINR18 and &hff00 ) or ( 14 )     'set RP14 to RX1, 25pin
end sub
    
sub Main()
    Dim LED1 As portb.15         ' RB15, 26pin
    dim count as ushort = 0     ' uint16_t
    
    hardwareInit()
    SetBaudrate( Baudrate.Is9600 )
   
    While True
        High(LED1)
        DelayMS(500)
        Low(LED1)
        DelayMS(500)
        Writeline("Hello! : "_
                    + str(count,5," ")_ 
                    + " , " + "0x"_
                    + hex(count,4,"0") )
        count += 1
    End While
End Sub 
ポイント: コンパイラはXC 1.11 上で書いた様にXC16を登録して使っています。 [Microchip 16]でコンパイル。[Firewing 16]ではコンパイル出来ません。 Pickit2 FirewingにPickit2を登録したので、ワンクリックでコンパイルと書込みが出来ます。 便利 (^^)/ Download: Firewing-LED-Blink-24FJ64GA002-2014-12-27.7z ファイル一式: blink24.bas : メインプログラム config24FJ64GA002.bas : コンフィグ設定ファイル Includes/24FJ64GA002.bas : 修正版 デバイスファイル。 使い方: (1) 上記の「24FJ64GA002.bas」を以下にコピーします。 (Windows7 32bitの場合) C:\ProgramData\Mecanique\Firewing\Includes (2) Firewing IDEで「blink24.bas」を開いてコンパイルとFlash書込みします。 行の分割は「_」(アンダースコア) スクリプト系だと「\」の物とかあるけど「_」を使います。 行末が演算子の場合はそのままで分割可能です。 config設定ファイル: ブートローダなしなのでPIC特有の「コンフィグレーション・ビット」の設定が必要です。 「imports config24FJ64GA002」という行で読み込んでいます。(ファイル名は、config24FJ64GA002.bas) [config24FJ64GA002.bas]の内容です。 PIC特有のアナログポートをデジタルポートに変える設定は、「デバイスフィアイル」内で行っているので 記述する必要はありません。
'
'   Firewing    http://www.firewing.info/
'   PIC24FJ64GA002 configration and system initialization
'
'   2014/12: Made by audin
'
module config24FJ64GA002

Config CONFIG1 = {_
    JTAGEN_OFF,_
    GCP_OFF,_
    GWRP_OFF,_
    BKBUG_OFF,_
    COE_OFF,_
    ICS_PGx1,_
    FWDTEN_OFF,_
    WDTPS_PS1_
}
config CONFIG2 = {_
    IESO_OFF,_
    SOSCSEL_SOSC,_
    WUTSEL_LEG,_
    FNOSC_FRCPLL,_  ' clock setting. IRC 8Mhz x 4
    FCKSM_CSDCMD,_
    IOL1WAY_OFF,_
    I2C1SEL_PRI,_
    POSCMOD_NONE,_
    OSCIOFNC_OFF_     ' clock monitor OSCO pin
}

Sub OnStartup() Handles PIC.OnStartup
    ' initializaton code in here
    'Intenal OSC PostScaler  RCDIV=0
    CLKDIV = CLKDIV and &hf800  ' System Clock devider 1:1
End Sub

end module
UART出力: Firewing内蔵のシリアルターミナルに9600bpsで出力した図。 これでUART経由のprintfデバッグは出来る。:D firewing-terminal.png * コンパイラのバグ 2つも見つけちゃった。 というか、orz orz だったので、今直してもらってる。 回避策があるからいいんだけど、 最近は、ちょっと触ってバグを引く確率が高い。xD orz 速攻で修正してくれたので、(^^)/ 最新版のFirewingを使ったほうが良いです。 1.0.0.7 (B6) 以降がお勧め、 * コンパイラと使用可能なPICマイコン
使用可能コンパイラとマイコン
Firewing Microchip
XC32 ToolSuite
Microchip
XC16 ToolSuite
Swordfish
ToolSuite
PIC BASIC PRO
ToolSuite

詳細未調査
付属無料コンパイラFree版以上Free版以上 有料版以上 有料版以上
PIC32MX PIC32MX150F128B
(PIC32MX250F128B)
PIC32MX320F128H
PIC32MX795F512L
全PIC32MX(注2)---
PIC24F/33F dsPIC33FJ128GP802
(dsPIC33FJ64GP802)
-全PIC24F(H)/33F(注2)--
PIC18F PIC18F14K50
PIC18F25K22
PIC18F26K22
PIC18F45K22
PIC18F46K22
--全PIC18F(注2)全PIC18F(注2)
(注2) 各ToolSuiteとSysgenで生成されたファイルが対応可能な範囲。 * PIC32MX220F032BでLEDチカチカとUART出力 (^^)/ 基本的に上で書いた「PIC24FJ64GA002」と同じです。 http://mpu.seesaa.net/article/399685477.html#toc_08 内蔵クロックを使って48MHzで動作させています。
'   Firewing    http://www.firewing.info/
'   PIC32MX220F032B
'   LED blink, UART1 output and system setting test program.
'
'   2014/12: Made by avrin.
'           Checked using XC32 v1.30 (Microchip 32)
'

device=32MX220F032B
Clock=48
imports config32MX220F032B

'
' Hardware reference,
'   http://mpu.seesaa.net/article/399685477.html#toc_08
'

sub hardwareInit()
    ' UART1 TX/RX pin setting  
    U1RXR = 4   ' set RX to RPB2 , pin6
    RPB3R = 1   ' set RPB3R to TX, pin7
    TRISB.2 = 1 ' set RX port to input 
end sub
    
sub Main()
    Dim LED1 As portb.15         ' RB15, 26pin
    dim count as ushort = 0      ' uint16_t
    Dim ms as short = 500 
    
    hardwareInit()
    SetBaudrate( Baudrate.Is115200 )
   
    While True
        High(LED1)
        DelayMS( ms )
        Low(LED1)
        DelayMS( ms )
        Writeline("Hello! " + str(count,5," ") + ", 0x" + hex(count,4,"0")) 
        count += 1               
    End While
End Sub
UARTのボーレートは115200bpsです。 Download: Firewing-LED-Blink-32MX220F032B-2014-12-27.7z ファイル一式: blink32mx.bas : メインプログラム config32MX220F032B.bas : コンフィグ設定ファイル。blink32mx.basと同じ場所に置きます。 Includes/32MX220F032B.bas : 修正版 デバイスファイル。 使い方: (1) 上記の「32M220F032B.bas」を以下にコピーします。(Windows7 32bitの場合) C:\ProgramData\Mecanique\Firewing\Includes (2) Firewing IDEで「blink32mx.bas」を開いてコンパイルとFlash書込みします。 * Pickit2/Pickit3の登録方法 「Build」-「Options」-「Install New Programmer」で、リストから それぞれ、 「Microchip Pickit II」や「Microchip Pickit III」を選んで「Next」で、 自動検索が始まります。少し時間がかかります。 手動登録も可能です。 その後「Build」メニューで「Pickit III」等にチェックを入れます。 * ワンクリック・コンパイル&書込み 「Build」-「Options」-「Compile and Program」にチェックして、 「Build」を押すとワンクリック・コンパイル&書込みができます。(^^)/ * PIC32MX220F032Bの注意点 PIC32MX220F032Bは公式サポートPICではないので、現状、割込み関係がコンパイルエラーになること が分りました。orz (PIC24F系は大丈夫でした。) 作者に提案しようかどうか考え中。 C:\ProgramData\Mecanique\Firewing\Library\MCU32\System にファイル追加、修正すれば自力で動かすのは可能なんだけど。。。
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | Firewing (PIC) | このブログの読者になる | 更新情報をチェックする