コントローラソフトの続きです。Grblのコードの移植で問題となったメモリ容量不足。打開策#1がだめでしたので、次の案をトライします。
もっとメモリ容量の大きいPICを使ってみます。手持ちにあったもので、USBインターフェースのあるメモリ32KBのPIC18F2550で、トライしてみます。 まずは、プロジェクトプロパティからDeviceを変更。 これで、ビルドするとIO回りのレジスタ構成がPIC18F14K50と違うためエラーがでますが、とりあえず、cpu_map_pic18f14k50.hを修正し、適当なレジスタを定義してビルドしてみます。 この状態でビルドすると、メモリ消費は47.6%でした。 次に、gcode.cを組み込んでみます。 結果、なんといきなりメモリ消費量が95.2%になってしましました。確かにgcode.cは、Grblのソースファイルのなかで一番大きい59KBあり、コード行数も1000行を超えるものですが、ここまで組み込んで95%超とはびっくりです。Aruduinoに使われているAtmega328では、16KBのメモリにギリギリ収まるのに、PICでは32KBでも無理とは想像できませんでした。 ちなみに、この後、plannner.cやsetting.cを1つずつ組み込んでも、例のエラーコード1347が出て、ビルドできませんでした。残る、planner.c、setting.c、stepper.cのソースコード行数合計は、約1600行ほどですので、最低でも16KB以上のメモリが必要なのかなと思います。 と言う事で、結論としては、打開策案2を採用するしてもPIC18F2550ではだめで、USBシリアルエミュレータ込みで使おうとしたら、64KB以上のメモリのあるPICで無いと難しいということです。 結局、GrblをPICで動かすというのは、かなり無理がありそうです。Atmega328の16KBのメモリでは動くのに不思議です。それも、同じXC8コンパイラでビルドしても16KBに収まるんですから。 ということで、このまま進んでも肝心のCNCが完成を見ないので、残念ですが、一旦、GrblのPIC化は保留とします。次は、一時的に(あくまで一時的と考えたいが)、AruduinoのGrblで全体コントローラを構成することにします。 今回も短いですが、また、中途半端な結果になってしましましたが、これで終わりです。最後まで、御覧いただきありがとうございました。今後も、試行錯誤が続くとは思いますが、よろしかったらお付き合い願います。 続きです。 打開策#2
Memory Summary:
Program space used 3CEAh ( 15594) of 8000h bytes ( 47.6%)
Data space used 193h ( 403) of 800h bytes ( 19.7%)
Memory Summary:
Program space used 79DCh ( 31196) of 8000h bytes ( 95.2%)
Data space used 2B9h ( 697) of 800h bytes ( 34.0%)
今後について