トホホな疑問(14) Python, smbusモジュール

ラズパイに3角測量センサ接続」という話題で、何気にPythonの

smbus

というモジュールを使ってしまいました。理由は、PythonからI2Cを使うときに「よく使われているみたい」だったから。しかし、I2Cではなくsmbusです。遠い昔の朧げな記憶によれば、smbusは主にノートPC向けに始まった規格の筈。確かにI2Cベースだった気もしますが、そのあたり記憶もあやふや。それにsmbusモジュールのインタフェース関数が一体どのようなI2Cバス制御をしているのか実体が分からない。「簡易ロジアナ」で観察する元気もないし。。。

“トホホな疑問(14) Python, smbusモジュール” の続きを読む

IoT何をいまさら(38) ラズパイに3角測量センサ接続2

昨日は、ラズパイのI2Cにシャープ製測距センサGP2Y0E03をつなげて距離が測れている雰囲気が出て良かったね、で終わっていました。今日は「移植」したソフトウエアについて見ていきたいと思います。元は、MbedOSでcppで書いたのですが、今回はPythonであります。I2Cの制御には変わらないので、遠くからみたら「一緒」ですが、細かいところの書き方はちょっと「違う」のでした。

“IoT何をいまさら(38) ラズパイに3角測量センサ接続2” の続きを読む

IoT何をいまさら(37) ラズパイに3角測量センサ接続

前回(といっても3カ月も前ですが)は、PIRセンサをラズパイに接続し、何か検出したらスマホにお知らせ、というのをやってみました。PIRセンサはシンプルなものでGPIOで接続でした。今回はI2Cバスに接続するセンサを扱ってみたいと思います。こんどは大分以前の回で試してみたシャープ製測距センサです。ソフトウエア的には、MbedOS上のcppのプログラムをRaspbian上のPythonのプログラムに移植する形です。

“IoT何をいまさら(37) ラズパイに3角測量センサ接続” の続きを読む

ぐだぐだ低レベルプログラミング(19) Arm NEONをつかってみる4

ようやくコンパイラにNEONのクワッドワードのレジスタを使うコードを吐き出してもらえるようになったので、わずかにハードルを上げてみたいと思います。当初から予定通りで、内積計算ですね。ベクトルの要素毎に単純な掛け算をしているのと比べると、それらの和をとっていかなければならないので、計算はちょっとだけ複雑。それに何と言っても結果はスカラー。コンパイラはどのように料理してくれるのでしょうか。

“ぐだぐだ低レベルプログラミング(19) Arm NEONをつかってみる4” の続きを読む

ぐだぐだ低レベルプログラミング(18) Arm NEONをつかってみる3

続けざまにぐだぐだです。前回、なんとかコンパイラがクワッドワード(128ビット)幅のレジスタを使ったNeon命令を吐き出すようになりましたが、何か思っていたより複雑なコードになっていました。もしやと思ってよく考えてみたら、それは私の書いたコードがイケないことに気付きました。それでもコンパイラ様は必死に注文にこたえるべく、コード生成をおこなってくれた結果、なにやら複雑なコードが生成されてしまったのでした。自分の書いたコードをコンパイラ様が素直に解釈できるようにちょいと直せば良かったのでした。それでようやく、クワッドワードかつシンプルなコードが出力されるようになりました。

“ぐだぐだ低レベルプログラミング(18) Arm NEONをつかってみる3” の続きを読む

ぐだぐだ低レベルプログラミング(17) Arm NEONを使ってみる2

ぐだぐだです。前回は、NEONを使ってみると書いておりましたが、今日見直してみれば、本当の意味のNEONじゃありませんでした。すみません。最近では、ArmのVFP(Vector Floating Point. 一応「ベクトル」計算機だったのね)は、NEONお供というか補完用の命令セットでなっているみたいです。NEONが1レジスタに複数の要素を入れて同時に処理できるのに比べるとVFPはパイプライン方式のベクトル化(昔はこれが本道だったような気もしますが)。1レジスタには1要素であります。こちらの命令が生成されていた。ま、今じゃNEONの一部と言えないこともないですが、狙いは1レジスタに複数要素のSIMDなので違う。狙い通りのコードを生成するにはどうするの?

“ぐだぐだ低レベルプログラミング(17) Arm NEONを使ってみる2” の続きを読む

ぐだぐだ低レベルプログラミング(16) Arm NEONを使ってみる1

今回から、少し実用的?に、ArmのNEONを学んでみたいと思います。所謂SIMD(Sigle Instruction/Multiple Data)の命令セットです。Intelでいうと、AVXとか、SSEとかに相当します。Arm NEONの場合、128ビット幅のレジスタなので一度に単精度の浮動小数であれば4個、16ビットの整数なら8個を計算できます。GPUの並列度には遠く及びませんが、使えるものは使いましょう。それに、我がRaspberry Pi 3 model B+でも立派に使用できるのであります。

<訂正>この回はNeon命令使用に行きついていませぬ。その一歩手前で終わっております。

“ぐだぐだ低レベルプログラミング(16) Arm NEONを使ってみる1” の続きを読む

鳥なき里のマイコン屋(71) Kendryte K210、RISC-V搭載AIチップ

Joseph Halfmoon

中国の方でRISC-Vがかなり人気になっているらしいことは伝わってきておりました。それが実感できる、何か「ガツン」とくる実例ないかいな、と思っていたのです。昨日投稿でとりあげさせていただいたK210、なかなか面白いチップであった上に、直ぐに購入できる上にお手頃価格でした。待っている新製品でたら購入の予定。その前にちょっと調べてみました。製造元は Canaan Creative社(北京)で、その会社のAI向けブランド名?がKendreteであるようです。

(K210を使い始めた件はこちら

“鳥なき里のマイコン屋(71) Kendryte K210、RISC-V搭載AIチップ” の続きを読む

Literature Watch Returns(9) 「世界のAIマイコン」特集、トラ技2019-11月号

店頭にならんで直ぐに購入させていただいたのですが、しばらく「寝かせて」しまいましたスミマセン、トラ技2019年11月号であります。特集「世界のAIマイコン」、しかし、その上の青文字を見逃してはいけません、64bit/400MHz RISC-Vです。世界のと言いつつ、その実態はK210(RISC-Vコア)の特集といって良いでしょう(そのくせRISC-Vそのものは前面に出てこない)。愛用のJetson NanoもRaspberry Piなども登場はしますがぶっちゃけ比較相手。しかし、このチップ、物欲をそそります。読めばボードが欲しくなる、そしてお手頃価格!そういえば前回も特集読んでJetson Nanoポチりました。どうしたものでしょ。

“Literature Watch Returns(9) 「世界のAIマイコン」特集、トラ技2019-11月号” の続きを読む

トホホな疑問(13) Python、lxml、デフォルト名前空間とXPath

私なんぞは「その筋」の専門家でもなんでもないので、XMLと向き合わなければならないことなどさほど多くはありません。時折あるそんな機会も、とりあえずPythonでlxml使っておけばOK、てな感覚でおりました。XPath便利ですし、lxmlは速いのではないですかね。でもね、たまに困ることがあります。名前空間の指定されているXML、それもプリフィックス無し、デフォルト名前空間というやつが含まれるとき。そういうときはどうしたらよいんでしょうか?

“トホホな疑問(13) Python、lxml、デフォルト名前空間とXPath” の続きを読む

ぐだぐだ低レベルプログラミング(15) 変数アクセスのコードを眺めてみれば3

Raspberry Pi 3, Radio

前回までで大域変数について、単純な変数、初期値のあるもの無いもの、配列、構造体とコンパイラの吐き出したメモリアクセスのコードを一通り調べてみました。今回は、関数の中のローカル変数、引数について調べてみます。前回、前々回と同じく、環境はRaspberry Pi 3 model B+上のRaspbian OS、コンパイラはgcc 8.3.0 です。なお、生成されたアセンブリ言語コードの読みやすさを優先に、最適化オフ、デバッグ情報ありです。 “ぐだぐだ低レベルプログラミング(15) 変数アクセスのコードを眺めてみれば3” の続きを読む

土木でエレキ(21) 台風19号、橋梁崩落、損傷

今も必死で復旧作業に取り組んでいらっしゃる皆さま方、非常にお疲れのことと思います。くれぐれも事故の無いようお気をつけください。そして、あの大雨の夜の闇の中で各地で悲劇が起きていたことがようやく判明してきたようです。未だ全貌は分かりませんが、亡くなられた方が増え続けています。痛ましいことであります。

あまりに多数の河川の多数の箇所で決壊が起きたようです。決壊にいたらないまでも越水したところはさらに多いようです。今も水が引いていないし、まずは堤防の復旧と排水を急がないとならない状況だと思います。しかし、ニュースを見ると、橋梁の流出、落橋、損傷もまた多数。橋の復旧は堤防の後でしょうが、取り急ぎ場所だけでも書きとめておく必要を覚えました。ニュースになったような鉄道橋、道路橋あたりを中心として、後日の控えとして列挙しておきます。あまり増えてほしくはないリストですが、何か判明すればまた戻ってきて書き込みたいと思います。(追記10/20)

“土木でエレキ(21) 台風19号、橋梁崩落、損傷” の続きを読む

ぐだぐだ低レベルプログラミング(14) 変数アクセスのコードを眺めてみれば2

前回は、Cコンパイラの吐き出した単純な大域変数へのメモリアクセスのコードを眺めてみました。今回は、大域変数でも構造体と配列へのアクセスを見てみます。今回も環境は、Raspberry Pi 3 model B+上のRaspbian OS、コンパイラはgcc 8.3.0 です。なお、生成されたアセンブリ言語コードの読みやすさを優先に、最適化オフ、デバッグ情報ありです。

“ぐだぐだ低レベルプログラミング(14) 変数アクセスのコードを眺めてみれば2” の続きを読む

ぐだぐだ低レベルプログラミング(13) 変数アクセスのコードを眺めてみれば

第10回でgccがメモリアクセスするのにどのようなコードを吐き出しているのか確認しようと考えたものの、第10回から第11回第12回とずっと回り道をしてしまいました。今回ようやくcコンパイラの吐き出すメモリアクセスのコードの確認に入ります。例によって環境は ラズパイ上のRaspbian, コンパイラはgcc  (Raspbian 8.3.0-6+rpi1) 8.3.0 です。

“ぐだぐだ低レベルプログラミング(13) 変数アクセスのコードを眺めてみれば” の続きを読む