memo」カテゴリーアーカイブ

備忘録

ローリングロボット その2 ”信号周期”

一般的な赤外線リモコンでは 940nm 付近の波長の赤外線をつかいます。そして、この赤外線を 38kHz の副搬送波, 1/3 のデューティー比で1次変調します。ということで、これだけでは周波数帯域(バンド)を分けて複数の通信路をつくることができません。要は1チャンネルしか作れません。

そこで、この赤外線リモコンの基本的な方式をつかい、どういう方法で2チャンネルの通信経路をつくっているのか調べてみました。

下図はリモコンの送信ボタンを押下したときに受信機側のIrレシーバーの出力をオシロスコープで計測した波形です。ちなみにIrレシーバーの出力は負論理(Active Low)ですが、プローブの接続を反転して正論理にしています。

CH1 信号周期

CH1 信号周期

チャンネル1の送信ボタンを押したときのIrレシーバーの出力です。チャンネル1の信号周期は240ミリ秒でした。

続きを読む

共有と共通

共有 / shared

  • shared library : 共有ライブラリ
  • shared strage : 共有ストレージ

 

共通 / common

  • common line : 電子回路における共通配線。たとえばグランド配線を共通化することで配線の本数を減らすことができる。
  • common ground : 共通点、妥協点
  • common sense : 常識

C/C++のヘッダファイルに記述すべき内容、記述すべきでない内容

[記述すべき] インクルードガード

インクルードガードの記述例

インクルードガードを記述すべき背景

ヘッダファイルの中から、さらに別のヘッダファイルをインクルードすることで、一つのヘッダファイルが2回以上インクルードされるときがある。インクルードガードが記述されていないと同一の定義や宣言が2回以上、1つの翻訳単位(~.cファイル)の中に現れてコンパイルエラーが生じるため。

define名に関する補足

接頭辞にアンダースコアを2回重ねたシンボル名は予約語です。 次のようなdefine定義名はシステム(コンパイラなど)の予約語と重複する可能性があります。予約語と衝突する不適切なdefine名の例: __FOO_H__

 

[記述すべき] 外部結合するグローバル変数の宣言

外部結合の例

 

[記述すべきでない] 内部結合するグローバル変数の宣言や定義

内部結合するグローバル変数の適切な記述位置

内部結合するグローバル変数の不適切な記述位置

初期化を記述することでグローバル変数の宣言ではなく定義になります。複数の定義が存在するとリンクエラーが発生するため窮余の一策(不適切な回避策)としてstatic宣言をしています。結果として名前が重複するstaticグローバル変数が複数の翻訳単位に存在する特異な状況が生じます。

 

[記述すべきでない] モジュール外部に公開しない関数のプロトタイプ宣言

関数のプロトタイプ宣言は省略せずに必ず記述しましょう。プロトタイプ宣言の記述を省略しても、たまたまコンパイルが成功することはありますが、一旦コンパイルが成功しても、その後のコード修正でプロトタイプ宣言のないコードのコンパイルが失敗することがあるため、かならずソースファイルの先頭、もしくはヘッダファイルに関数のプロトタイプ宣言を記述しましょう。

関数プロトタイプ宣言は必ずどこかに記述する。しかし、モジュール外(xxx.cの外部、xxx.oの外部)からアクセスする必要のない static な関数のプロトタイプ宣言をヘッダファイルに記述してはいけません。 *.c ファイルの先頭に記述しましょう。

[vscode] Gitワークツリーの自動検出を無効にする

課題

ソース管理のウィンドウにチェックアウトされた複数のワークツリーが自動検出(自動表示)されて煩雑なばあいがある。

解決方法

git.detectWorktrees 設定を無効 (false) にする。

表示を更新する(ワークツリーを非表示にする)ためには、一旦 Visual Studio Code を終了して再起動する。

References

[git] リモートブランチのチェックアウト

1. フェッチする

  • リモートリポジトリ名リモートブランチ名を限定的に指定する方法がベターである。
    • リモートリポジトリ名を指定しないと全てのブランチを(無駄に)フェッチする。
    • リモートブランチ名を指定しないと全てのブランチを(無駄に)フェッチする。

2. チェックアウトする

2.1. リモートブランチ名と同名でローカルブランチをチェックアウトする

2.1. リモートブランチ名と異なるローカルブランチ名でチェックアウトする

続きを読む