組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

C言語記述の際はアプリ層とドライバ層に分ける

設計内容分類組み込みソフトウェアにおけるC言語記述

実現したい仕様・課題

ハードウェア(レジスタや周辺モジュール)へ直接アクセスするコードがmain関数やアプリケーション処理の中に散在すると、不具合時にアプリの論理とハード制御のどちらが原因か切り分けられず、デバッグが難航します。またマイコン変更時にはコード全体の見直しが必要になります。保守性と移植性のあるソフトウェア構造にしたいというのが課題です。

設計のポイント

ハードウェアに直接アクセスするコードはドライバ層として、Mainとは別の関数・別のファイルにまとめます。ドライバ層にはOpen/Close、Read/Write、割り込みハンドラといったハードウェア操作の基本機能を実装し、アプリ動作の記述ではドライバ層の関数を呼び出す形とします。この分離により、ドライバ層のデバッグが完了していれば、アプリ層の不具合調査でドライバ層の動作を疑う必要がなくなり、問題の切り分けが明確になります。複数のハードウェアモジュール(UART、SPI、タイマ等)にアクセスする場合は、モジュールごとに別ファイルとし、ドライバに必要なパラメータ(変数)は各ファイル内に閉じて記述します。将来的に再利用できるよう、ドライバにはアプリ固有の動作(業務ロジックや画面遷移への依存)を含めない記述とすることが重要です。この構造の利点は保守性にとどまりません。マイコンを変更する際は、ドライバ層のファイルを新しいマイコン向けに差し替えるだけでアプリ層を再利用でき、移植工数を大幅に削減できます。ドライバの呼び出しインターフェース(関数プロトタイプ)をヘッダファイルで定義しておけば、アプリ層とドライバ層を別担当者が並行開発することも、ドライバ層を単体でテストすることも容易になります。層の分離は、C言語による組み込み開発の品質・工数・再利用性を左右する、最も基本的な設計判断です。

【構成例】

main.c          … アプリ層(ドライバ関数の呼び出しのみ)
drv_uart.c/.h   … UARTドライバ(Open/Close/Read/Write/割り込み)
drv_spi.c/.h    … SPIドライバ
drv_timer.c/.h  … タイマドライバ

// アプリ層の記述イメージ
uart_open(BAUD_115200);
uart_write(cmd, sizeof(cmd));
len = uart_read(buf, sizeof(buf));
C言語記述の際はアプリ層とドライバ層に分ける | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、マイコンのファームウェアにおけるC言語記述のポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

マイコンのファームウェア C言語記述のポイント

>>ダウンロードはこちら!

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談・お問合せ