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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
sksat
September 29, 2019
Programming
790
2
Share
CORE 電装講習第1回
COREでやったイキリクソ電装講習第1回のスライドです
sksat
September 29, 2019
More Decks by sksat
See All by sksat
同時複数機開発・運用のDevOpsサイクル高速化のための取り組み
sksat
0
810
探査機自作ゼミ2025スライド
sksat
3
1.6k
人になにかを教えるときに考えていること(2025-05版 / VRC-LT #18)
sksat
6
2k
人工衛星開発のための C2A フレームワークとその開発体験
sksat
1
530
人工衛星の開発体験向上のために、ソフトウェアからできること
sksat
4
1.1k
3ヶ月でできる! 探査機自作ゼミ教材自作入門
sksat
6
3.7k
セキュリティ・キャンプ全国大会2024 S17 探査機自作ゼミ 事前学習・当日資料
sksat
4
32k
AE Rust 勉強会: github-webhook-rs
sksat
0
310
万国のサーバ管理者よ, 自動化せよ!
sksat
1
8.2k
Other Decks in Programming
See All in Programming
RailsのValidatesをSwift Macrosで再現してみた
hokuron
0
150
Rethinking API Platform Filters
vinceamstoutz
0
5.5k
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
440
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
3
2.7k
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
2.2k
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
190
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.2k
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
250
20260315 AWSなんもわからん🥲
chiilog
2
180
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
110
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
480
飯MCP
yusukebe
0
470
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
Design in an AI World
tapps
0
190
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Between Models and Reality
mayunak
3
250
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
460
Become a Pro
speakerdeck
PRO
31
5.9k
Optimizing for Happiness
mojombo
378
71k
Code Review Best Practice
trishagee
74
20k
Prompt Engineering for Job Search
mfonobong
0
240
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
110
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 とか