
正確に言えば、RISC-Vにはx86のFlagsのような演算フラグレジスタは無い、というべきでしょうか。RISC-Vにも制御フラグは制御レジスタの中にあります。それでも、比較命令やって、その後分岐命令やって、みたいな古い頭のコーディングに慣れていると、最初は戸惑います。でも Flags なんて無きゃ無いで済んだんだ。。。
デバイス作る人>>デバイス使う人>>デバイスおたく
Microchip社のArm Cortex-M4搭載マイコン、ATSAMD51の周辺回路をなるべくダイレクトに制御してみるシリーズ、今回はDAC(Digital to Analog コンバータ)であります。データシートを読んでみると信号処理向け支援機能なども内蔵しておりなかなか強力。とりあえず今回は簡単にタイマ割り込みハンドラの中でソフトでDA出力してみました。
前回は浮動小数点数の計算でしたが、今回は整数の割り算です。組み込みMCUのプログラマには「割り算は避ける」習性が刷り込まれています(個人の感想です。)せいぜい2のべき乗の割り算に帰着させて右シフトで逃げます。しかしラズパイPicoでは割り算、あまり苦になりません。ハードウエアの割り算器を搭載。
信号処理素人の個人の感想ですが、デジタル信号処理の入門書の多くはFIRが先、IIRが後という順番じゃないかと思います。IIRは難しそうだからかな。でも実装するとなるとIIRの方が簡単だったりして。ところが、三上先生本では、先にIIRが登場、どっちが先でもいいっちゃいいですが。まずは前回プログラムを「チョイ変」して1次のIIRフィルタをしみじみ?味わってみたいと思います。
前回、MathematicaとMaximaで同様な2Dプロットを試みておりました。しかし手元の古い版のMaximaでは実行できない関数があるということで途中で無念の?打ち切りと相成りました。そしてMaxima(GUIであるwxMaxima)をバージョンアップ。今回は更新したMaximaを使って前回歯が立たなかったプロットにリベンジ?大丈夫か?
前回のChangeノードは、「積荷」を載せ替えたりするためのものでした。今回のSwitchノードは、「行き先」への仕分けを担うもの、という感じです。仕分けの方法もいろいろあって非常に便利です。今回はその基本部分を使ってみますが、一見しただけでもなかなか便利。
前回までで「エッジ側」M5ATOM LiteとNode-REDサーバー(Raspberry Pi 3)との間でMQTTを介してJSONオブジェクトを送受できるようになりました。しかし不満なのは送受信のタイミングです。前回まで単一のmainループにお任せだったので便利とは言えない仕組みでした。今回から uasyncioを使って改良していきたいと思います。
今回は1点確認するだけであります。ラズパイPico上で float型 を使ったら RP2040の内の「fast floating point」を呼んでくれているのだよね、と。ラズパイPicoで積極的にfloatを使いたいとは思わないのですが、昨日 Cortex-M4F機(STM32F446RE)の上で float していたので、Picoの上の浮動小数点はどうなの?と気になったためです。
前回は、VS Code拡張 CMake Toolsが生成してくれたCMakeLists.txtを手修正して「お好み」の階層構造でビルドできることを確かめました。今回はインストール済のライブラリを使えるようにしてみます。リンクするライブラリはBoostの中からFilesystemを選んでみました。何も難しいことはないのだけれど、結局ポカはあるのね。
Raspberry Piを利用したWolfram言語プロジェクト により無償で使用できるMathematica(Wolfram言語)と、定番の無償ツールMaximaを使用している5回目は2次元のプロットです。今回は Maxima 不戦敗な感じ、どうも私の手元のMaxima古くてダメかも。新版を再インストールして仕切り直した方が良い感じです。