ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

WinMergeでバイナリを比較する

実行環境 項目 説明 OS Windows11 WinMerge version 2.16.30.0 やり方 ファイル->形式を指定して再比較->バイナリ を選択するとhex形式で表示してくれる バイナリ形式で表示する 参考 ftsh.hateblo.jp

WindowsのコンソールアプリケーションでGetMessageを使わずにタイマーを使う

メッセージループを自分で書かずにWindowsのコンソールアプリケーションでタイマーを使う方法が無いか調べたところ、 CreateTimerQueueTimer関数 というものを見つけました. 以下プログラムは、約100msごとにHelloという文字列がコンソールに表示されます. #…

Visual Studioがフォルダを移動してもビルドできる仕組み

Visual Studioで作成したソリューションやプロジェクトはフォルダごと場所を移動してもIDE上で正しくビルドすることが出来ます. ということはパスが自動的に解決されていることになりますが、その仕組みを簡単にまとめました. プロジェクトのマクロが関わっ…

Visual Studioのプロパティの主なマクロ

Visual Studioはマクロ(≒環境変数)を使用してビルドを行います. このマクロのうち重要そうなものをピックアップしました. バージョンはVS2017を対象にしていますが、最近のVSであれば大きく変わることはないはず. 相対パスで書かれたものは $(ProjectDir) …

2024年の目標

2024年今年の目標をば. 情報処理安全確保支援士試験に合格する 基本情報と応用情報は2023年に合格したので、この勢いで高度試験も1つくらい取るつもりです. 本当に取りたいのはエンベデッドシステムスペシャリストなのですが、秋試験しかないので春試験で情…

CHで始まるIC

Jiangsu Qin Heng (WCH) 社のCHから始まる代表的なICをまとめてみた. CH340シリーズ 末尾にアルファベットが付き、パッケージや追加機能が区別される. 次の機能がある. USB-UART変換 USB-パラレルプリンタ変換 回路実装済みボードも多く販売されているが、チ…

DLLがあるのに見つからない

DLLを利用するEXEを実行したところ、プログラムと同じフォルダにDLLがあるにも関わらずDLL周りのエラーが生じることがありました. 原因はEXEが利用するDLLがさらにほかのDLLを参照していたことでした. つまり、EXE --(use)--> DLL1 --(use)--> DLL2 という関…

<algorithm>でポインタを使うときは型に注意

c++の<algorithm>中にはイテレータを引数に渡すことでコンテナの全要素に対して探索をする関数があります. 探索する対象が配列の場合はポインタを引数に渡すことが可能です. 例えばstd::any_of()は次のように使用することができます. #include<iostream> #include<algorithm> #include<vector> using </vector></algorithm></iostream></algorithm>…

不揮発メモリICの型番まとめ

不揮発性メモリICの型番とその種類についてざっくりまとめました. 自分用のメモなので間違ってたり一般性がないものが含まれてるでしょうが、あしからず. 24xx I2C対応不揮発性メモリ. 調べた限りではEEPROMしかなさそう. 表面実装が多いがDIPも普通に手に入…

C++でbind()が使えない

以下のコードはVisual StudioでWinsock2を使おうとしたときのものです. Microsoftのサンプルコードをコピペしただけなのでビルドできると思いきやコンパイルエラーになります. #include <iostream> #include<WinSock2.h> #include<ws2tcpip.h> #include<functional> /* これがないとリンク時にエラーになる </functional></ws2tcpip.h></winsock2.h></iostream>…

DLLで共有したデータの寿命

Windowsの動的ライブラリ(DLL)中のグローバル変数を複数のプロセスで利用する方法とそのグローバル変数の寿命についてまとめました. DLLでデータを共有する方法 DLLのデータセグメントに置かれた変数は複数のプロセスで共有可能です. なので data_seg pragma…

USBシリアル変換ICを使う

USBシリアル変換ICを使ってマイコンとシリアル通信をした時のメモです. 準備するもの 開発用PC STM32NUCLEO-F072RB USBシリアル変換IC USBシリアル変換IC用ドライバ その他 STM32CubeIDEでの作業 プロジェクトの作成 コンフィギュレーション printfの記述 フ…

C/C++でコマンドライン引数の文字数が取得できない

結論から言うとsizeof()じゃなくてstrlen()を使いましょうという話です. x86(32bit)環境で以下のようなプログラムをビルドして実行すると、いかなるコマンドライン引数であっても「size:4」と表示されます. #include<stdio.h> int main(int argc, char** argv){ if(ar</stdio.h>…

javascriptで足し算ができない

HTMLの<area>タグのcoordsに設定された属性値にjavascriptからオフセットを与えようとしたときに引き算はうまくいくのに足し算はうまくいかないという事態に遭遇しました. 以下のコードを実行して加減算をした時の各座標の値を表示してみると原因が分かります. <map name="example"> <area shape="rect" coords="50,50,150,150"> </map> <script></area>…

リンク集

個人的にたまによく使うサイトのリンク集. 完全に自分用メモ.徐々に更新 MSVC UCRT 関数リファレンス (アルファベット順) コンパイラ コマンド ラインの構文 コンパイラオプション リンカー オプション WinAPI(ヘッダ別ページへのポータル) Windows コントロ…

size_t型とは

メモリ系のライブラリやコンテナを使っているとよく見るsize_t型についてまとめました. 検証環境 size_t型は処理系依存 size_t型のtypedef宣言 Cの場合 C++の場合 size_t型の意味 検証環境 項目 説明 OS Windows11 MinGW-W64 gcc version 8.1.0 size_t型は処…

git add が出来ない

サブディレクトリ中のファイルをgit add 後にgit statusしてもファイルがuntrackedなままだった. 原因はサブディレクトリに.gitフォルダが存在していることだった. サブディレクトリの.gitフォルダを削除したらgit add できました.

ARMマイコンでNewlibを使う

STM32Nucleo上のCortex-M0でNewlib(組み込み用標準Cライブラリ)を利用してprintfしました. 箇条書きでまとめると以下のことをします. LinuxでNewlibをビルド WindowsのSTM32CubeIDEでSTM32 Projectを作成する コンパイラ、バイナリツール、libgccはIDEに付属…

ARM用のNewlibをビルドする方法

Armマイコン(Cortex-M0)でNewlibを使いたいので自分でビルドしてみました. たいていツールチェーンにバイナリとして付属してるけどね. 実行環境 ツールチェーンの取得 arm-none-eabi用のビルドの流れ 動かなかった原因 Cortex-M0用にビルド まとめ 参考 実行…

warning: using cross tools not prefixed with host triplet の意味

Newlib(組み込み用標準Cライブラリ)をarm-none-eabi用にUbuntu上でビルドしていたところ、「warning: using cross tools not prefixed with host triplet」に遭遇しました. 実行環境 項目 説明 OS Ubuntu 20.04 LTS コンパイラ x86_64 Linux hosted cross to…

ツールチェーンとコンパイラの違い

クロスコンパイラを探しているとツールチェーンというものをよく見かける. 何が違うかというと、ツールチェーンはコンパイラに加え、バイナリツール、デバッガ、ライブラリを含んでいる. 広義のコンパイラ(MinGWなど)はライブラリなども含んでいるので、正確…

GCCでリンクしているライブラリを知りたい

GCCはオプションなしでビルド工程を自動で行ってくれますが、だからこそデフォルトでリンクされているライブラリが分かりにくいです. デフォルトでリンクされるライブラリやリンカスクリプトを知りたい場合は、 -Wl,--verbose オプションをつけてリンカに--v…

WinAPIの型まとめ

WinAPI(MSVC)で頻出の型の情報をまとめました. 適宜更新するかもです. Win64環境前提です. 環境 項目 バージョン WinSDK 10.0.22621.0 呼び出し規則 結局のところすべて__stdcallと同じ意味になるが、識別子を分けることで何のための関数かはっきりさせる. …

GCCでユーザー独自のセクションを定義したときの挙動

GNUコンパイラに生成コードをユーザー独自のセクションに配置するように命令したときに、デフォルトのリンカスクリプトが使用可能か実験しました. 実行環境 独自セクションにコードを配置する exeをダンプ(デフォルトリンカスクリプトでビルド) デフォルトの…

LRESULT型とは何なのか

環境 項目 説明 OS Windows11 Windows SDK 10.0.22000.0 LRESULTは64ビットint型 minwindef.hを見ると以下のようにtypedefされています. //minwindef.h /* Types use for passing & returning polymorphic values */ typedef UINT_PTR WPARAM; typedef LONG_…

dllの中身を表示する -アンマネージ言語編-

Windowsのdllはバイナリなので基本的にはそのままでは何が何だかわかりませんが、Visual Studioについてくるdumpbin.exeを使用すると様々な情報をテキストとして表示することが出来ます. その使い方やオプションについてまとめました. 以下ホストはx64を想定…

C言語で多次元配列をポインタで扱う

多次元配列をポインタで扱う方法です. 多次元配列は結局のところ一次元配列と同じようにメモリが確保されています. 例えば、char型の2次元配列とchar型へのポインタについて、次のことが言えます 2次元配列とポインタの関係 実用上は次のようにキャストして…

C言語のポインタ

C言語のポインタおよびポインタへのポインタの使い方をまとめてみた. 主にint型とint型へのポインタを例に説明する. アドレス演算子&と間接演算子* 単項演算子の&をアドレス演算子という. 二項演算子の&はビット演算子の1つであり、&&は論理演算子の1つであ…

assignment to expression with array typeの意味

次の記事を参照 prupru-prune.hatenablog.com

invalid array assignment の意味

一言でいうと配列名をポインタとしてアドレスを再代入することは出来ないというエラーである. 配列名とポインタの区別がつく場合 配列名とポインタの区別がつかない典型例 コールした関数内ではアドレスが交換できる(ただし、この例はスワップできない) コー…