SIGLENT TECHNOLOGIES 社の SDS814X HD オシロスコープを買ったので、各種機能、デコード機能を試してみました。
CASIO のラベルライター「ネームランド i-ma」が使いやすかったので紹介
ソフトウェアを開発する際、ファイル分割しさらにサブディレクトリに整理したくなることがあるかと思います。特に C/C++ では a.hpp, a.cpp, b.hpp, b.cpp のように一機能に対して複数ファイルになることが多いので、早い段階で整理したくなります。 しかし Arduino では、普通にサブディレクトリを作成しても全然ビルドしてくれません。そこで Arduino の仕様を探索しましたので対処策をいざ投下 TL;DR プロジェクトのルートディレクトリに src ディレクトリを作成し、その中にサブディレクトリを配置します。こうするとサブディレクトリ下に配置したソースファイルも再帰的にビルド対象に含んでくれます。 project ├── project.ino └── src <-- これだけ! ├── common │ ├── vector2d.hpp │ └── vector2d.cpp ├── hardware │ ├── motor.hpp │ └── motor.cpp └── network ├── mdns.hpp ├── mdns.cpp ├── http_server.hpp └── http_server.cpp ヘッダをインクルードする際は各ファイルからの相対パスでインクルードします。
C++のテンプレート黒魔術を用いて、構造体のメンバ変数を再帰的に列挙する方法を解説します
半加算器を使って全加算器を作る過程を示します
有名どころのソートアルゴリズムの計算量について
ボーアのモデルより電子の軌道半径とエネルギーが離散的な値になることを求める。またモデルを基にリュードベリ定数を求め、水素原子の発光スペクトルを説明できることを示す.
C/C++ で型の相互変換を実装する際に、相互インクルードを防ぐ方法
シリアライザを作った際のメモです。 シリアライザとは、構造体等のオブジェクトをバイト列に変換する機能です。通信関係のライブラリを作る際に必要になったため自作しました。 実装する際には、環境の違いによって変換後のバイト列の順序やサイズが異なる可能性があるためなかなか大変です。オブジェクトをバイト列に変換した際、CPU のエンディアンや ABI、コンパイラの仕様によって、データの配置やパディングの有無が変わることがあります。 実装時に気をつける環境の違いによる影響: エンディアンが異なる点 浮動小数点型のサイズが異なる点 構造体のパディングサイズが異なる点 実装したこと: メンバ変数を列挙する黒魔術(パディングによるサイズの違いの対策) シリアライズ後のサイズをコンパイル時に算出する エンディアン変換 浮動小数点型のサイズが異なる問題の対策 エンディアン オブジェクトをメモリに配置する際のバイト列の並び順のことです。主にビッグエンディアンとリトルエンディアンの 2 種類があります。 ビッグエンディアンは上位バイトから下位バイトに向かって配置されます。インターネッツの世界はこれです。イメージ: mem[offset + 0] = obj[0] mem[offset + 1] = obj[1] mem[offset + 2] = obj[2] リトルエンディアンは下位バイトから上位バイトに向かって配置されます。最初に知った時は驚きました。一般的に普及している CPU はリトルエンディアンです。イメージ:
Lチカを極める