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

CORE 電装講習第1回

sksat
September 29, 2019

CORE 電装講習第1回

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

sksat

September 29, 2019
Tweet

More Decks by sksat

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. マイコンの例

    PIC

    Arduino

    mbed

    Raspberry pi(
    マイコ
    ...
    マイコン?
    )

    View Slide

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

    View Slide

  6. マイコンができること - 計算

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

    32767)
    ・誤差がある

    View Slide

  7. マイコンができること - I/O

    Input/Output
    のこと

    Input
    ・センサの値の取得,ボタンやフライトピンの入力

    Output
    ・センサの設定,アクチュエータの駆動

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. コンピュータの構成要素

    CPU
    ・メモリ
    ・外部装置

    View Slide

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

    SoC
    ってやつ

    System On Chip
    ・1つのチップに全部載ってる.べんり.

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. プログラムもデータ
    ・コンピュータにとってはあらゆるものがデータ
    ・プログラムも例外ではない
    ・データは全部
    0

    1
    ・長いので大体
    16
    進数で表現する
    ・こういうのをバイナリデータという
    こんなかんじ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. アーキテクチャの違い

    CPU
    の種類によって機械語のフォーマットが異なる

    PC
    用のプログラムのバイナリファイルを
    Arduino
    とかに突っ込んでも動かない
    ・命令長にも色々ある
    ・固定長:
    RISC
    ・命令によって変わる:
    CISC
    (キモい)
    ・まあ
    RISC
    でもキモいやつはキモいけど
    x86
    よりは遥かにマシ

    View Slide

  33. “プログラミング”とは?

    CPU
    にやらせたいことを考える
    ・どうにかしてそれを実行する機械語を作る

    View Slide

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

    View Slide

  35. アセンブリとアセンブラ
    ・アセンブリはただの文字列

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

    View Slide

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





    バイナリファイル
    (実行ファイル)
    なんか人間が
    読みやすいやつ
    コン
    パイ

    コンパイル アセンブル
    広義にはコンパイルとアセンブルを合わせてコンパイルと呼ぶ

    View Slide

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

    View Slide

  38. 色々なプログラミング言語

    C

    C++

    Java

    Rust

    Zen

    View Slide

  39. C言語

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

    View Slide

  40. C++

    C
    言語を魔改造し根源に至ろうとしている言語
    ・もちろん自分の足を撃てる
    ・マルチパラダイム
    ・色々な言語の良いところ取りしようとしてまだまだ爆進中

    TMP
    できる!やったぜ
    (
    黒魔術
    )

    C++03, C++11, C++14, C++17(
    最新リリース
    ), C++20
    とかのバージョンがある
    ・人権があるのは
    C++11
    から

    C++17
    は正義

    View Slide

  41. Java
    ・生の機械語ではなく
    JVM
    をターゲットにした実行コードを生成する

    JVM

    Java
    系言語用の仮想マシン

    JVM
    が動くならどんなマシン
    (
    アーキテクチャ
    , OS)
    上でも動作する

    JVM
    系の言語は色々ある

    OpenRocket
    はこれで書かれてる

    View Slide

  42. Rust
    ・最近出てきたシステムプログラミング言語

    firefox

    Mozilla
    が中心となって開発している
    ・メモリアクセスとかをコンパイル時にチェックしてくれる
    ・コンパイルが通れば勝ちみたいなところがある
    ・結構良いらしいが学習コストも結構高い

    View Slide

  43. Zen

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

    C
    との併用が可能
    ・ちゃんとコンパイラが怒ってくれる
    ・結構便利だった.
    OS
    とか低レイヤなもの書くならかなり良い
    ・ワンチャン
    cf
    と共同でなんかできそう

    View Slide

  44. 手続き型プログラミング言語

    C/C++
    とか,紹介したやつは全部これ
    ・書いた順番に実行していく,みたいな認識で
    OK

    View Slide

  45. 関数型プログラミング言語

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

    View Slide

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

    View Slide