最初の例の改良

最初の例そのままを書き換えてマイコンに移植することも出来ますが、 その前に少し改良を行います。

この改良したサンプルはexamples/ledにありますので、これを実行してみましょう。 (ソースコードの参照だけならこちらからも可能です。) 以下のように、cdでLEDサンプルのディレクトリに移動し、makeでビルド、make runで実行します。

cd ../led/
make
make run

コンフィギュレーションファイル

コンフィギュレーションファイル(YAMLファイル)は前の例と同じで変更はありません。 ただし、もう一度YAMLファイルからソースコードを生成し直しているので、タイムスタンプなどが異なっています。 その結果、構成IDが変化するため、構成IDの観点からは、前の例の時とは異なった構成として扱われます。 これは、コンフィギュレーションファイルで構成IDの設定を省略した場合のデフォルトの構成IDには、 タイムスタンプなどが含まれるためです。 基本的にサーバーとクライアントは同時に生成されたソースコードを利用する必要があります。

クライアント

単にLEDを点灯させるだけでは通信の成功を判別しにくいので、 徐々にLEDの点灯時間が短くするプログラムになっています。

サーバー

サーバーは前の例では1つのCファイルだったものを、環境に依存しない共通部のhipcsvs_led.cと環境に依存する可変部のmain_posix.cに分割しています。 これにより、マイコンへの移植は可変部のみを新規に作成すれば良くなります。 また、共通部への変更をマイコン用パソコン用といった異なる複数のファイルにコピー・アンド・ペーストする必要もなくなります。

エラー処理にも改良を行っています。 前の例では、不正なメッセージが送られてくることが想定されていませんでしたが、 バグやクラッキングによって不正なメッセージが送られてくる可能性は否定できません。 新しい例では、構造体型番号のチェックと、LEDに0と1以外を書き込もうとしていないかのチェックが加えられています。

さらに、エラーを見つけてセッションを終了させるときのQUITメッセージに、エラーの詳細を説明する文字列を加えています。

なお、この文字列の付与ではメモリ使用量に注意が必要です。 文字列を加えれば、その分のROMが消費されます。 さらに、文字列リテラルの内容に変更を許すような環境では文字列をRAMにも置くかもしれないため、RAMが不足しないかにも注意が必要となります。

このあと取り上げるArduinoでは、文字列を使い過ぎると、プログラムの動作が不安定になったり、まったく動かなくなりました。従って、サンプルに変更を加えてArduinoで動かなくなったような場合には、RAM使用量の削減が解決策の1つになるかもしれません。

前のページ 次のページ


TOPページ

Last modified: 2015/07/27 08:00:59 +09:00