昨日は、ラズパイのI2Cにシャープ製測距センサGP2Y0E03をつなげて距離が測れている雰囲気が出て良かったね、で終わっていました。今日は「移植」したソフトウエアについて見ていきたいと思います。元は、MbedOSでcppで書いたのですが、今回はPythonであります。I2Cの制御には変わらないので、遠くからみたら「一緒」ですが、細かいところの書き方はちょっと「違う」のでした。
ぐだぐだ低レベルプログラミング(19) Arm NEONをつかってみる4
ぐだぐだ低レベルプログラミング(18) Arm NEONをつかってみる3
続けざまにぐだぐだです。前回、なんとかコンパイラがクワッドワード(128ビット)幅のレジスタを使ったNeon命令を吐き出すようになりましたが、何か思っていたより複雑なコードになっていました。もしやと思ってよく考えてみたら、それは私の書いたコードがイケないことに気付きました。それでもコンパイラ様は必死に注文にこたえるべく、コード生成をおこなってくれた結果、なにやら複雑なコードが生成されてしまったのでした。自分の書いたコードをコンパイラ様が素直に解釈できるようにちょいと直せば良かったのでした。それでようやく、クワッドワードかつシンプルなコードが出力されるようになりました。
ぐだぐだ低レベルプログラミング(17) Arm NEONを使ってみる2
ぐだぐだです。前回は、NEONを使ってみると書いておりましたが、今日見直してみれば、本当の意味のNEONじゃありませんでした。すみません。最近では、ArmのVFP(Vector Floating Point. 一応「ベクトル」計算機だったのね)は、NEONお供というか補完用の命令セットでなっているみたいです。NEONが1レジスタに複数の要素を入れて同時に処理できるのに比べるとVFPはパイプライン方式のベクトル化(昔はこれが本道だったような気もしますが)。1レジスタには1要素であります。こちらの命令が生成されていた。ま、今じゃNEONの一部と言えないこともないですが、狙いは1レジスタに複数要素のSIMDなので違う。狙い通りのコードを生成するにはどうするの?
ぐだぐだ低レベルプログラミング(16) Arm NEONを使ってみる1
トホホな疑問(13) Python、lxml、デフォルト名前空間とXPath
ぐだぐだ低レベルプログラミング(15) 変数アクセスのコードを眺めてみれば3
前回までで大域変数について、単純な変数、初期値のあるもの無いもの、配列、構造体とコンパイラの吐き出したメモリアクセスのコードを一通り調べてみました。今回は、関数の中のローカル変数、引数について調べてみます。前回、前々回と同じく、環境はRaspberry Pi 3 model B+上のRaspbian OS、コンパイラはgcc 8.3.0 です。なお、生成されたアセンブリ言語コードの読みやすさを優先に、最適化オフ、デバッグ情報ありです。 “ぐだぐだ低レベルプログラミング(15) 変数アクセスのコードを眺めてみれば3” の続きを読む
ぐだぐだ低レベルプログラミング(14) 変数アクセスのコードを眺めてみれば2
前回は、Cコンパイラの吐き出した単純な大域変数へのメモリアクセスのコードを眺めてみました。今回は、大域変数でも構造体と配列へのアクセスを見てみます。今回も環境は、Raspberry Pi 3 model B+上のRaspbian OS、コンパイラはgcc 8.3.0 です。なお、生成されたアセンブリ言語コードの読みやすさを優先に、最適化オフ、デバッグ情報ありです。
ぐだぐだ低レベルプログラミング(13) 変数アクセスのコードを眺めてみれば
ぐだぐだ低レベルプログラミング(12) オブジェクトファイルその2
前回は、オブジェクトファイルと言いながら、絶対番地のHEXファイルなど、ついついFlashライタでもなければ使わないようなものにフォーカスしてしまいました。今回は、心を入れ替えて(どう?)、本道のリンク可能なオブジェクトファイルを調べてみたいと思います。コンパイル、アセンブルした後のオブジェクトファイルとリンクした後の実行可能なオブジェクトファイル、例によってRaspbian上のArmの32ビットコードで見てみます。
トホホな疑問(12) Python3移行、文字列数値変換にハマる
トホホな疑問(11) Python、空listの繰り返し
ぐだぐだ低レベルプログラミング(11) オブジェクトファイルその1
前回、コンパイラの出力を元とするオブジェクトファイルのアセンブリリストをながめておりました。そこで現れてくるメモリアクセスを読み解くときには、セクションなる存在を無視することはできません。ただ、セクションなるもの、多面的な顔を持っていますな。全てを一度に知ろうとしても膨大すぎるかも。多分、列挙する前に速攻で忘れそうです。裏では活躍されているのでしょうが、実際、とりあえず知らんでも済むセクションの方々も多数。しかし、だいたいセクションとは何に含まれておるのかや?その在りかを知らずしてセクションの理解には至らぬであろう(本当か)。今回はその手前のオブジェクトファイルについてぐだぐだ書いてみました。 “ぐだぐだ低レベルプログラミング(11) オブジェクトファイルその1” の続きを読む
ぐだぐだ低レベルプログラミング(10) アセンブラ・リスティング
前回に引き続き、gasを用いてArmのアセンブラやっていこうと思ったのです。個別の命令をいくつか見てきたので、今回は、メモリアクセスに進もうかと。そこでちょっと魔が差しました。最初からアセンブラでサンプルを書くのではなく、gccがどんなコードを吐いているのか「参考」にさせてもらうのはいかがかと。Cであれば、大域変数、ローカル変数、単純変数、配列、構造体、いろいろあります。そういうモノどもをコンパイラはどんなコードで扱っているのか調べておこうと。でもね、その前に、大体逆アセンブルとか、メモリとか、セクションとかの調べ方押さえておかないと意味わかんなくない、ということに思い至りました。 “ぐだぐだ低レベルプログラミング(10) アセンブラ・リスティング” の続きを読む