1K Views
June 29, 19
スライド概要
地方在住の組み込みソフトウェアエンジニア。楽をするための努力は惜しまない。 Enjoy life! #組込み #組み込み #高知組み込み会
知ってるようで知らない 組み込みソフトウェアの世界 高知組み込み会 #1 2019/6/28 千谷 1
自己紹介 ● ● ● ● ● ● 千谷裕志 (Chiya Yuji) 愛媛生まれ 高知工科大学卒 組み込みツールベンダーで受託開発 家庭用医療機器メーカー 防災用計測機器メーカー←いまここ よさこいはライフワーク 2
アジェンダ ● ゴール: 組込みソフトウェア開発がどのように行われるかを知る ● ● ● ● 組込みソフトウェアとは ハードウェアの話 ソフトウェアの話 開発するときの話 3
● ● ● ● 組込みソフトウェアとは ハードウェアの話 ソフトウェアの話 開発するときの話 4
組み込みソフトウェア “組み込み機器に搭載さ れて動作するソフトウェア のことで、組み込み機器 とは特定用途向けに特 化、限定した機能を果た すことを目的とした機器の こと” https://www.fsi-embedded.jp/e mbedded_news/what_is_embe dded/282/ https://www.ipa.go.jp/files/000065944.pdf 5
何がそんなに特別なのか ● ソフトウェア要因 ○ ○ ● 不具合発生時に想定される被害が大きい(車や飛行機や医療機器) 出荷後のアップデートが大変(現地に行く OR 回収) 制限、制約が多い ○ ○ ○ ○ ○ 様々な使用環境を考慮する必要がある(温度、湿度、振動、経年劣化) 内外から発生するノイズを考慮する必要がある(雷や IH、電子レンジ) 動作周波数、メモリ(量産コストが気になる) 時間(期待する時間以内に処理が完了しないと重大な問題がありうる) 電力(電池で1年くらい動いてくれないと大変めんどくさい) 6
● ● ● ● 組込みソフトウェアとは ハードウェアの話 ソフトウェアの話 開発するときの話 7
主要なメーカー ● ● ● ● ● ● ● ● ● ARM ST micro NXP TI microchip infeneon Renesas TOSHIBA LAPIS http://blog.knak.jp/2018/09/iot.html https://pc.watch.impress.co.jp/docs/ column/semicon/316228.html 8
ペリフェラル ● ● ● ● ● ● ● ● ● ● PLL GPIO タイマー, カウンタ 割り込み ウォッチドッグ AD, DA UART, I2C, SPI, USB, Ethernet Video/Audio MMU, MPU DMA, DTC http://akizukidenshi.com/download/ds/microchip/ atmega328.pdf 9
レジスタ ● General Purpose Register ○ ○ ○ ● Status Register ○ ○ ● 実行する機械語のアドレス Stack Pointer ○ ● 機械語の実行結果を保持する領域 桁あふれ、比較が一致、結果がマイナス、結果がゼロ Program Counter ○ ● 機械語はこの領域を使って計算する どのレジスタを使うかはコンパイラ次第 関数の戻り値はだいたい R0 関数呼び出し時に汎用レジスタや戻り先を保持する領域 Special Function Register ○ ペリフェラルを制御するためのレジスタ http://akizukidenshi.com/download/ds/microchip/atmega328.pdf 10
メモリマップドI/O ● ● ● ● ペリフェラルを制御するレジ スタもメモリ上に配置する ついでに言えばRAMと ROMもどこかのアドレスに 配置している MPUが無いマイコンだと うっかり書き換えたりして暴 走する PCが変な値になっても暴走 する https://www.aps-web.jp/academy/cm/19/ 11
e.g. UARTのレジスタ ● ● ● ● それぞれのペリフェラルごとに、機 能を実現するためのレジスタが用 意されている 設定用 送受信用 ステータス取得用 http://www.picfun.com/f1/f04.html 12
リセット ● ● ● ● ● POR(Power On Reset) 外部リセット (リセットピンに信号入力) ウォッチドッグタイマ ソフトウェアリセット 低消費電力管理リセット https://ednjapan.com/edn/articles/1906/28/news009.html13
ベクタテーブル ● ● ● ● ● 外部入力やタイマーなどの割り込み が成立すると特定アドレスの命令が 実行される SFRで割り込み有効にするかどうか を決めることができる 通常はここでJMPやCALLする スタックオーバーフローしたときは不 正命令例外がよくでる mail()の前はリセット割り込み http://akizukidenshi.com/download/ds/microchip/atme ga328.pdf 14
アセンブラ ● ● ● コアが異なると 機械語が異なる ARMは全部一 緒なのでコンパ イラ等は使い回 せるがペリフェラ ルは異なる コンパイラのバ グはここで発生 https://www.researchgate.net/figure/Intel-vs-ARM-assembly-from-a-defcon-tal 15 k_fig1_320952677
電源 ● ● マイコンでよく使うのは3.3Vと5V 基本的に3.3Vの端子に5Vを入れると壊れる ○ ○ ○ ● AC100VからDCに変換する手段 ○ ○ ○ ● 例外的に高い電圧を入れても大丈夫なトレラントの端子もある マイコンの絶対最大定格をよく見よう 超えると壊れる レベル変換ICを使ったり抵抗で分圧したりする 三端子レギュレータ DCDCコンバーター どちらも出力電流をよく見よう 超えると過熱して壊れる 突入電流 ○ ○ 電源ONしたときに電流がたくさん流れる機器がある 一時的に電圧が低下する場合がある 16
回路 ● ● マイコン、IC、周辺部品等をどう繋ぐか示す図 を回路図という ハードウェア屋さんは各データシートのリファ レンス回路を見ながら回路図を書く ○ ○ ● その後パターン設計 基板ができたら部品を手実装(量産時は外注) ファーム屋さんは基板と回路図を渡される ○ ○ ○ ○ ○ まずは電圧(ちゃんと出てるか安定してるか) リセット信号が解除されてるか デバッガの信号確認 各ペリフェラル(特に UART)信号確認 センサー、ICとの接続確認 https://macrofab.com/blog/key-parts-of-anarduino-how-to-integrate-the-arduino-platf 17 orm-into-your-product/
通信 ● UART ○ ● I2C ○ ● 3bitのアドレスで区別 遅い ~1Mbps データ量が大きい時によく使う バス接続可 SS信号で区別 早い ~4Mbps USB ○ ● データ量の小さい時によく使う バス接続可 SPI ○ ● 機器間の通信やデバッグによく使う RS-232Cとは電圧が異なるので MAX3232を使って変換する 場合が多い クロック精度によっては同期ずれる 1対1 遅い ~115.2kbpsあたり プロトコルスタックが大変なのでミドルウェアを買う Ethernet ○ ○ プロトコルスタックが大変なのでミドルウェアを買う 消費電流多いのであまり使いたくない 18
センサー ● ● あらゆるセンサーの計測値は電圧に変換される 温度センサ ○ ● 気圧センサ ○ ● 同じ 電流センサ ○ ● 例えば 温度低い =電圧低い 温度高い =電圧高い 測定用抵抗両端の電圧を測る(電流 =電圧/抵抗) 電圧を計測するのはADC ○ ○ ○ まずはペリフェラルを検討する 仕様を満たせないなら外付け ADCをI2Cなどで使う 電圧から物理量への変換までしてほしいときはセンサモジュールを使う 19
● ● ● ● 組込みソフトウェアとは ハードウェアの話 ソフトウェアの話 開発するときの話 20
開発環境 ● ● ● マイコン毎にコンパイラ、IDEが異なる デバッグ、ダウンロードにも専用機材が必要 ARMは沢山選べてありがたい https://www.uctec.com/2013/11/527/ https://www.renesas.com/jp/ja/products/software-tools/tool 21 s/ide/e2studio.html
リアルタイムOS(RTOS) ● ● ● ● リアルタイム≠即時 最低応答時間が保証されている タスクという単位でプログラムを実行する タスク間通信はOSの提供する関数で行う ○ ○ ○ ○ ○ ● ● μITORNの場合 イベントフラグ (set_flg, wai_flg) メッセージボックス (snd_mbx, rcv_mbx) セマフォ(sig_sem, wai_sem) 等 http://www.mispo.co.jp/products/NORTi/Pro/ μITORN, T-Kernel, ThreadX, FreeRTOS, VxWorks 機能とコストによってはOSを使用しない場合もある 22
ミドルウェア ● OSには最低限の機能しかない ○ ○ ○ ○ ○ ● ● ファイルシステム TCP/IP USB Host, Device GUI 等 目的に合わせてミドルウェアを用意する 数十万~数百万 https://www.cente.jp/product/cente-middle/filesystem/filesystem/ 23
最適化とプリプロセッサ ● 最適化するときはvolatile修飾子必須 ○ ● コンパイラの独自拡張が多い ○ ● P4.3 = 1 のように使える #pragma inline ○ ● 以下のようなものが多い SFRにアクセスするためのマクロ ○ ● 最適化かけるとデバッガで追いにくいので開発時は最適化 OFF 対象関数をcallではなく呼び出し元に展開する #pragma interrupt ○ 対象関数を割り込みベクタに指定する 24
ポーリングと割り込み ● ● ● ポーリングはwhile(1)でずっと待つ 割り込みは割り込みベクターでイベント発生時だけ動く プログラム実行時間は消費電流に直結するのでポーリングは避けたい https://www.renesas.com/jp/ja/support/techn ical-resources/engineer-school/mcu-progra mming-peripherals-04-interrupts.html 25
● ● ● ● 組込みソフトウェアとは ハードウェアの話 ソフトウェアの話 開発するときの話 26
機能とコスト ● 動作周波数, RAM, ROM ○ ● 高価マイコンのほうが高機能 ○ ● いずれも大きいマイコンは高価 破壊したときのショックも大きい (余談)FPGAのお値段は桁違い RL78 (R5F100L EAFB) 周波数 RAM ROM 単価 調達 32MHz 4KB 64KB ¥290 96KB 512KB ¥950 価格 MOQ 長期供給 急な調達 支払条件 サポート RX621 100MH (R5F56218 z BDFP) http://akizukidenshi.com/catalog/g/gI-06146/ http://akizukidenshi.com/catalog/g/gI-04713/ https://www.marutsu.co.jp/GoodsListNavi.jsp?category=190004&ids=0&page=1&perpage=527 0&shopNo=3&sort_order=expensive_order
制限、制約 ● 消費電力 屋外では商用電源を確保するのが難しい ソーラーパネルはコストもかかるし日照が必要 電池に頼らざるを得ない場合も多いけど交換が手間 ○ ○ ○ ● 時間 ○ ○ ● 耐水性 ○ ● 期待した時間内に動作しないと人命に影響を与える機器もある ATM、電力、乗り物、医療機器 水没、結露しても動作しなければならない機器もある マイコンメーカーはCのコンパイラしか提供しない ○ C++がある場合もあるが 28
信頼性 ● 温度 エンジンECUは100℃を超える ソーラーパネルのために日向に設置すると温度が上がる 温度が上がると膨張し、下がると縮小するので繰り返すと破損する 寒冷地では氷点下になる コンデンサや電池は極端な温度に弱い センサーも温度によって特性が変わる ○ ○ ○ ○ ○ ○ ● 振動 ○ ● 車や工作機械は振動しっぱなし EMC ○ ○ ノイズを受けても誤動作しないこと 機器からノイズも出さないこと http://www.jasa.or.jp/TOP/offer/automotive/ 29
開発工程 ハードに問題が見つかっても 基板の修正には 1~2ヶ月 ハード 基板ができるまでは評価 ボードで開発を進める ファーム ハードの不具合や遅れはファー ムで解決を求められる 第3者認証 そこそこ動く状態にして引き渡し、 規格によるが試験期間は数ヶ月 30
デバッグ ● 不具合箇所を特定するのが手間 ○ ○ ○ ● 用途に応じた測定器を使う ○ ○ ○ ○ ● IC、マイコン 回路 電気信号 マルチメータ オシロスコープ ロジック・アナライザ プロトコル・アナライザ 電気試験 ○ ○ ○ ○ 雷サージ 静電気 恒温槽 EMC 31
まとめ ● ● ● ● 組み込みは物理的な制約に振り回される プアな環境で頑張るしか無い場合もある 謎の不具合に悩まされる事もある 自分の関わった製品が世界中で役に立つと嬉しい 32
身近なマイコン ● ● ドリームキャストはSH4 パチンコのマイコンな国家公安委員会の規則がある https://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=3 60M50400000004_20190401_430M60400000010&openerCode=1 33