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

知ってるようで知らない組み込みソフトウェアの世界