Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CORE 電装講習第1回
Search
sksat
September 29, 2019
Programming
2
710
CORE 電装講習第1回
COREでやったイキリクソ電装講習第1回のスライドです
sksat
September 29, 2019
Tweet
Share
More Decks by sksat
See All by sksat
人工衛星開発のための C2A フレームワークとその開発体験
sksat
1
200
人工衛星の開発体験向上のために、ソフトウェアからできること
sksat
4
590
3ヶ月でできる! 探査機自作ゼミ教材自作入門
sksat
6
180
セキュリティ・キャンプ全国大会2024 S17 探査機自作ゼミ 事前学習・当日資料
sksat
3
930
AE Rust 勉強会: github-webhook-rs
sksat
0
210
万国のサーバ管理者よ, 自動化せよ!
sksat
1
7k
teleka.suを支える技術
sksat
1
15k
ふつうのLinuxプログラミング-プロセスとハードウェア
sksat
26
7.8k
小型ハイブリッド用フライトシミュレータの開発
sksat
0
1k
Other Decks in Programming
See All in Programming
命名をリントする
chiroruxx
1
440
Haze - Real time background blurring
chrisbanes
1
520
ドメインイベント増えすぎ問題
h0r15h0
2
410
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
660
create_tableをしただけなのに〜囚われのuuid編〜
daisukeshinoku
0
280
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
300
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
920
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
280
テストケースの名前はどうつけるべきか?
orgachem
PRO
0
150
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
510
Featured
See All Featured
Music & Morning Musume
bryan
46
6.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Building Better People: How to give real-time feedback that sticks.
wjessup
366
19k
Embracing the Ebb and Flow
colly
84
4.5k
GraphQLとの向き合い方2022年版
quramy
44
13k
The World Runs on Bad Software
bkeepers
PRO
66
11k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.4k
Visualization
eitanlees
146
15k
Adopting Sorbet at Scale
ufuk
73
9.1k
Transcript
CORE 電装講習 コンピュータのしくみ sksat
電装をちゃんと作るために考えるべきこと ・マイコンがどう動いているか? ・何で実装するか? ・どのように開発するか? ←今回はココ
マイコン ・マインド・コントロール ・マイクロ・コントローラ ・まあ組み込み向けのコンピュータと思って大丈夫
マイコンの例 ・ PIC ・ Arduino ・ mbed ・ Raspberry pi(
マイコ ... マイコン? )
マイコンができること ・計算 ・他の部品に対する I/O
マイコンができること - 計算 ・ 1+2, 2.5-1.2 ・デジタル計算 ( 内部的には全て2進数 )
・実数ではない ・整数型は整数しか表現できない ・小数は浮動小数点で表現する ・表現できる範囲が決まっている (16bit 整数は -32768 〜 32767) ・誤差がある
マイコンができること - I/O ・ Input/Output のこと ・ Input ・センサの値の取得,ボタンやフライトピンの入力 ・
Output ・センサの設定,アクチュエータの駆動
マイコンの使い方 センサ センサ センサ 値よこせ!!! モータ ニクロム線
マイコンの使い方 センサ センサ センサ ヘイお待ち!!! モータ ニクロム線
マイコンの使い方 センサ センサ センサ モータ ニクロム線 ( ほーん,なるほどね )
マイコンの使い方 センサ センサ センサ モータ ニクロム線 オラッ 動かんかい!!!
マイコンとPCの違い ・別にやってることは変わらん ・計算と入出力 ・用途が違うだけ ・いわゆるコンピュータは汎用コンピュータってやつ ・マイコンは組み込み用のもの ・スペック低くて良い ・必要なものだけ載っていればいい ・やることやれりゃいい → 安い
コンピュータの構成要素 ・ CPU ・メモリ ・外部装置
コンピュータの構成要素(余談) ・は?マイコンでそんな部品見たことないが ... ・ SoC ってやつ ・ System On Chip
・1つのチップに全部載ってる.べんり.
CPU ・コンピュータの頭脳ってやつ ・バカ ・できること ・計算 ・値のコピー ・入出力
CPUの構成 ・制御装置 ・演算装置 ( 計算するやつ ) ・レジスタ ・少しだけ (32bit とか
) データを覚えておける ・高速 ・用途ごとに色々ある
メモリ ・クソ遅い ( レジスタと比べると ) ・大容量のデータを保存できる ・揮発性 ( 電源切るとデータも消える )
・残したいデータはどうするか ・外部の記憶装置 (EEPROM, SD カード , ...) に保存する ・通信する ( 他のモジュールに送る , 地上局に無線で送る )
メモリの読み書き ・メモリは住宅街みたいなもの ・家にあたるのが記憶素子 ・「何番地の記憶素子さん,ちょっと 1 という値を覚えておいておくんなまし」 ・読む時も番地を指定する ・番地のことを「アドレス」と呼ぶ メモリ アドレス0xffffffff
アドレス0x00000000
プログラムの実行のしくみ 1. プログラムを外部の記憶装置から読み込んでメモリに書き込む 2. プログラムの現在実行している部分をメモリから読む 3. 読み込んだ命令を実行する 4. 2 に戻る
( 無限ループ )( 兵庫県警こんにちは )
プログラムもデータ ・コンピュータにとってはあらゆるものがデータ ・プログラムも例外ではない ・データは全部 0 と 1 ・長いので大体 16 進数で表現する
・こういうのをバイナリデータという こんなかんじ ↓
機械語 ・プログラムは大量の命令の塊 ・これらの命令を機械語と呼ぶ
機械語 赤枠で囲ったのが1つの命令
機械語の種類 ・メモリの読み書き ・レジスタにメモリの値をコピー , メモリにレジスタの値をコピー , … ・実行場所の変更 ・***番地にジャンプ ,
前の演算結果が等しかったらジャンプ , ... ・算術命令 ・レジスタ A とレジスタ B を足した値をレジスタ A に格納 , … ・入出力命令 ・「オラッ***センサから値を 1byte 読んで A レジスタに入れろ!!!」
機械語の実行 ・メモリ上に並んでいる機械語を順番に実行していく (OoO 「オッそうだな」 ) ・次に実行する命令のアドレスを保持するプログラム・カウンタがある ・プログラム・カウンタもレジスタの一つ
機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 1
内容:センサ値読み込み
機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 2
内容:読んだ値を 0 と比較
機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 3
内容:前回の演算が等しくなければ戻る
機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 1
内容:センサ値読み込み
機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 2
内容:読んだ値を 0 と比較
機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 3
内容:前回の演算が等しくなければ戻る
機械語の実行 メモリ 命令1 命令2 命令3 命令4 命令5 プログラム・カウンタ 実行中:命令 4
内容:メモリ書き込み
アーキテクチャの違い ・ CPU の種類によって機械語のフォーマットが異なる ・ PC 用のプログラムのバイナリファイルを Arduino とかに突っ込んでも動かない ・命令長にも色々ある
・固定長: RISC ・命令によって変わる: CISC (キモい) ・まあ RISC でもキモいやつはキモいけど x86 よりは遥かにマシ
“プログラミング”とは? ・ CPU にやらせたいことを考える ・どうにかしてそれを実行する機械語を作る
アセンブリ ・人力でバイナリを書くのは難しい ( まあそれはそれで面白いけど ) ・少しでも可読性を上げたい ・そこでアセンブリ ・機械語と一対一対応 ・アセンブリ言語とも呼ばれる
アセンブリとアセンブラ ・アセンブリはただの文字列 ・ CPU はアセンブリなんか読めない ( バカなので ) ・アセンブラというソフトウェアを使う ・一対一対応なので余裕
アセンブリ (テキストファイル) アセンブラ バイナリファイル (実行ファイル)
コンパイラ ・アセンブリでも書くのめんどい ・アセンブリはあくまで機械語と一対一対応 ・そこで考えられたのがコンパイラ アセンブリ (テキストファイル) ア セ ン ブ
ラ バイナリファイル (実行ファイル) なんか人間が 読みやすいやつ コン パイ ラ コンパイル アセンブル 広義にはコンパイルとアセンブルを合わせてコンパイルと呼ぶ
プログラミング言語 ・プログラムを記述するための言語 ・アセンブリよりも抽象度が高い ・「 1+2*3 」とか書ける ・コンパイル型言語の場合,コンパイルして機械語を生成する
色々なプログラミング言語 ・ C ・ C++ ・ Java ・ Rust ・
Zen
C言語 ・ OS を書くために作られためっちゃ歴史が長い言語 ・メモリを直接扱える ( ポインタ ) ・全部自分でやらなきゃいけない ・自分の足も容赦なく撃ち抜ける
・アセンブリがある程度分かってるとコンパイラの気持ちになれる
C++ ・ C 言語を魔改造し根源に至ろうとしている言語 ・もちろん自分の足を撃てる ・マルチパラダイム ・色々な言語の良いところ取りしようとしてまだまだ爆進中 ・ TMP できる!やったぜ
( 黒魔術 ) ・ C++03, C++11, C++14, C++17( 最新リリース ), C++20 とかのバージョンがある ・人権があるのは C++11 から ・ C++17 は正義
Java ・生の機械語ではなく JVM をターゲットにした実行コードを生成する ・ JVM は Java 系言語用の仮想マシン ・
JVM が動くならどんなマシン ( アーキテクチャ , OS) 上でも動作する ・ JVM 系の言語は色々ある ・ OpenRocket はこれで書かれてる
Rust ・最近出てきたシステムプログラミング言語 ・ firefox の Mozilla が中心となって開発している ・メモリアクセスとかをコンパイル時にチェックしてくれる ・コンパイルが通れば勝ちみたいなところがある ・結構良いらしいが学習コストも結構高い
Zen ・ Zig から fork したシステムプログラミング言語 ・僕がインターンで行ってた connectFree で開発中 ・
C との併用が可能 ・ちゃんとコンパイラが怒ってくれる ・結構便利だった. OS とか低レイヤなもの書くならかなり良い ・ワンチャン cf と共同でなんかできそう
手続き型プログラミング言語 ・ C/C++ とか,紹介したやつは全部これ ・書いた順番に実行していく,みたいな認識で OK
関数型プログラミング言語 ・ LISP とか ・式を組み合わせていってプログラムを記述する ・数学畑の人は馴染みやすいらしい
次回予告(?) ・とりあえず C 言語やります ・次次回: Git とか