$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CORE 電装講習第1回
Search
sksat
September 29, 2019
Programming
2
770
CORE 電装講習第1回
COREでやったイキリクソ電装講習第1回のスライドです
sksat
September 29, 2019
Tweet
Share
More Decks by sksat
See All by sksat
同時複数機開発・運用のDevOpsサイクル高速化のための取り組み
sksat
0
260
探査機自作ゼミ2025スライド
sksat
3
980
人になにかを教えるときに考えていること(2025-05版 / VRC-LT #18)
sksat
5
1.4k
人工衛星開発のための C2A フレームワークとその開発体験
sksat
1
480
人工衛星の開発体験向上のために、ソフトウェアからできること
sksat
4
840
3ヶ月でできる! 探査機自作ゼミ教材自作入門
sksat
6
3.4k
セキュリティ・キャンプ全国大会2024 S17 探査機自作ゼミ 事前学習・当日資料
sksat
4
29k
AE Rust 勉強会: github-webhook-rs
sksat
0
290
万国のサーバ管理者よ, 自動化せよ!
sksat
1
8.1k
Other Decks in Programming
See All in Programming
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
8
3.4k
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
420
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
410
Implementation Patterns
denyspoltorak
0
120
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
200
TestingOsaka6_Ozono
o3
0
180
AIコーディングエージェント(Manus)
kondai24
0
220
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
180
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
280
Patterns of Patterns
denyspoltorak
0
360
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
0
190
GISエンジニアから見たLINKSデータ
nokonoko1203
0
180
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
50k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
65
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Odyssey Design
rkendrick25
PRO
0
440
Navigating Team Friction
lara
191
16k
Building AI with AI
inesmontani
PRO
1
580
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
170
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.2k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
70
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
Designing for Performance
lara
610
69k
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 とか