Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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 とか