-
組み込み
【組み込み】スタックとヒープの違いとは?マイコンでメモリ不足が起きる原因を解説
今回は、組み込み開発でよく登場するスタックとヒープの違いについて解説します。 C言語やC++でマイコン向けのプログラムを書いていると、動作不良やリセット、原因不明の暴走が起きることがあります。その原因のひとつがメモリ不足です。 特に、PCアプリ... -
組み込み
【組み込み】メモリマップトI/Oとは?レジスタ操作の基本とビット演算で詰まりやすいポイントを解説
今回は、組み込み開発で頻繁に登場するメモリマップトI/Oについて解説します。 マイコンを使った開発では、GPIOのON/OFF、UARTの設定、タイマ開始など、多くの操作をレジスタ経由で行います。このとき重要になるのが、メモリ空間上の特定アドレスを通じて... -
組み込み
【組み込み】ポーリングと割り込み処理の違いとは?使い分けと設計時の落とし穴を解説
今回は、組み込み開発で基本となるポーリングと割り込み処理の違いについて解説します。 センサ読み取り、UART通信、GPIO入力、タイマ処理など、組み込みシステムでは外部イベントをどう扱うかが重要です。そのときによく登場するのが、ポーリングと割り込... -
組み込み
【組み込み】タイマ割り込みで周期処理を作る方法|sleep待ちとの違いと実装の考え方
今回は、組み込み開発でよく使うタイマ割り込みによる周期処理について解説します。 LED点滅、センサの定期取得、ウォッチドッグ監視、通信タイムアウト管理など、組み込みでは「一定間隔で処理したい」場面が多くあります。 このとき、単純に sleep や待... -
組み込み
【組み込み】リングバッファとは?UART受信でよく使う理由と実装時のハマりどころ
今回は、組み込み開発でよく使われるリングバッファについて解説します。 UART受信では、1文字ずつ非同期にデータが届きます。 そのため、受信したデータをいったん貯めておき、メイン処理側で順番に取り出せる仕組みが必要です。そこでよく使われるのがリ... -
組み込み
【C言語】組み込みで構造体を使うときの注意点|アラインメント・パディング・通信データとの対応
今回は、組み込み開発で構造体を使うときに気をつけたいポイントを紹介します。 構造体は、設定値やセンサデータ、通信フレームなどをまとめて扱えるため便利です。 一方で、アラインメントやパディングを意識せずに使うと、想定と異なるサイズになったり... -
組み込み
【組み込み】ウォッチドッグタイマの正しい使い方:フリーズ検知だけで終わらせない設計ポイント
組み込み開発では、ソフトウェアが完全に停止してしまう「フリーズ」への対策が欠かせません。 その代表的な仕組みがウォッチドッグタイマです。 ウォッチドッグタイマは、一定時間ごとにソフトウェアが正常動作していることを示せなければ、システムをリ... -
組み込み
【組み込み】UARTデバッグ入門 printfだけで終わらせないログ設計と詰まりどころ
組み込み開発で不具合を追うとき、最初に頼りになるのがUART出力です。 とりあえずprintfを仕込んで様子を見る、という流れは多くの現場で行われています。 ただ、UARTデバッグは文字を出せば終わりではありません。 出力の仕方が雑だと、肝心な情報が欠け... -
組み込み
【組み込み】volatile はいつ必要?レジスタ・割り込み・ポーリング処理での使いどころを整理
組み込みC言語を学び始めると、volatile 修飾子を見かける場面が増えてきます。 マイコンのサンプルコードや周辺ドライバで頻繁に登場する一方で、「とりあえず付けるもの」と理解したまま使ってしまう人も少なくありません。 しかし、volatile は付ける場... -
組み込み
【組み込み】UART・I2C・SPIをまとめて理解する:組み込み通信の基本を実機で学ぶ入門記事
組み込み開発に触れ始めると、かなり早い段階で UART・I2C・SPI という3つの通信方式に出会います。 マイコンとセンサ、表示器、PC、各種モジュールをつなぐうえで基本となる技術ですが、最初は「名前は聞くけれど、違いが整理しにくい」と感じやすい部分...