Slide 1

Slide 1 text

CORE 電装講習 コンピュータのしくみ sksat

Slide 2

Slide 2 text

電装をちゃんと作るために考えるべきこと ・マイコンがどう動いているか? ・何で実装するか? ・どのように開発するか? ←今回はココ

Slide 3

Slide 3 text

マイコン ・マインド・コントロール ・マイクロ・コントローラ ・まあ組み込み向けのコンピュータと思って大丈夫

Slide 4

Slide 4 text

マイコンの例 ・ PIC ・ Arduino ・ mbed ・ Raspberry pi( マイコ ... マイコン? )

Slide 5

Slide 5 text

マイコンができること ・計算 ・他の部品に対する I/O

Slide 6

Slide 6 text

マイコンができること - 計算 ・ 1+2, 2.5-1.2 ・デジタル計算 ( 内部的には全て2進数 ) ・実数ではない ・整数型は整数しか表現できない ・小数は浮動小数点で表現する ・表現できる範囲が決まっている (16bit 整数は -32768 〜 32767) ・誤差がある

Slide 7

Slide 7 text

マイコンができること - I/O ・ Input/Output のこと ・ Input ・センサの値の取得,ボタンやフライトピンの入力 ・ Output ・センサの設定,アクチュエータの駆動

Slide 8

Slide 8 text

マイコンの使い方 センサ センサ センサ 値よこせ!!! モータ ニクロム線

Slide 9

Slide 9 text

マイコンの使い方 センサ センサ センサ ヘイお待ち!!! モータ ニクロム線

Slide 10

Slide 10 text

マイコンの使い方 センサ センサ センサ モータ ニクロム線 ( ほーん,なるほどね )

Slide 11

Slide 11 text

マイコンの使い方 センサ センサ センサ モータ ニクロム線 オラッ 動かんかい!!!

Slide 12

Slide 12 text

マイコンとPCの違い ・別にやってることは変わらん ・計算と入出力 ・用途が違うだけ ・いわゆるコンピュータは汎用コンピュータってやつ ・マイコンは組み込み用のもの ・スペック低くて良い ・必要なものだけ載っていればいい ・やることやれりゃいい → 安い

Slide 13

Slide 13 text

コンピュータの構成要素 ・ CPU ・メモリ ・外部装置

Slide 14

Slide 14 text

コンピュータの構成要素(余談) ・は?マイコンでそんな部品見たことないが ... ・ SoC ってやつ ・ System On Chip ・1つのチップに全部載ってる.べんり.

Slide 15

Slide 15 text

CPU ・コンピュータの頭脳ってやつ ・バカ ・できること ・計算 ・値のコピー ・入出力

Slide 16

Slide 16 text

CPUの構成 ・制御装置 ・演算装置 ( 計算するやつ ) ・レジスタ ・少しだけ (32bit とか ) データを覚えておける ・高速 ・用途ごとに色々ある

Slide 17

Slide 17 text

メモリ ・クソ遅い ( レジスタと比べると ) ・大容量のデータを保存できる ・揮発性 ( 電源切るとデータも消える ) ・残したいデータはどうするか ・外部の記憶装置 (EEPROM, SD カード , ...) に保存する ・通信する ( 他のモジュールに送る , 地上局に無線で送る )

Slide 18

Slide 18 text

メモリの読み書き ・メモリは住宅街みたいなもの ・家にあたるのが記憶素子 ・「何番地の記憶素子さん,ちょっと 1 という値を覚えておいておくんなまし」 ・読む時も番地を指定する ・番地のことを「アドレス」と呼ぶ メモリ アドレス0xffffffff アドレス0x00000000

Slide 19

Slide 19 text

プログラムの実行のしくみ 1. プログラムを外部の記憶装置から読み込んでメモリに書き込む 2. プログラムの現在実行している部分をメモリから読む 3. 読み込んだ命令を実行する 4. 2 に戻る ( 無限ループ )( 兵庫県警こんにちは )

Slide 20

Slide 20 text

プログラムもデータ ・コンピュータにとってはあらゆるものがデータ ・プログラムも例外ではない ・データは全部 0 と 1 ・長いので大体 16 進数で表現する ・こういうのをバイナリデータという こんなかんじ ↓

Slide 21

Slide 21 text

機械語 ・プログラムは大量の命令の塊 ・これらの命令を機械語と呼ぶ

Slide 22

Slide 22 text

機械語 赤枠で囲ったのが1つの命令

Slide 23

Slide 23 text

機械語の種類 ・メモリの読み書き ・レジスタにメモリの値をコピー , メモリにレジスタの値をコピー , … ・実行場所の変更 ・***番地にジャンプ , 前の演算結果が等しかったらジャンプ , ... ・算術命令 ・レジスタ A とレジスタ B を足した値をレジスタ A に格納 , … ・入出力命令 ・「オラッ***センサから値を 1byte 読んで A レジスタに入れろ!!!」

Slide 24

Slide 24 text

機械語の実行 ・メモリ上に並んでいる機械語を順番に実行していく (OoO 「オッそうだな」 ) ・次に実行する命令のアドレスを保持するプログラム・カウンタがある ・プログラム・カウンタもレジスタの一つ

Slide 25

Slide 25 text

機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 1 内容:センサ値読み込み

Slide 26

Slide 26 text

機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 2 内容:読んだ値を 0 と比較

Slide 27

Slide 27 text

機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 3 内容:前回の演算が等しくなければ戻る

Slide 28

Slide 28 text

機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 1 内容:センサ値読み込み

Slide 29

Slide 29 text

機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 2 内容:読んだ値を 0 と比較

Slide 30

Slide 30 text

機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 3 内容:前回の演算が等しくなければ戻る

Slide 31

Slide 31 text

機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 4 内容:メモリ書き込み

Slide 32

Slide 32 text

アーキテクチャの違い ・ CPU の種類によって機械語のフォーマットが異なる ・ PC 用のプログラムのバイナリファイルを Arduino とかに突っ込んでも動かない ・命令長にも色々ある ・固定長: RISC ・命令によって変わる: CISC (キモい) ・まあ RISC でもキモいやつはキモいけど x86 よりは遥かにマシ

Slide 33

Slide 33 text

“プログラミング”とは? ・ CPU にやらせたいことを考える ・どうにかしてそれを実行する機械語を作る

Slide 34

Slide 34 text

アセンブリ ・人力でバイナリを書くのは難しい ( まあそれはそれで面白いけど ) ・少しでも可読性を上げたい ・そこでアセンブリ ・機械語と一対一対応 ・アセンブリ言語とも呼ばれる

Slide 35

Slide 35 text

アセンブリとアセンブラ ・アセンブリはただの文字列 ・ CPU はアセンブリなんか読めない ( バカなので ) ・アセンブラというソフトウェアを使う ・一対一対応なので余裕 アセンブリ (テキストファイル) アセンブラ バイナリファイル (実行ファイル)

Slide 36

Slide 36 text

コンパイラ ・アセンブリでも書くのめんどい ・アセンブリはあくまで機械語と一対一対応 ・そこで考えられたのがコンパイラ アセンブリ (テキストファイル) ア セ ン ブ ラ バイナリファイル (実行ファイル) なんか人間が 読みやすいやつ コン パイ ラ コンパイル アセンブル 広義にはコンパイルとアセンブルを合わせてコンパイルと呼ぶ

Slide 37

Slide 37 text

プログラミング言語 ・プログラムを記述するための言語 ・アセンブリよりも抽象度が高い ・「 1+2*3 」とか書ける ・コンパイル型言語の場合,コンパイルして機械語を生成する

Slide 38

Slide 38 text

色々なプログラミング言語 ・ C ・ C++ ・ Java ・ Rust ・ Zen

Slide 39

Slide 39 text

C言語 ・ OS を書くために作られためっちゃ歴史が長い言語 ・メモリを直接扱える ( ポインタ ) ・全部自分でやらなきゃいけない ・自分の足も容赦なく撃ち抜ける ・アセンブリがある程度分かってるとコンパイラの気持ちになれる

Slide 40

Slide 40 text

C++ ・ C 言語を魔改造し根源に至ろうとしている言語 ・もちろん自分の足を撃てる ・マルチパラダイム ・色々な言語の良いところ取りしようとしてまだまだ爆進中 ・ TMP できる!やったぜ ( 黒魔術 ) ・ C++03, C++11, C++14, C++17( 最新リリース ), C++20 とかのバージョンがある ・人権があるのは C++11 から ・ C++17 は正義

Slide 41

Slide 41 text

Java ・生の機械語ではなく JVM をターゲットにした実行コードを生成する ・ JVM は Java 系言語用の仮想マシン ・ JVM が動くならどんなマシン ( アーキテクチャ , OS) 上でも動作する ・ JVM 系の言語は色々ある ・ OpenRocket はこれで書かれてる

Slide 42

Slide 42 text

Rust ・最近出てきたシステムプログラミング言語 ・ firefox の Mozilla が中心となって開発している ・メモリアクセスとかをコンパイル時にチェックしてくれる ・コンパイルが通れば勝ちみたいなところがある ・結構良いらしいが学習コストも結構高い

Slide 43

Slide 43 text

Zen ・ Zig から fork したシステムプログラミング言語 ・僕がインターンで行ってた connectFree で開発中 ・ C との併用が可能 ・ちゃんとコンパイラが怒ってくれる ・結構便利だった. OS とか低レイヤなもの書くならかなり良い ・ワンチャン cf と共同でなんかできそう

Slide 44

Slide 44 text

手続き型プログラミング言語 ・ C/C++ とか,紹介したやつは全部これ ・書いた順番に実行していく,みたいな認識で OK

Slide 45

Slide 45 text

関数型プログラミング言語 ・ LISP とか ・式を組み合わせていってプログラムを記述する ・数学畑の人は馴染みやすいらしい

Slide 46

Slide 46 text

次回予告(?) ・とりあえず C 言語やります ・次次回: Git とか