Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CORE 電装講習第1回

11cbdce6fef8ae507d51b96dca4a0ec5?s=47 sksat
September 29, 2019

CORE 電装講習第1回

COREでやったイキリクソ電装講習第1回のスライドです

11cbdce6fef8ae507d51b96dca4a0ec5?s=128

sksat

September 29, 2019
Tweet

More Decks by sksat

Other Decks in Programming

Transcript

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

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

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

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

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

  6. マイコンができること - 計算 ・ 1+2, 2.5-1.2 ・デジタル計算 ( 内部的には全て2進数 )

    ・実数ではない ・整数型は整数しか表現できない ・小数は浮動小数点で表現する ・表現できる範囲が決まっている (16bit 整数は -32768 〜 32767) ・誤差がある
  7. マイコンができること - I/O ・ Input/Output のこと ・ Input ・センサの値の取得,ボタンやフライトピンの入力 ・

    Output ・センサの設定,アクチュエータの駆動
  8. マイコンの使い方 センサ センサ センサ 値よこせ!!! モータ ニクロム線

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

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

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

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

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

  14. コンピュータの構成要素(余談) ・は?マイコンでそんな部品見たことないが ... ・ SoC ってやつ ・ System On Chip

    ・1つのチップに全部載ってる.べんり.
  15. CPU ・コンピュータの頭脳ってやつ ・バカ ・できること ・計算 ・値のコピー ・入出力

  16. CPUの構成 ・制御装置 ・演算装置 ( 計算するやつ ) ・レジスタ ・少しだけ (32bit とか

    ) データを覚えておける ・高速 ・用途ごとに色々ある
  17. メモリ ・クソ遅い ( レジスタと比べると ) ・大容量のデータを保存できる ・揮発性 ( 電源切るとデータも消える )

    ・残したいデータはどうするか ・外部の記憶装置 (EEPROM, SD カード , ...) に保存する ・通信する ( 他のモジュールに送る , 地上局に無線で送る )
  18. メモリの読み書き ・メモリは住宅街みたいなもの ・家にあたるのが記憶素子 ・「何番地の記憶素子さん,ちょっと 1 という値を覚えておいておくんなまし」 ・読む時も番地を指定する ・番地のことを「アドレス」と呼ぶ メモリ アドレス0xffffffff

    アドレス0x00000000
  19. プログラムの実行のしくみ 1. プログラムを外部の記憶装置から読み込んでメモリに書き込む 2. プログラムの現在実行している部分をメモリから読む 3. 読み込んだ命令を実行する 4. 2 に戻る

    ( 無限ループ )( 兵庫県警こんにちは )
  20. プログラムもデータ ・コンピュータにとってはあらゆるものがデータ ・プログラムも例外ではない ・データは全部 0 と 1 ・長いので大体 16 進数で表現する

    ・こういうのをバイナリデータという こんなかんじ ↓
  21. 機械語 ・プログラムは大量の命令の塊 ・これらの命令を機械語と呼ぶ

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

  23. 機械語の種類 ・メモリの読み書き ・レジスタにメモリの値をコピー , メモリにレジスタの値をコピー , … ・実行場所の変更 ・***番地にジャンプ ,

    前の演算結果が等しかったらジャンプ , ... ・算術命令 ・レジスタ A とレジスタ B を足した値をレジスタ A に格納 , … ・入出力命令 ・「オラッ***センサから値を 1byte 読んで A レジスタに入れろ!!!」
  24. 機械語の実行 ・メモリ上に並んでいる機械語を順番に実行していく (OoO 「オッそうだな」 ) ・次に実行する命令のアドレスを保持するプログラム・カウンタがある ・プログラム・カウンタもレジスタの一つ

  25. 機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 1

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

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

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

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

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

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

    内容:メモリ書き込み
  32. アーキテクチャの違い ・ CPU の種類によって機械語のフォーマットが異なる ・ PC 用のプログラムのバイナリファイルを Arduino とかに突っ込んでも動かない ・命令長にも色々ある

    ・固定長: RISC ・命令によって変わる: CISC (キモい) ・まあ RISC でもキモいやつはキモいけど x86 よりは遥かにマシ
  33. “プログラミング”とは? ・ CPU にやらせたいことを考える ・どうにかしてそれを実行する機械語を作る

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

  35. アセンブリとアセンブラ ・アセンブリはただの文字列 ・ CPU はアセンブリなんか読めない ( バカなので ) ・アセンブラというソフトウェアを使う ・一対一対応なので余裕

    アセンブリ (テキストファイル) アセンブラ バイナリファイル (実行ファイル)
  36. コンパイラ ・アセンブリでも書くのめんどい ・アセンブリはあくまで機械語と一対一対応 ・そこで考えられたのがコンパイラ アセンブリ (テキストファイル) ア セ ン ブ

    ラ バイナリファイル (実行ファイル) なんか人間が 読みやすいやつ コン パイ ラ コンパイル アセンブル 広義にはコンパイルとアセンブルを合わせてコンパイルと呼ぶ
  37. プログラミング言語 ・プログラムを記述するための言語 ・アセンブリよりも抽象度が高い ・「 1+2*3 」とか書ける ・コンパイル型言語の場合,コンパイルして機械語を生成する

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

    Zen
  39. C言語 ・ OS を書くために作られためっちゃ歴史が長い言語 ・メモリを直接扱える ( ポインタ ) ・全部自分でやらなきゃいけない ・自分の足も容赦なく撃ち抜ける

    ・アセンブリがある程度分かってるとコンパイラの気持ちになれる
  40. C++ ・ C 言語を魔改造し根源に至ろうとしている言語 ・もちろん自分の足を撃てる ・マルチパラダイム ・色々な言語の良いところ取りしようとしてまだまだ爆進中 ・ TMP できる!やったぜ

    ( 黒魔術 ) ・ C++03, C++11, C++14, C++17( 最新リリース ), C++20 とかのバージョンがある ・人権があるのは C++11 から ・ C++17 は正義
  41. Java ・生の機械語ではなく JVM をターゲットにした実行コードを生成する ・ JVM は Java 系言語用の仮想マシン ・

    JVM が動くならどんなマシン ( アーキテクチャ , OS) 上でも動作する ・ JVM 系の言語は色々ある ・ OpenRocket はこれで書かれてる
  42. Rust ・最近出てきたシステムプログラミング言語 ・ firefox の Mozilla が中心となって開発している ・メモリアクセスとかをコンパイル時にチェックしてくれる ・コンパイルが通れば勝ちみたいなところがある ・結構良いらしいが学習コストも結構高い

  43. Zen ・ Zig から fork したシステムプログラミング言語 ・僕がインターンで行ってた connectFree で開発中 ・

    C との併用が可能 ・ちゃんとコンパイラが怒ってくれる ・結構便利だった. OS とか低レイヤなもの書くならかなり良い ・ワンチャン cf と共同でなんかできそう
  44. 手続き型プログラミング言語 ・ C/C++ とか,紹介したやつは全部これ ・書いた順番に実行していく,みたいな認識で OK

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

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