WEEK 1 / 組込みソフトウェア講義
LEDを点滅させるコードをマイコンの仕組みまでたどって理解し、設計・デバッグ時の手札を増やす
困ったときに公式の資料(データシート)から仕様を読み解けるようになる
問題が起きたときの対処の流れが掴める
(デバッグそのものはまた今度)
(今日の宿題で体感してもらう)
0.1 前回までの復習
0.2 今回の位置づけ
0.3 今日の流れ
0.4 Lチカ回路
0.5 出発点:とりあえず動いたコード
このコードを書いたClaudeとの会話:https://claude.ai/share/4c39ff64-aa30-4863-855f-49f0816b049c
#include "pico/stdlib.h"#define LED_PIN 0 // GP0int main() {gpio_init(LED_PIN);gpio_set_dir(LED_PIN, GPIO_OUT);while (true) {gpio_put(LED_PIN, 1); // 点灯sleep_ms(500);gpio_put(LED_PIN, 0); // 消灯sleep_ms(500);}return 0;}
マイコンの動作をプログラム視点で理解する
補講のマイコン像
1.1 コンピュータの五大機能
データは 入力 → 記憶 ⇄ 演算 → 出力 と流れ、制御がすべてを指揮する
1.2 ノイマン型:プログラムをメモリから読み出して実行する
1.3 コンピュータの仕事:演算
int a,b,c; // a,b,cという領域をメモリに確保する a = 1; // メモリのaの領域に数値を書き込む b = 2; // メモリのbの領域に数値を書き込む c = a + b; // メモリからaとbを読み込み、足し算した結果をcに書き込む
1.4 コンピュータの仕事:入出力
1.5 CPU
1.6 この章のまとめ
CPUは読み書きの繰り返しプログラムもデータも番地付きの数値。CPUは「読む→実行→次を読む」だけ(ノイマン型)。
演算も入出力も読み書き演算はメモリへ、入出力はペリフェラルの掲示板=レジスタへ、数値を読み書きすること。
CPUには全部アドレス空間メモリもレジスタもプログラムも一つの番地空間。だから制御(発展)も同じ仕組みで実現できる。
Lチカの深追い:ラズピコの具体例で学ぶ
gpio_put(LED_PIN, 1); // 指定したピンの出力を H にする
2.1 Lチカを題材に深ぼる
#include "pico/stdlib.h"#define LED_PIN 0 // GP0int main() {gpio_init(LED_PIN);gpio_set_dir(LED_PIN, GPIO_OUT);while (true) {gpio_put(LED_PIN, 1); // 点灯sleep_ms(500);gpio_put(LED_PIN, 0); // 消灯sleep_ms(500);}return 0;}
2.2 一次情報と二次情報
2.3 SDKのソースへ潜る
AIに聞いてみる:https://claude.ai/share/d4423767-271f-4df3-9213-740db517235a
参考資料すべて一次資料
2.4 gpio_put の中身:1段目
// gpio_put の実装の骨格(抜粋)static inline void gpio_put(uint gpio, bool value) {uint32_t mask = 1ul << gpio; // 対象ピンのビットだけを立てた値if (value)gpio_set_mask(mask); // 1にする側elsegpio_clr_mask(mask); // 0にする側}
2.5 たどり着いた最下段
// gpio_set_mask の骨格(抜粋)static inline void gpio_set_mask(uint32_t mask) {sio_hw->gpio_set = mask;}
static inline void や ->(アロー演算子)といった文法は、あとでAIに聞いて調べてみてください。
今は、mask という変数を = で sio_hw->gpio_set というものに代入する、ということが分かればOK。
2.6 ここまでの理解と、残る疑問
gpio_put(LED_PIN, 1)gpio_set_mask(mask)2.7 この章のまとめ
最下段は代入1つ
便利な関数は包装
意味はデータシート
2.8 なぜオンボードLEDを使わないのか
データシートで裏を取る
3.1 データシートの種類
3.2 ソースコードから見つけたレジスタを調べる
3.3 ペリフェラル全体を調べる
マイコンの中で、CPU からどういう経路を通ってピンに出力されるのかが分かる。
原理から「手札(解空間)」を広げる
4.1 新しい手札の発見
4.2 新しい手札の評価
まとめ / 今日たどった往復
5.1 宿題:解空間を知り、AIに的確な指示を出す
お題 ― これをそのままAIに投げる
「2台のラズピコを8本のGPIOで繋いで、片方から片方へデータを1byteずつ送受信するコードを pico-sdk で書いて」
5.2 次回予告:Week 2
Week 2:ハードウェア間通信プロトコル