組み込みまするβ

組み込みソフトウェア初学者向けブログ

組み込みソフトウェア

組み込みソフト技術者への質問箱

何かしら役に立つ内容があればよいのですが、私個人の経験から回答したものなので一般的でない内容を含んでいることを理解した上で読んでみてください。 プログラミングを始めたのはいつからですか? 大学は理工学部情報工学科ということもあり、FORTRAN、Li…

シングルタスクの考え方

組み込みソフト技術者の新人研修 - 組み込みまするβの内容の一つに、交通信号機の開発というものがあります。 この開発でシングルタスクのプログラムを作成する上での重要なことを学習してもらうのですが、 その考え方を記事にしてみました。 なお、シングル…

組み込みソフト技術者の新人研修

組み込みソフトの新人研修で実施する内容について、何をどのように教えていくのがよいのかを考えて記事にしました。 なお、C言語の理解が前提条件となりますので、理解が足りていない場合はC言語の書籍やC言語の副読本等で逐次補っていくとよいでしょう。 学…

組み込みソフト版Chronoを作成する

フリーランカウンタを利用した時間経過待ち、タイムアウト判定と時間計測の仕組みは以前の記事で説明していますので、 本記事ではそれをサービスとして提供するコンポーネント(Chrono)を作成します。 時間に関するサービスを提供するコンポーネントはシン…

IOアクセスの共通化

IOアクセスを共通化する理由は何でしょうか? 例えばCPU内蔵の周辺回路は、他のCPUから動かすことはないのでベンダ提供(専用)のIOアクセスで問題ありません。 ではCPUに依存しない単体のNOR-Flashデバイス等はどうでしょうか? このような汎用的なデバイス…

小規模組み込みソフトウェアの共通プラットフォーム

組み込みソフトウェアも一般的なソフトウェアと同じように、 一度作成したサブシステム、ミドルウェア等のコンポーネント(モジュール)を当然再利用しています。 デバイスドライバであっても過去に採用した同系統のCPUであれば周辺回路も互換性があるので再…

組み込みソフトウェアのメモリアロケータ

組み込みソフトウェアの設計ルールは会社組織やプロジェクトによって様々だが、 メモリアロケータに関して使用禁止、もしくはプログラムの初期化以後は使用禁止という場合が多いと思う。 これはOSレスやuITRON系のような小~中規模システムだけでなく、 大規…

割り込み処理でprintfが危険な理由

組み込みシステムではデバッグやリアルタイム動作のログ等で、今でもprintfがよく使用されます。 このprintfを割り込みコンテキストで実行すると危険な場合があるのですが、 そのことを意識せずに使用してしまっているコードを見ることがあり、 注意喚起のた…

タスクスイッチのコスト

マルチタスク環境において、何かの待ちや定期処理の実行後は sleepやセマフォ待ち等で間接的に他のタスクへスイッチさせ、CPUの処理能力を有効に活用していると思いますが、 待ちがあるからと安易にタスクスイッチさせてしまうと非効率な動作となる場合があ…

組み込みソフト技術者へ転向する前に知っておきたいこと

非組み込みのソフトウェア技術者が、組み込みソフト技術者へ転向した後に後悔しないよう書いてみました。 自主的なのか上司の指示なのか、理由は様々だと思いますが、 私が思っていた以上に組み込みソフト技術者へ転向する方は多いようですね。 言語 アセン…

組み込みソフト開発に必要な知識

(「組み込みシステムとは?」の続き記事) 前回の記事で組み込みシステムは様々であり、 組み込みソフト開発の必要な知識を定義するためには対象を限定しないと難しい、ということで終了しました。 ただ、絞り込むにしても経験のないシステムを対象とするこ…

フリーランカウンタで時間サービスを実現する

現実世界における時計の使われ方をイメージしてみましょう。 学校や公園、駅等の大きな時計を例として、ある人が2時17分から30分待ちたい場合、2時47分(厳密には2時48分)になるまで待つことになります。 起点となる時刻"2時17分"を憶えておいて、 (現在時…

時間経過を待つ

組み込みソフトウェアで時間経過を待つにはどうしたらよいでしょうか。 組み込みOSを採用している場合は所謂sleep系関数、あるいは開発環境でwait、delay等の関数ライブラリが用意されていることもあります。 ですがOSレスかつ関数ライブラリも用意されてい…

C++版デバイスドライバのclassと割り込み関数

C++で作成された組み込みソフトウェアのデバイスドライバの実装を見ると、 デバイスドライバのclassとは別に割り込み関数が独立しているケースが多いです。 ですが凝集度やカプセル化、マルチインスタンスへの対応を考えると、 割り込み関数をデバイスドライ…