SlideShare a Scribd company logo
1 of 47
コンピュータと組み込み
ソフトウェア
CPUと周辺装置のしくみとC言語について
OSSコンソーシアムAIR部会 宇田川勝一
電子計算機(コンピュータ)
• 電子計算機とはクロック信号のタイミングと論理回路の組み合
わせにより四則演算等を行う機械
• ブール代数という数学理論をもとに論理回路が構成されている
• 昔は真空管で構成
• 大型汎用機の登場(主にCPUとメインメモリという本体構成と
なる)
※外部記憶装置と外部入出力装置(周辺装置)が本体につながる
• その後真空管から半導体に置き換わる
• 半導体の集積度アップとダウンサイジングにより電卓からマイ
クロコンピュータの登場
コンピュータの構成
CPUと周辺装置
マイクロコンピュータ
• PC等のコンピュータにおける半導体チップで構成された中央処理装置(
CPUという)とメインメモリ、周辺装置がつながった機械
※バスという配線によりCPUとメモリ、周辺装置がつながっている
• 周辺装置とはキーボード、マウス、モニター、ハードディスク等
• バスという配線にはアドレスバスとデータバスという種類がある
• CPUはメインメモリ上にある命令データを1命令ずつバス経由で読み込み
、逐次実行する(ノイマン型アーキテクチャーという)
※現代のCPUは逐次実行でなく先読み並列実行等を行っており厳密にはノ
イマン型ではなくなってきた
マイクロコンピュータの構成
CPU
メモリ
周辺装置
ハードディスク
周辺装置
キーボード
周辺装置
ディスプレイ・
ボード
モニタ
アドレスバ
ス
データバス
CPU(中央処理装置)とメインメモリ
• CPUはあらかじめメインメモリに書かれた命令データを1命令
づつ読み込み実行する(起動時に命令データをメインメモリに
ロードしておく必要がある)
• メインメモリには命令データ以外に計算に使用するための数値
データ等もロードされる
• このメインメモリにロードされる命令データと計算対象データ
をバイナリプログラムという
※バイナリプログラムはあらかじめ外部記憶装置に格納されてい
るものがメモリにロードされる(組込システムの場合はメインメ
モリの一部がROMになっており、あらかじめ焼かれている)
バスとメモリ
• CPUはバス経由でメモリや周辺装置とつながっている
• ビット、バイト、ワード等のメモリ上のデータ単位
ビットとは0か1を保持する単位、ビットが8個でバイト、16個でワー
ド、32個でダブルワード、64個でクワドワードという
• CPUの語長とバス本数
CPUが一度に処理できるビット数があり、32なら32ビットCPU、64
なら64ビットCPUという
またバス幅もそれに準じたビット数になる(厳密には語長とバス本数が同
じビット数でないCPUは多い)
例)語長16ビットでバス20ビット、語長32ビットでバス24ビット
等
アドレスバスとデータバス
• アドレスバスとはメモリアクセスの際にメモリの位置設定に使
用される(アドレス位置はバイト単位で決まる)
• データバスとはアドレスバスで指定されたメモリ内のデータを
CPUに読み込んだり、またはCPUで処理したデータをメモリに
書き込む際に使用される
※物理的に別々の配線があるのでなく併用される、ただしデータ
バスよりアドレスバスが多いCPUの場合はアドレスバスとして
しか使わない配線もある
コンピュータの構成
CPUレジスタ
• レジスタとはCPU内で計算対象データを保持する場所で複数個持つ
• CPU語長幅(32ビットとか64ビット)でそれぞれ用途別になっている
• データレジスタ
計算対象や演算結果のデータを保持する
• アドレスレジスタ
ポインタレジスタとも言い、メモリの特定位置(アドレス)を保持する
• プログラムカウンタ(アドレスレジスタの一種)
次に実行する命令があるメモリ位置を保持する(実行後に加算される)
• スタックポインタ(アドレスレジスタの一種)
スタック命令(後述)で使用されるがスタック命令を持たないCPUもある
• フラグレジスタ(CPUの状態をビット単位で保持する)
CPUと周辺装置
メモリ整列制限(アラインメント)
• ワード(2バイト)幅以上の単位でメモリをアクセスする場合、そ
のメモリ位置が奇数番地から始まってはいけない制限をもつCPUも
あり、アラインメントという
• ダブルワードは4の倍数番地、メモリ管理上4kバイトの倍数番地
の等の境界制限をもつ場合もある
• 命令実行中にその制限が発生した場合はエラーとなり例外処理とい
う機構によりエラー対応が必要になる(エラーにならないCPUもあ
るが奇数番地へのワード以上のアクセス速度は遅くなる)
※例外発生による対応は他にも0除算等がある
• バイトアクセスでは上記制限はない
• 語長が16ビット以上のCPUではワード単位以上でのメモリアクセ
スには気をつける必要がある
リトルエンディアンとビッグエンディア
ン
• ワード以上のレジスタ内のデータをメモリに書き込む際にバイト並
びの規則がCPUにより主に二種類ある。
• 1234ABCDという4バイトの16進値に対して
1234ABCDとメモリに書かれるのがビッグエンディアン
CDAB3412と逆転してメモリに書かれるのがリトルエンディア
ン
• 異なるCPU間でネットワーク通信を行う場合にこのバイト順の逆転
を考慮して処理する必要があります。
• INTELはリトルエンディアン、それ以外はビッグエンディアン
※DECという会社のCPUもリトルエンディアンだった
※ARMはどちらにも切替可能
エンディアン
12
34
AB
CD
:
CD
AB
34
12
:
0番地方向(小さい番地方向)
大きい番地方向
ビッグ・エンディア
ン
(古いPowerMacなど)
リトル・エンディ
アン
(Intel X86はこちら)
0x1234ABCDの4バイトを、メモリ上にストアしたときの、
配置
命令セット
• CPUが実行可能な命令データの集まり
• 通常はメモリ上から二進値でCPUに読み込まれる
• 二進値をニーモニックという英字記号名で扱う
★命令の種類
• データ転送命令(メモリとCPUレジスタ間、メモリ間)
• 加減算等の算術演算、比較、ビット、論理演算等の命令(乗除算命令をも
ないCPUもある)
• 分岐命令(計算結果による条件分岐と無条件分岐がある)
• 割り込み・例外処理命令(主に割込発生時に使用する)
• スタック・サブルーチン呼び出し命令(古いアーキテクチャーではもたな
いCPUもあるがアドレスレジスタと分岐命令を駆使して実現可能)
• 入出力命令(周辺装置間とのデータ入出力命令でもたないCPUもある)
データ転送命令の例(仮想のCPUで説明)
• データレジスタをr、転送命令ニーモニックをmovとします
mov #0,r
mov r,100
→レジスタrに保持したデータ0を100番地のメモリ上に転送
• アドレスレジスタをaとします
mov #200,a
mov r,(a)
→200番地をaレジスタに転送、rの内容をaで保持したアドレス位置
のメモリに転送
• 命令内で数値や番地の指定の仕方をアドレッシングモードといい、CPUに
より異なります。(直接指定、レジスタやメモリ内データによる間接指定
がある)
算術演算命令の例
• 加算のニーモニックをadd、減算のニーモニックをsub、デー
タレジスタをr0,r1とします
add r0,r1
→r0とr1の内容を加算し、r1に結果を保持(符号付き)
sub r0,#10
→r0の内容から10を引いてr0に結果を保持(符号付き)
• 符号なし演算や小数演算(浮動小数点演算)は別の命令になります
※インクリメント・デクリメントというレジスタにある値を1だけ加
算もしくは減算する命令もある(C言語の演算子にもある)
その他演算命令
• 比較命令、論理演算、ビットシフト命令がある
• 比較命令は単なる引き算で主に条件分岐命令と組み合わせて使用さ
れる。
• 論理演算命令はAND、OR、XOR、NOTで演算するレジスタ内の各
ビットに対して
1 AND 1=1とし、片方の演算数に0がひとつでもあれば0
0 OR 0=0とし、片方の演算数に1がひとつでもあれば1
1 XOR 1または0 XOR 0=0とし、演算数が異なれば1
NOTは0または1を反転させます。
• シフト命令はレジスタ内の各ビット状態を左右にずらします。
フラグレジスタについて
• フラグレジスタには演算命令実行結果によりZ,S,C,P,Oといった
フラグビットが立つ(1になる)
• Z:計算結果が0
• S:計算結果が負
• C:符号なし計算の結果が桁上りを出した(キャリー)
• P:計算結果のパリティが偶数のとき1になる
• O:符号付き計算の結果がオーバーフローした
 符号ビットへキャリーが出るなど
• 次に説明する分岐命令でこのレジスタ状態が使用される
分岐命令の例
• 無条件分岐(ニーモニックはjmp)
jmp #1000
→1000番地にある命令データから実行継続
jmp r1
→r0内の番地にある命令データから実行継続
• 条件分岐(ニーモニックはjnz、jz等)
jz r1
→r0の計算結果でZフラグがたっていたら(結果が0なら)r0の
番地に分岐、立ってなければ次の命令から実行継続
このようにフラグレジスタの状態により分岐する。
※この命令はプログラムカウンタの内容も置き換えます。
割込・例外処理命令
• 割込とは周辺装置からの割り込み信号を検知、またはソフトウェアで故意に割り
込みを実行する場合に使用する
• ハードウェア割込、NMI、例外、ソフトウェア割込と4種類ある
• 割り込みは番号付けされていて複数扱える
• メモリ先頭側特定領域に割り込み時に分岐するアドレス群を番号ごとに設定して
おく(割り込みベクターテーブルという)
• 割り込み発生時には発生した割り込み番号によりベクターテーブルを参照しその
アドレスに分岐する、復帰する際も専用の命令で元のアドレスに復帰する(番号
に対応した割込後の処理は割込ハンドラーといい、予め作成してロードしておく
)
• NMIとは割込の発生禁止ができないハードウェア割込
• 例外はCPU自体が発生させる割り込みであり、禁止はできない(主に動作エラー
時)
• ソフトウェア割込とはOSに対してシステムコールを行うような場合に用いる
※禁止可能な割込を禁止するための専用の命令がある
サブルーチン命令
• 分岐命令の一種
• スタック操作が同時に行われ、スタックフレームというメモリ領域を使用し、高級プログラミング
言語でのローカル変数管理が可能
• サブルーチンに分岐して処理完了後、呼び出し元の命令アドレスに復帰するための機構
• スタックポインタというレジスタが専用的に使用されるがこれはアドレスレジスタの一種である。
スタックフレーム管理のためにフレームポインタというもうひとつのアドレスレジスタも併用する
• サブルーチンを呼ぶ命令ではリターンアドレスをスタックに積んでからサブルーチンアドレスに分
岐する(引数がある場合は呼び出し前に引数データをスタックに積む)
• サブルーチンの最初では呼び出し元のフレームポインタをスタックに積み(保存)、現在のスタッ
クポインタを自身のフレームポインタとする(必要に応じてローカル変数分スタックフレームを使
用する)
• サブルーチンの最後ではスタック位置を調整(ローカル変数領域を始末し、呼び出し元のフレーム
ポインタを復帰する)してからリターン命令により呼び出し元がスタックに積んだリターンアドレ
ス(戻り位置)に分岐する
• ソフトウェア割り込み命令や例外も(特殊な)サブルーチン命令である
※古いアーキテクチャーでは命令として実装してないものもある(IBMの大型汎用機等)
入出力命令
• 周辺装置との間でデータを読んだり書いたりする命令
• 入出力ポートへのデータ転送命令またはメモリアドレスにマッ
ピングされた装置側がもつレジスタに通常のデータ転送命令を
使用する
• 入出力専用命令はポートマップドI/O、通常のデータ転送命令
で扱う場合はメモリマップドI/Oと呼ばれる
• ポートには番号がありその番号を指定して入出力を行う
• 入出力ポート命令をもたずメモリマップドI/OしかないCPUも
ある
RISCとCISC
• 複雑な命令セットを多数持っているけど1命令の実行クロック
数が多く1命令の実行速度が遅いのがCISC
• 少ない単純な命令セットしか持たないけど1命令の実行クロッ
ク数が少なく1命令の実行速度が早いのがRISC
• 今どきはチップ内の回路が進歩したのでCISCでも全ての命令が
早いのであまり区別されない
• RISC命令セットは高級言語コンパイラが最適な単純命令の組み
合わせのコードを生成することにより複雑な処理を実行するよ
うになっていた。そして高クロックの周波数で動作させていた
。
バイナリプログラムの作成方法
• 命令データはバイナリー(二進値)データとして作成する
• 直接二進値を何らかの方法でメモリに書き込めばよいが、作成
効率のため、バイナリプログラム作成ツールをPC等の別のコン
ピュータ上で用いて作成する
• 別のコンピュータ上でバイナリプログラムを作成することをク
ロス環境開発と言う
• 出来上がったプログラムデータはROMという読み込み専用メモ
リ素子に焼き込み、実行時にはRAMという読み書き可能なメモ
リ素子を用いて計算で変化するデータや変数として使用するス
タックデータ等を読み書きする
プログラム作成ツール
• エディター
プログラムを言語を用いて記述し編集するツール
• 高級言語コンパイラー
単純な英文形式でプログラムを記述した言語をアドレス未解決なバイナリーデータに
変換するツール
• アッセンブラ
ニーモニック形式でCPU命令を記述した言語をアドレス未解決なバイナリーデータに
変換するツール
• リンカー
パート単位で分割記述されたバイナリーデータをアドレス解決済みのひとつの完結したバイナリープ
ログラムとして 連結するツール
• ROMライター
バイナリープログラムを組み込みCPU基盤上のROMに焼き込む装置
• ICE(インサーキットエミュレータ)
作成したプログラムのデバッグをするための装置
C言語による組み込み開発
• C言語は高級言語コンパイラ
• 高級言語だが組み込み向けなプログラムに向いている言語
• 豊富なビット操作演算子があり、ポインターでアドレス操作が
可能
• あらゆるCPU向けに用意されている
• アッセンブラーを併用してリンクしやすい
• 実行速度の最適化にすぐれている
• RISC CPUではC言語コンパイラによる最適化を前提としたCPU
命令セットをもつものがが多い
C言語プログラム例
#include <stdio.h>
int main(void)
{
printf(“hello, worldn”);
}
WindowsOSだとCMD画面にhello, worldと表示される
CPU命令とC言語との対応
• データ転送命令は代入文に相当する
• 算術演算命令はC言語の四則演算、比較演算、ビット演算等の
演算子に相当する
• 比較や条件分岐命令はif文やswitch文、条件ループ文に相当す
る(3項演算子も)
• 無条件分岐はgoto文に相当する
• スタック・サブルーチン操作命令は関数呼び出しに相当する
• 割込命令、入出力命令はC言語には相当する機能はないのでア
センブリ言語で作成された関数呼び出しで実現する
※大体のC言語処理系では関数内でアセンブリ言語も書ける
C言語の関数呼び出しとスタック・サブルーチン命令1
高級言語には関数呼び出し規約があり、引数やローカル変数を扱う場合にそれ
に準じて関数を作成する
サブルーチン呼び出し命令はスタックポインタを先に減算してから復帰アドレ
スをスタックに積み、呼び出し側に分岐する
そのスタック状態で呼び出し側がリターン命令を実行すると呼び出し元に正し
く復帰できる(リターン命令後はスタックポインタが加算される)
関数は呼び出される度に入り口のスタック位置を基準とし、その位置は関数内
で維持される(関数呼び出しの最初に呼び出し元のフレームポインタを保存し
てから新たに自身用のフレームポインタを設定する->エントリー処理)
入り口で設定したフレームポインタが指し示す位置のひとつ前には呼び出し元
のリターンアドレスが格納されている
それより前には引数の値がスタックに積まれている(フレームポインタ基準で
相対アクセス可能な状態)
関数内で使用するローカル変数はフレームポインタ基準で新たにスタックに確
保される
C言語の関数呼び出しとスタック・サブルーチン命令2
関数エントリー処理に付随して関数終了時には出口処理を行う
ローカル変数領域の開放と(スタックポインタ加算)と呼び出し元
フレームポインタの復帰を行う
そしてスタックポインタの位置が呼び出し元アドレスが格納されて
いる位置になったところでリータン命令を実行する
お気づきだと思いますが、この一連のエントリー処理と出口処理が
正しく同期して対応していないとプログラムは暴走します。
スタックフレーム概要
メモリアドレス低位側
・・・・
ローカル変数2
--------------------------
ローカル変数1 <-呼び出された関数が使用するローカル変数エリアの開始位置
--------------------------
呼び出し元fp <-関数入り口で旧fpを保存したこの位置が新たなfp
--------------------------
呼び出し元復帰アドレス <-呼び出し元がサブルーチン呼び出し命令実行直後の位置
--------------------------
引数1(呼び出し元が積む) <-呼び出し元が呼ぶ関数に渡す最後の引数の位置
--------------------------
引数2(呼び出し元が積む)
・・・・
メモリアドレス高位側 ※fpはフレームポインタ
呼び出し元関数の入り口と出口処理
_main:
push fp ;呼び出し元のfp内アドレス値をスタックに保存
mov sp,fp ;関数入り口時点のスタック位置をこの関数のfpとする
.......... ;任意の処理
mov #1,r0 ;関数に渡す引数の値1を用意
push r0 ;関数に渡す引数をスタックに積む
jsr _sub_routine ;関数呼び出し
add #4,sp ;引数に使用したスタック領域を解放
...... ;任意の処理
mov fp,sp ;ローカル変数領域解放(スタック位置は自身のfp)
pop fp ;呼び出し元のfpを復帰(スタック位置は戻りアドレス)
ret ;現在のスタック位置にある戻りアドレスに分岐してスタック解放
呼び出された関数の入り口と出口処理
_sub_routine:
push fp ;呼び出し元のfp内アドレス値をスタックに保存
mov sp,fp ;関数入り口時点のスタック位置をこの関数のfpとする
sub #4,sp ;ローカル変数として1クワドワード確保
mov 8(fp),r1 ;渡された引数の値をr1に取得
mov r1,-4(fp) ;r1の値をローカル変数に転送
.......... ;任意の処理
mov fp,sp ;ローカル変数領域開放(スタック位置は自身のfp)
pop fp ;呼び出し元のfpを復帰(スタック位置は戻りアドレス)
ret ;現在のスタック位置にある戻りアドレスに分岐してスタック解放
スタック・サブルーチン命令まとめ
・高級言語ではその言語の関数呼び出し規約に従ってコードが生成される
・関数の入り口と出口に決まりきった処理(おまじない)がある
・関数の呼び出し、戻り、引数やローカル変数を機械的に扱える
・アッセンブリ言語で関数を作成してリンクする際はこの呼び出し規約に従う必要がある
・スタックフレームを理解しているとデバッグするときに役立つ
※関数の入り口処理と出口処理は現代では専用命令をもっており、フレームの調整やフレームポ
インタの退避・復帰は1命令でCPUが処理してくれる
組み込み開発でのC言語プログラム
• 組み込み用OSを使う場合とそうでない場合で少々異なる
• 組み込み用OSを使う場合は外部記憶装置や通信チップ等周辺装置で
サポート済みのものを標準で使用可能である
• 新規に実装したい組み込みデバイスを扱う場合は使用する組み込み
用OSの流儀に従いデバイスドライバを書く事になる
• 組み込み用OSを使用しない場合はROM焼ツール等を用いて電源投
入時初期化処理含めて1から自分で作成する
• 組み込み用OSよりは低機能のモニターシステムプログラムという組
込開発支援ツールを併用する場合も多い
• スタートアップルーチンでRAMの初期化を行った後にmain関数が呼
ばれる構造になっている
全体フロー
• 電源投入後最初にスタートアップルーチンが動作する
• スタートアップルーチンではmain処理の動作に必要な初期化が
行われてから(主にCPU初期設定とRAMの初期化)main処理
が呼ばれる
• main処理に制御が移ったら最初に使用する周辺装置の初期化を
行う
• 周辺装置の初期化終了後アイドルループ(無限ループ)に入る
• ループ内で周辺装置のI/O監視を行う
主にポーリング監視と割込待ち
• 電源断で処理を終了する(またはリセットで再開)
ポーリングによるI/O監視
• アイドルループ内で周辺装置の状態を読み取り、状態ごとに処
理を決定しサブルーチンを呼ぶ
• 例としてはパネルスイッチの状態監視
パネルスイッチがON ⇒ LED点灯
パネルスイッチがOFF ⇒ LED消灯
• 状態監視にはパネルスイッチの接続されたポート番号でI/Oを
読み込むかメモリにマップされたパネルスイッチのI/Oレジス
タに直接アクセスして読み込む
• LED制御も同様にLEDの接続されたI/OスイッチにON/OFFデー
タを書き込む
割り込みを使用した周辺装置の制御
• 割り込み処理は周辺装置だけでなくその装置と割り込み線でつながった割
り込みコントローラにより制御する
• CPUの命令により割り込み全体の禁止と許可の制御が可能(NMIを除く)
• 入出力命令等で割り込みコントローラに制御コマンドを送れる
• 割り込みコントローラには複数のデバイスがつながっているため割り込み
番号で割り込みデバイスを識別する
※割込ベクターテーブルには対応した割込番号の位置に割込ハンドラーの
アドレスを格納しておき、割込発生時にそのハンドラーが呼び出される
• デバイス単位での割り込みの禁止、許可も可能(制御コマンドで)
• 割込には別の割込が同時発生した場合に優先順位がある
• 制御処理本体は割込ハンドラー内に記述する
割り込み処理の流れ
割り込みハンドラー
• 割り込み処理はアイドルループ中や他の割込処理中に割り込み信号があがった瞬
間、割り込み番号に対応するアドレスにCPUの実行が分岐する
• その分岐先がサブルーチンになっており、そのサブルーチンを割り込みハンドラ
ーと呼ぶ
• 割り込み処理はそのハンドラー内に記述する
• 通常の処理内容は全レジスタ内容をスタックに保存後自身の割り込みを禁止し(
禁止しない場合もある)、短時間で処理を終えてから全レジスタをスタックから
元に戻し再度割り込み許可してから復帰する
• ハンドラー内の処理終、専用の命令(割込リターン命令)で割込発生時の場所に
復帰する(CPU例外では発生時の次の命令、それ以外は発生時の命令に復帰)
• 組込でよく使う割込としてはシリアル通信割込、タイマー割込あたり
※自身の割込を許可したまま処理する場合は再入可能な構造にしなければならない
(処理の途中で自身が呼び出されることがあるから)
ROMとRAMのメモリマップ
• メモリにはROM領域とRAM領域がある
• ROM領域には作成したプログラムの1.命令データと変更不可デー
タがマッピングされ、専用のライターで書き込む。
• RAM領域には2.初期化データと未初期化データ、3.スタック領
域がマッピングされる
※初期化データはROM領域からRAM領域に再度展開される
• C言語で作成されたプログラムのメモリマップはこの3領域からな
り、それぞれテキストセグメント、データセグメント、スタックセ
グメントと呼ばれる。
※割込ベクタテーブルは通常はROMの先頭領域にマップされて予め
焼かれる
C言語の変数とメモリマッピング
• RAM領域の初期化変数または未初期変数領域にはグローバル変数や静的
変数(staticで修飾された変数)がマッピングされる
※未初期化変数は実際には0で初期化される
• ROM領域の変更不可領域には定数や文字列、constで修飾された変数がマ
ッピングされる
• 高位アドレスのRAM領域はスタックエリアとなり、サブルーチンの呼び
出し元アドレスや関数引数の値、関数内ローカル変数の値を一時的に保持
するエリアとなる
※関数のローカル変数領域をスタックフレームという
※メモリマップドI/Oの場合、周辺装置の制御レジスタはこの3箇所とは別
の固定アドレスに予めメモリにマッピングされる
volatileについて(コード最適化の抑制)
• volatileで修飾された変数は必ず値の変更がメモリなどに反映される
• 周辺機器のI/Oレジスタがマップされたアドレスに使用する
• 通常、変数の値は一度CPUレジスタにロードするとレジスタ上に保持され
たままになり、メモリを更新したり、メモリからの値の再ロードがされな
い(コンパイラの最適化処理によりそうなる)
• しかしI/Oレジスタの内容は不規則かつ自主的に変化するので、CPUレジ
スタにある古い情報を元に処理を続行すると正しい結果にならない場合が
起こる
• また、I/Oレジスタを書き換える場合にも、volatileで修飾しておかなければなら
ない
• それを避けるには、I/Oレジスタ変数の内容をvolatileで修飾することで、アクセ
スする度にCPUレジスタに値を再ロードするようにコード生成が行われる(最適
化の抑止効果がある)
デバッグ
• 組込プログラムのデバッグにはICEというソースコードデバッガーが
使われる
• 変数内容の表示、スタックトレース、ブレークポイント、ウォッチ
ポイント等が使用できる
• 残念ながらICEが使用できない組込基板もあり、その場合はシリアル
通信等を使用して変数内容を試験プログラム内で監視しながらデバ
ッグする
• スタックやデータ領域への不正書き込みがないかをチェックするの
がコツ(大体が未初期化変数、バッファオバーフロー等のポインタ
の不正使用が原因)
• 経験上、バグの少ないコードを書くことばかり意識をしてテストを
おろそかにする人よりも、デバッグの上手な技術者のほうがかなり
優秀だと思います。
※机上のみでまったくバグのないプログラムを書く人はまずいません
市販の組み込みCPU基板について
• 秋葉原等の老舗店舗では安価な初心者向け組み込み学習用CPU
基盤を販売しています
• CPUの種類はいくつかある( RISC V 等)
• はんだ付け程度の作業でLED点灯実験等、簡単な組み込みソフ
トを作成&実行可能
• 興味がある方はそういったCPU基盤を用いて実際に組み込みソ
フトの開発に触れてみることをお勧めします
※AIR部会では定期的にはんだ付け含めて実機を用いたセミナー
を行っておりますので、そちらもお気軽にご参加下さい。

More Related Content

Similar to Embeded2020318 (6)

170622 02
170622 02170622 02
170622 02
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
 
Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介Webアプリケーションによる電源管理システムのご紹介
Webアプリケーションによる電源管理システムのご紹介
 
kagami_comput2015_5
kagami_comput2015_5kagami_comput2015_5
kagami_comput2015_5
 
2016-11-30 BitVisor Summit 5 「BitVisorの現状と今後」(公開版)
2016-11-30 BitVisor Summit 5 「BitVisorの現状と今後」(公開版)2016-11-30 BitVisor Summit 5 「BitVisorの現状と今後」(公開版)
2016-11-30 BitVisor Summit 5 「BitVisorの現状と今後」(公開版)
 
Soft layer network概要_jslug向け
Soft layer network概要_jslug向けSoft layer network概要_jslug向け
Soft layer network概要_jslug向け
 

Recently uploaded

Recently uploaded (12)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Embeded2020318