ソフトな忘却力(22) シグナル、無視するにはsigprocmask()使う方が良いのね

ResultEC
Joseph Halfmoon

シリーズ3か月近く間が空きました。気を許すと練習頻度を忘却速度が上回ります。練習再開、テーマは「シグナル」です。マイコンの場合のハードウエア割り込みのようなアカラサマなものではなく、Linuxの管理下にある「ソフトウエア割り込み」的なやつです。今回はシグナルを無視するやり方を練習。

“ソフトな忘却力(22) シグナル、無視するにはsigprocmask()使う方が良いのね” の続きを読む

ぐだぐだ低レベルプログラミング(71) ARM64(AArch64)、MOVの込み入った事情

MOVZMOVN_A
Joseph Halfmoon

前回まで論理演算命令の「代表」AND命令をやりました。今回からは他の論理演算ORRやXORは飛ばし、転送命令MOVへ入りたいと思います。A64の命令多すぎ、さっさとやらないと終わりませぬ。しかしMOV、されどMOVであります。例によってMOVという実体なくaliasで紡がれているのですが事情いささか込み入っております。

“ぐだぐだ低レベルプログラミング(71) ARM64(AArch64)、MOVの込み入った事情” の続きを読む

ぐだぐだ低レベルプログラミング(70) ARM64(AArch64)、論理命令AND一族#2

AndTable2
Joseph Halfmoon

前回に続き、A64の論理演算命令群、AND一族の2回目です。今回は演算結果をフラグに反映する「S」のついた命令どもをエクササイズしてみます。またands命令の「エイリアス」、tst命令についてもそのコード生成確認とともに練習してみます。Arm64ビットのクセに慣れればこれはこれでらくちん。

“ぐだぐだ低レベルプログラミング(70) ARM64(AArch64)、論理命令AND一族#2” の続きを読む

ぐだぐだ低レベルプログラミング(69) ARM64(AArch64)、論理命令AND一族#1

AndTable
Joseph Halfmoon

今回よりA64の論理演算命令に入ってまいります。AND、OR、EOR、NOTくらいさらっと撫でて終わりっしょ、と思うとさにあらず。便利な合わせ技あり、例によってのエイリアス、そして細かい凸凹もありです。今回は論理演算命令中の大族、AND系命令一族を練習してまいりたいと思います。

“ぐだぐだ低レベルプログラミング(69) ARM64(AArch64)、論理命令AND一族#1” の続きを読む

やっつけな日常(21) NodeRedダッシュボードからIO Expander制御

NodeRedDashboardEC
Joseph Halfmoon

前回、ラズパイ3機のI2Cバスを5V化した先に接続したIO Expander MCP23017の動作確認をPython使って行いました。今回はIO Expanderの持つA、B2つの8ビットポートのうちAポートについて、ブラウザに表示されているNode-REDダッシュボードから点灯/消灯操作を出来るようにしてみました。 “やっつけな日常(21) NodeRedダッシュボードからIO Expander制御” の続きを読む

ブロックを積みながら(71) Node-RED、rpi-gpio in ノード

RaspberryPiINOUT_IFcircuit
Joseph Halfmoon

前回Node-REDから、Raspberry PiのGPIO端子を出力として操作してみました。今回は入力として使用してみます。前回同様、外部のボードとはフォトカプラで絶縁しています。入力イベント「ボタンを押した」を捉まえるために昔やった記憶のあるfilterノードに御出馬お願い。その裏で前回の出力回路を微妙に修正も。

“ブロックを積みながら(71) Node-RED、rpi-gpio in ノード” の続きを読む

ブロックを積みながら(70) Node-RED、rpi-gpio out ノード

RpiOUT_B0
Joseph Halfmoon

今回からRaspberry Pi上でNode-REDを走らせているときに使えるノードをいくつか実験して行きたいと思います。Raspberry Piの持つ拡張端子を直接操作していくものども。制約事項もままありますが、外部回路を接続できるので応用無限大?ホントか?

“ブロックを積みながら(70) Node-RED、rpi-gpio out ノード” の続きを読む

ぐだぐだ低レベルプログラミング(68) ARM64(AArch64)、算術命令エイリアス#2

ArithAliasTable2
Joseph Halfmoon

前回に続きARM64の算術演算命令のエイリアスを動かしていきたいと思います。テーマはNegate、「符号反転」命令です。「2の補数」世界なので符号ビットの操作では終わりませんよ。上の表をみていただけばお分かりのとおり、NEG、NEGS、NGC、NGCSと4命令もあります。まあみんなSUB系命令のエイリアスですが。

“ぐだぐだ低レベルプログラミング(68) ARM64(AArch64)、算術命令エイリアス#2” の続きを読む

やっつけな日常(20) Raspberry Pi 3、5V IO Expander動作確認

DUT_schematic
Joseph Halfmoon

前回、ラズパイ3機からとりだしたI2C配線を5V化するところの配線の接続確認で疲れてハードだけで終わってました。今回は動作確認用のソフトウエア(Python スクリプト)を走らせてIO Expander MCP23017が動作OKなことを確認します。動作確認方法は吉例LEDの点滅です。

“やっつけな日常(20) Raspberry Pi 3、5V IO Expander動作確認” の続きを読む

やっつけな日常(19) Raspberry Pi 3で5VのI2C, 配線抜けてた動かない

RpiPCA9306
Joseph Halfmoon

ブレッドボードとジャンパ線で実験用の回路をこさえるのはお手軽で良いです。ただ時折、思わぬところで足をすくわれます。今回はラズパイ3のI2C信号を5V化した先に5V電源のIO Expanderを取り付けようとしてハマりましたです。「ちょろい」などと不埒なことを考えて手を抜いたバチがあたりました。

“やっつけな日常(19) Raspberry Pi 3で5VのI2C, 配線抜けてた動かない” の続きを読む

ぐだぐだ低レベルプログラミング(67) ARM64(AArch64)、算術命令エイリアス#1

ArithAliasTable
Joseph Halfmoon

前回ようやく終わったadd系(足し算)の次はsub系(引き算)かというと似たことを繰り返しても仕方ないなと思いました。そこで算術演算命令の中で「微妙な」cmp系へ行きたいと思います。RISCあるあるの「実はcmp命令なんて無い」というオチの命令群です。勿論ちゃんと動作します。裏ではsub系命令が暗躍?していますぞ。

“ぐだぐだ低レベルプログラミング(67) ARM64(AArch64)、算術命令エイリアス#1” の続きを読む

ぐだぐだ低レベルプログラミング(66) ARM64(AArch64)、adc、加算キャリー付

ADD_INSN_ADDC
Joseph Halfmoon

add系命令の5回目です。流石にそろそろaddを終わらせて次回は次の命令に行きたいと思います。addの最後を飾る?のはadc、キャリー付きのaddです。ソースオペランドレジスタ2個に加えてキャリーフラグの1ビットを加えるもの。この命令に関してだけは、オペランドのシフトも拡張もありません。良かった簡単で。

“ぐだぐだ低レベルプログラミング(66) ARM64(AArch64)、adc、加算キャリー付” の続きを読む

ぐだぐだ低レベルプログラミング(65) ARM64(AArch64)、レジスタ拡張付きadd

addEXTB_EC
Joseph Halfmoon

Armの64ビット命令をさらっと舐めるつもりが、add命令も既に4回目です。今回動かしてみますのが、符号拡張、ゼロ拡張、狭いビット幅のオペランドを広いビット幅に拡張してから足し込む命令です。とりあえず拡張前はバイト縛りといたしましたが、それでも選択肢が多すぎ。テストの組み合わせは8命令です。Armの命令多すぎないか。

“ぐだぐだ低レベルプログラミング(65) ARM64(AArch64)、レジスタ拡張付きadd” の続きを読む

ぐだぐだ低レベルプログラミング(64) ARM64(AArch64)、シフト付きadd

addSFTc_EC
Joseph Halfmoon

Armは64ビット化するときに32ビットであった「余計なもの」を捨ててます。しかしレジスタをシフトしてから演算という命令は捨てなかったです。アドレス計算などに便利なようでいて、実はそれほど頻繁に使う分けでもない命令(個人の感想です。)RISC-Vなどは持ってない類。もはやArmの伝統といっても良い機能かと。

“ぐだぐだ低レベルプログラミング(64) ARM64(AArch64)、シフト付きadd” の続きを読む