• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:組み込みプログラミングにおける安全配慮について)

組み込みプログラミングでの安全配慮について

このQ&Aのポイント
  • 組み込みプログラミングでの安全配慮について学びましょう。
  • C言語を使用した組み込みプログラミングで注目すべき安全配慮について紹介します。
  • 組み込みプログラミングにおける安全配慮のポイントを理解して、マイコン開発に生かしましょう。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

マイコンに関わらずとあるので、組み込みにおける実装での注意すべき点やノウハウなど を書きたいと思います。 私の経験から言うと、一番注意すべき点はやはり何と言っても、スタックオーバーフロー です。スタックオーバーフローを起こさないためにも、プロセス(スレッド)がどれくらい のスタックを使っているかを、可能であれば普段から把握しておく必要があります。 組み込みは他の環境と違ってメモリ容量が制限されるため、スタックオーバーフローを 起こしやすいです。また、プログラムのどのパスが一番深い(スタックを一番使う)かを 把握する必要があります。再帰やalloca()などを積極的に使うとスタックオーバーフロー しやすいので注意が必要です。 あとは定番ですが、バッファーオーバーランというとても有名な脆弱性を含まないプログラ ミングを普段から心掛けたほうが良いです(これはべつに組み込み系に限ったことではない ですが)。 例えば、sprintf()などで編集した文字列は、完成後の文字列の長さを正確に予測すること はほぼ不可能なので、snprinf()で事前に完成後の文字列の長さを調べるようにしたほうが 良いです。

kiroro33
質問者

お礼

ご回答ありがとうございます。 スタックオーバーフローは、それほど意識をしたことがなかったので これからはしっかり意識できるように勉強します。 #今回初めての組み込みプログラムであったこともあり、型宣言や #メモリ容量に気を使ったぐらいでした。。。 バッファオーバーランには、馴染みがあります。 gets関数を学んだころに初めてお目にかかり、対策方法を勉強しました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • R32C
  • ベストアンサー率39% (115/290)
回答No.3

組込みシステムの安全性については、結構深い話ですね。 プログラマとしてプログラミング上の配慮以外にもシステム的なことを キーワードだけでも知識として持っているといいと思います。 1.機能安全 自動車関連で盛んなようです。機械の故障時でも安全側に動作するように するような設計方法ですね。 検索すれば結構ヒットすると思います。 以前、半導体製造装置でも機能安全仕様にしていたことがあります。 内部の作りこみじゃなくて、ユーザーインターフェースが主体でしたが。 機能安全対応のRTOSというのもあります。 2.POSTなど 上記機能安全の1つかもしれませんが、スポットで開発するもののハードウエアの 自己診断とかやっていますか? それなりのコストになるかもしれませんが、開発要件や要求事項になくとも、 やらないならやらないと仕様に明記したうえで実装しないという判断をしたほうが いいですよね。 #やっていないことを前提に書いていますが、やっているならスルーしてください。

kiroro33
質問者

お礼

ご回答ありがとうございます。 >プログラマとしてプログラミング上の配慮以外にもシステム的なことを >キーワードだけでも知識として持っているといいと思います。 仰るとおりだと思います。 浅くても良いので広く知識をもつことは重要だと思っております。 #もちろん専門的な部分は深く持っておかなければならないと思いますが、 #これがなかなか掘り下げていくのが大変に感じてます。 >機能安全 検索してみました。 機能による安全と機能の安全に分類されているようでした。 故障時にいかに安全を維持するかにかなり神経を使いそうですね。 >POST Power On Self Testのことですね。 恥ずかしながら、ハードウェアの故障チェックは意識しておりませんでした。 知識として持たせていただきます。

すると、全ての回答が全文表示されます。
  • anicicle
  • ベストアンサー率36% (129/356)
回答No.1

>コーディングにあたり、安全配慮として心掛けていること等ございましたら 基本的には、PC用のアプリケーションと大差ない。 メモリリークやループリミッタなど。 コーディングというより、それ以外が重要。 「設計」(検討)でH/W特性を理解すること。 H/W制御は、1ビットの間違いで接続しているH/Wを壊したり過電流を流して焼損などPCアプリなら「再起動すればいい」という安易な考えが通用しない。 デバッグでも「結果だけ」で「動かない」、「適当にソースに手を入れたら動いている(様に見える)」では駄目。 通信ならプロトコルアナライザー、ポート制御ならロジックアナライザーやオシロスコープで原因特定するレベルでやらないといけない。 それと、重要なことだけど、大抵は基盤に部品むき出しのまま使用することになるだろうから、 静電気対策や、部品への不要な接触をしない、電源投入前に基盤にゴミがないかといった確認は必要。

kiroro33
質問者

お礼

ご回答ありがとうございます。 ループリミッタとは、意図しない無限ループに陥ることを想定して あらかじめループに制限を掛けておくという理解でよろしいでしょうか。 また、コーディング以外が重要という点については、 仰るとおりだと思います。

すると、全ての回答が全文表示されます。

関連するQ&A