Baumkuchen’s Workshop

バイオリンと電子工作、DIY、ジョギングなど。

作りかけの自作CNCを完成させます#5-コントロールソフト3

コントローラソフトの続きです。Grblのコードの移植を続けます。

baum-kuchen.hatenablog.com

Grblの骨組みをPICに実装する第一ステップクリアしたので、順次、組込み範囲を拡大していく構想でした。

コマンド解析部

早速、protocol_execute_line()以下を組み込んでいきます。できたら、system.c全体を組み込んでいきたいところですが、まず、一番中心となるsystem_execute_line()から、関数単位で組み込んでいきます。組込み先は、仮にundef.cに置きました。また、未組込み関数をダミー関数として、undef.cに仕込むため、最初のビルドを実施。

f:id:Baum_kuchen:20210907213554p:plain

ダメです。

たった一つ関数を追加しただけで、もうメモリが足りないと出ます(エラーコード1347)。普通はコンパイラが上手くやってからているわけですが、メモリ総量は足りてるが、連続したスペースが無いとのエラーです。

仕方がないので、関数内に手を入れて、ビルドが通るまで、コード量を減らして見ます。結局、ヘルプコマンドの解釈部分だけくらいまでコードを減らすと何とかビルドが通りました。

system.c

uint8_t system_execute_line(char *line) 
{   
  uint8_t char_counter = 1; 
  uint8_t helper_var = 0; // Helper variable
  float parameter, value;
  switch( line[char_counter] ) {
    case 0 : report_grbl_help(); break;
    case '$': case 'G': case 'C': case 'X':
      if ( line[(char_counter+1)] != 0 ) { return(STATUS_INVALID_STATEMENT); }
      switch( line[char_counter] ) {
        case '$' : // Prints Grbl settings
          if ( sys.state & (STATE_CYCLE | STATE_HOLD) ) { return(STATUS_IDLE_ERROR); } // Block during cycle. Takes too long to print.
          else { report_grbl_settings(); }
          break;
/* DELETE */
      }
      break;
    default : 
/* DELETE */        
      break;
  }
  return(STATUS_OK); // If '$' command makes it to here, then everything's ok.
}

ビルド結果ですが、メモリ使用量がほぼ96%行ってますので、もう無理です。

Memory Summary:
    Program space        used  3D9Ch ( 15772) of  4000h bytes   ( 96.3%)
    Data space           used   2BAh (   698) of   300h bytes   ( 90.9%)

一応、動きはします。最初がヘルプコマンド($)

f:id:Baum_kuchen:20210907215904p:plain

次が、設定表示コマンド($$)です(中身が繋いでないので全部0ですが)。

f:id:Baum_kuchen:20210907220053p:plain

ちなみに、config.hで、

//#define REPORT_ECHO_LINE_RECEIVED // Default disabled. Uncomment to enable.

コメントアウトすると入力をエコーバックしてくれるのでUSB経由できちんとデータが渡っているか確認できます。

打開策

ここまで、割と順調に進んで来ましたが、メモリ容量という超えられない壁にぶち当たってしまいました。予想通りと言えば、予想通りです。ただ、このまま、諦めるのも癪です。

選択肢としては、次が考えられると思います。

  1. USB シリアルエミュレータを捨てて、シリアル通信に変える
  2. USBエミュレータも乗るメモリ容量の大きいPICに載せ替える
  3. grblを大改造して必要メモリ量削減
  4. 素直にarduindoを使う

1は、USBエミュレータを削除しても容量が足りるか不明。USB-シリアル変換回路の追加も必要(まるで、Aruduinoハードを作っている様)

2は、PIC24FJ64GB002あたりを使うことになりますが、 作動電圧が3.3Vでレベル変換が必要というのも面倒

3は、Grblの大幅改造という手間。こうなると、Grblの流用のメリットも半減。大幅改造の1つとして、大幅機能縮小で、ひょっとしたらメモリ容量も足りるかもしれませんが、やってみないと分かりません。

4は、安直だが確実。自作CNCを一旦完成させるという目的にはかなうが。

どれも妙案がないので悩むところです。

今後について

ということで、もう少し考えたあとで決めます。案4をとるとしても、一時的なものにするつもり(多分)。

今回は短いですがこれで終わりです。御覧いただきありがとうございました。今後も、試行錯誤が続くとは思いますが、よろしかったらお付き合い願います。