忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

GNU Toolchain for Hitachi H8/300 series for Windows

今更シリーズの第3!弾、さて今回は往年の組み込み用 CPU、日立 H8/300 用の GCC などは如何でしょうか。ルネサスさん、なんと一部品番については 2020 年代中頃辺りまで供給するつもりらしいです。
秋月でもまだまだ扱いがあるあたり、根強い需要があるのか、それとも余程在庫が残ってるのか…


妙な邪推はさておき、x86 な Windows で動作する最新(本稿執筆時)の H8/300 用ビルド済み

  • binutils 2.30 (LTO)
  • gcc 8.3.0 (C/C++, libstdc++, LTO, H8/300|H8S|H8SX multilib)
  • newlib 2.5.0 (H8/300|H8S|H8SX multilib)
  • gdb 8.2.1

を公開しておきます。
MSYS2 32bit 環境下でビルドしてありますが、利用に MSYS2 や他のライブラリの類のインストールは必要ありません。詳しくは同梱の readme.txt とかを見て下さい。


gcc-8.3.0_h8300-hitachi-elf_Windows.7z (SHA-1: 22a9f12535959354877ecac1e77fb94c3108653b)

  • 素の gcc 8.3.0 ではコード生成に問題がある(特に H8SX で newlib や libstdc++ ですらコンパイルに失敗する)のを修正済み
  • ついでに素の gcc 8.3.0 より少し良いコードを生成するよう修正
  • というか巷に散見される H8/300 用 GCC は 4.9 / 4.7 / 2.9 と古かったりするので…

同梱の Windows インストーラー(*.msi) を使えば直ちにインストールできます。確認とか全く聞いてこない手抜き仕様なので注意。
アンインストールも Windows インストーラーなので簡単。

拍手[1回]

PR

玄箱(初代)に Debian Jessie を入れたらラジーパイZeroより狭くて遅かった件

もう平成も終わろうというのに、今さら玄箱(初代)に Debian Jessie (archive) を debootstrap して linux-4.4.229 を添えてみました。


想定する構成

  • 玄箱(初代)専用、玄箱/HG も対象外
  • ブートローダーはフラッシュ版 U-Boot (u-boot-1.2.0-hd.flash.bin) を使う
    入手先およびフラッシュ書き込み方法は割愛
  • HDD のパーティション、およびフォーマットは
    # /etc/fstab
    proc    /proc   proc    defaults        0       0
    /dev/sda3       /       ext4    defaults,noatime        0       1
    /dev/sda1       /boot   ext2    defaults,noatime        0       2
    /dev/sda2       swap    swap    defaults        0       0
    
    これは玄箱(初代)本来の割り方ではなく、他所の野良 linux 化でよくされていた割り方とも微妙に違うので、U-Boot 変数の設定とかを引き写してくる際には注意

カーネルとユーザーランド


初期設定で…

  • ホスト名は kuroboxHD
  • IPv4 (DHCP 自動設定)、IPv6、mDNS 応答 (kuroboxHD.local)、および ssh が有効
  • netconsole は無効
  • シリアルコンソール、または ssh 経由で root へログイン可能、パスワードは kuroboxHD
  • セルフカーネルコンパイル(要8時間以上)が可能な程度に色々と入れてあります、あと Python3 とかも
    まあ普通に Debian Jessie なんで好みで apt-get して下さい

拍手[0回]

にわかもすなるIoTといふものを(その5)

前回に引き続いてラジーパイねた。
その前回で結局ローカルのIPカメラ画像をインターネット越しライブ配信するやりかたを書かずじまいだったけど、そんなのは各自勝手にやってくれとしか(をい) と言うかもうRTMPで流れてるんだからRTMP受け付けてくれる動画配信サービスにFFmpegで投げればいいだけ。

お次にラジーパイにやらせるねたはずばり、貧乏人のハイレゾオーディオ。
個人的にオーディオ系の話題は宗教あるいは「沼」だと思ってたので敬して遠ざけておくのがいいやね、どうせ耳にLPFが勝手にインストールされるお年頃だし(笑)…とか考えてたら、
  • ラジーパイからはI2SとかいうD/Aコンバーター直結用インターフェース信号が出ている
  • そのI2Sにぶら下げたD/Aコンバーターをラジーパイからオーディオデバイスとして扱う用意(OS/ドライバ/ミドルウェア/アプリ)が既にある
  • ユニバーサル基板での手ハンダ電子工作レベルでI2S接続して実際に音を出せるD/AコンバーターICが秋葉原で安く売られている

今I2S DAC ICを求めて全力疾走している僕は自宅警備員をしているごく一般的な男の子。強いて違うところをあげるとすればついさっきハイレゾオーディオに興味を持ったってとこかナ…そんなわけで、外神田は千石電商本店1F奥のICコーナーにやってきたのだ。
TI / Burr-Brown 2Vrms DirectPath™, 112dB Audio Stereo DAC with 32-bit, 384kHz PCM Interface PCM5102A
『ウホッ!いいIC…』
(同じICを0.1"ピッチ変換基板に貼っただけのものが最近秋月でも扱いが始まったのでSSOPハンダ付けとかしたくない方はどうぞ。あとピッチ変換基板・ピンヘッダ込みでかつ安くあがるのでケチな人もw)

このIC、TI / Burr-Brown PCM5102Aの諸元はこんな感じ。
  • 2chステレオ、最大サンプルレート384kHz、32ビット分解能、SNR 112dB
  • 低歪FIR/低遅延IIRを随時切り替え可能な最大8倍補間デジタルフィルタ
    (アナログ段LPFがとても簡素に)
  • 負電源チャージポンプ内蔵でグランドセンター2.1Vrms ポップフリー・アナログライン出力
    (DC阻止コンデンサが不要でイヤホン規模負荷なら直接駆動可)
  • システムクロックはI2S BCKから内蔵PLLで自己供給可
    (I2Sソース同期したシステムクロック発振が不要に)
  • 秋葉パーツ屋での末端価格が円建てで3桁
    (価格破壊の風が語りかけます…安い、安すぎるw)

うん、一応TI / Burr-Brownって高級オーディオICの代名詞だと思ってたんですが…かがくのちからってすげー!
(動作設定用I2Cインターフェースや内蔵DSP動作をいじれる上位モデルもありますね…フフフ、奴はPCM5100番台の中でも最弱…)

基本的にはデータシートの"Typical Applications"に沿って作ればいい。必要なものは秋月で揃うので忘れずに買っておく。
実装上の留意点、というほどのものでもないが気をつけることとしては、
  • DAC ICとセラコンとの距離を最小化するべし。"Layout Guidelines"にもそう書いてある。デカップル用100nFは変換基板ピンヘッダ実装部の隙間に配置できる。チャージポンプ用セラコン2200nFも頑張れば変換基板上に配置できる(ヒント:裏側)
  • DAC ICのSCK、FMT、DEMPはDGNDに落とす(直結またはプルダウン)。ミュート制御用のXSMTは真面目に実装すると面倒なのでDVCCに上げておくに留める(直結またはプルアップ)。FLTはDGNDに落とすか、適当な手段でDVCCに上げられるようにしておくのもいい
  • 各I2S信号線にはリンギング防止に200Ω程度の終端抵抗を入れたほうがいいという意見もある(シュミットトリガ入力なのでそれほどの効果はないかも)

DAC ICのDEMPについてナニコレイミワカンナイ!な人が多いようなのでここで解説。
"Pin Functions"見ても "De-emphasis control for 44.1-kHz sampling rate" としか書かれていないからか頓珍漢な思い込みを書いてしまっている方もいるが、要は初期のCD-DAの一部に高域SNR改善のために予め高域を持ち上げて(Pre-emphasis)サンプリングしたものがあって、それを正しく再生するために逆特性フィルタを掛ける(De-emphasis)、そういうことである。
もちろん昔はアナログ段でそういう特性のフィルタを作っていたのだが、今や数百円のICに複数の32ビット積和演算器と数百語のレジスタが当たり前に入る世の中なので(笑)、デジタル補間処理のついでで片付いてしまう。ただ、Pre-emphasisかかってるCD-DAは希少で、最近ではまず使われない。DEMPピン制御するよりはFFmpegとかで24ビット変換しつつDe-emphasisしたほうがよいかと思われ。

PCM5102A on Raspberry PI 3 model B
その3に貼っていた写真をもう一度。こんな見てくれでもまあ立派に鳴ってくれるのはご愛敬。少なくともラジーパイ本体のPWMモジュールででっち上げた48kHz、12ビット分解能相当の音とは確実に違う。と言うかオーディオは凝りだすとホント沼なのでこのくらいで丁度いい。大体、たかが数千円のシングルボードコンピュータと数百円のDACに釣り合わない金銭と労力を投じても仕方がないよ(笑)

組み立てに失敗してなければRaspbianでもVolumioでもとりあえず同じICを採用しているHiFiBerry DACだと誤認させれば使えるはず。具体的な方法はGoogle先生に聞いて下さい。
食わず嫌いはいかんとな思って一応Volumioもちょっと使ってみたけど…どうも性に合わないようで。やっぱFFmpegとかでALSAデバイスとして扱うのが個人的には好きです(笑)

ああそうだ、一応官能評価も書いておくか。
  • LPFと耳鳴りの入った耳には48kHz以上のサンプルレートの違いは正直わからない。ただ16ビット分解能と24ビット分解能の違いはわかる
  • 低歪FIRフィルタ(FLT=DGND)は所謂ハイレゾオーディオ系、特にクラシックとかに向いている感じ。低遅延IIRフィルタ(FLT=DVCC)はJ-POPとか、あと不可逆圧縮されたソースに向いている感じ
    (なんか他の人の感想と逆なんだな…)
(個人の感想です、あくまでもw)

拍手[0回]

にわかもすなるIoTといふものを(その4)

前回の続きのようなもの。

さてさてラジーパイ3Bを入手したが何に使おうか、ということで。
あ、皆が皆ラジーパイにWordPressを入れたがるのはどういう理由付けなのか個人的に理解できないのでパス。C言語学習でのHello Worldみたいなものなのかね。

とりあえずはオンボードH.264エンコードエンジン活用も兼ねてIPカメラ化を。
公式カメラモジュールや適当なUSBカメラを接続してLANまたはインターネット越しにライブ画像を眺める。用意するソフトは、
nginx
おなじみ軽量HTTP(など)サーバー。公式ダウンロードページからMainlineなりStableなりのtarballを拾ってくる。
nginx-rtmp-module
nginxでRTMPを扱うアドオン。公式GitHubからCloneするなりzipでダウンロードするなりする。
FFmpeg
おなじみマルチメディア十徳ナイフ(笑)。これも公式GitHub(ミラー)あたりを同上。まあFFmpegは毎日がエブリデイ更新状態なのでgit clone/pullしておくのも悪くはない。
ビルドはお好みでどうぞ…と書いても記事にならないので参考までに。
  1. まずはビルドの前提になるものを…
    sudo apt-get install \
     libpcre3-dev libssl-dev \
     libasound2-dev libfontconfig1-dev librtmp-dev libx264-dev libsdl2-dev
  2. nginx w/RTMP…
    ./configure \
     --conf-path=/etc/nginx/nginx.conf \
     --error-log-path=/var/log/nginx/error.log \
     --pid-path=/var/run/nginx.pid \
     --lock-path=/var/lock/nginx.lock \
     --http-log-path=/var/log/nginx/access.log \
     --http-client-body-temp-path=/var/cache/nginx/body \
     --http-proxy-temp-path=/var/cache/nginx/proxy \
     --http-fastcgi-temp-path=/var/cache/nginx/fastcgi \
     --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
     --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
     --with-http_ssl_module \
     --add-module=../nginx-rtmp-module
  3. FFmpeg w/RPi OMX…
    ./configure \
     --prefix=/usr/local/ffmpeg \
     --enable-gpl \
     --enable-version3 \
     --enable-fontconfig \
     --enable-libfreetype \
     --enable-librtmp \
     --enable-libx264 \
     --enable-mmal \
     --enable-omx-rpi \
     --extra-libs=-ldl
    かつてはラジーパイ実機でFFmpegビルドとか重すぎ(苦笑)だったらしいのだが今は昔。make -j4とかすればどんどん捗る(要強制冷却)。
  4. nginxをsystemd配下で稼動させる設定ファイル(nginx.service)…
    [Unit]
    Description=The NGINX HTTP and reverse proxy server
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/var/run/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    Nice=-10
    
    [Install]
    WantedBy=multi-user.target
  5. nginx自体の設定ファイル(/etc/nginx/nginx.conf)…
    #
    worker_processes 1;
    user root staff;
    events {
        worker_connections 128;
    }
    rtmp {
        server {
            listen 1935;
            chunk_size 16384;
            buflen 1000ms;
            exec_kill_signal term;
            allow publish 127.0.0.0/8;
            allow publish 192.168.0.0/16;
            deny publish all;
            allow play 127.0.0.0/8;
            allow play 192.168.0.0/16;
            deny play all;
            application webcam {
                live on;
                exec_pull /usr/local/webcamhelper/nginx_rtmp_exec_pull_wrapper '$app' '$name';
            }
        }
    }
  6. rtmp://{ラジーパイのアドレス}/webcam/* に接続した際に呼ばれるシェルスクリプト(/usr/local/webcamhelper/nginx_rtmp_exec_pull_wrapper)…
    #!/bin/bash
    
    FFMPEG=/usr/local/ffmpeg/bin/ffmpeg
    on_TERM(){
     pkill -TERM -P $$
    }
    trap 'on_TERM' TERM
    STEM=$(dirname $0)/rtmp
    DEVICE=$(readlink -f $(cat "$STEM.$1.$2.device"))
    $STEM.$1.$2.init $DEVICE
    $FFMPEG -hide_banner $(cat $STEM.$1.$2.ffmpeg_arg0) -i $DEVICE $(cat $STEM.$1.$2.ffmpeg_arg1) -f flv "rtmp://localhost:1935/$1/$2" &
    wait
  7. nginx_rtmp_exec_pull_wrapper と同じ場所に rtmp.{$app}.{$name}.device という名前で使用するカメラを識別するデバイスパスを、
    /dev/v4l/by-id/*
    rtmp.{$app}.{$name}.init という名前で最初の接続の際)に呼ばれるシェルスクリプト(主にカメラ初期化用)を、
    #!/bin/bash
    
    uvcdynctrl -d $1 -s Brightness *
    uvcdynctrl -d $1 -s Contrast *
    ...
    rtmp.{$app}.{$name}.ffmpeg_arg0 / rtmp.{$app}.{$name}.ffmpeg_arg1 という名前でFFMpegに渡すパラメータを書いておく。
    -loglevel error
    -fflags nobuffer -rtbufsize *M
    -f v4l2 -video_size *x* -input_format rawvideo -framerate *
    -filter_complex hqdn3d=3,drawtext=text=%{localtime}:fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Bold.ttf:fontsize=32:fontcolor=white@1.0:shadowcolor=black@0.8:shadowx=3:shadowy=3:x=(w-text_w)/2:y=16,fps=*
    -c:v h264_omx -b:v *M -g * -zerocopy 1
    {$app} は上記の例だと webcam に、{$name} はわかりやすい名称や番号とかにする。あとアスタリスクになっているところは実際の機材や環境に合わせて適当に。
これで rtmp://{ラジーパイのアドレス}/{$app}/{$name} をアクセスすると初期化スクリプトやFFmpegが勝手に起動して指定のカメラ動画をネット越しに取れるようになる。 単にカメラ動画取れました、おしまい…ではなくてカメラの種類や台数に変更があっても系統だって対応できるように仕立ててあるのでよかったら参考に。

拍手[0回]

にわかもすなるIoTといふものを(その3)

IoTが立派なバズワードへと成り下が…いや成長し、イギリスの名物料理がニシンパイやうなきパイではなく木苺パイとなってから早数年、主記憶1GBにGHz越えクワッドコア・おまけにWi-Fiと青歯もつけてお値段なんと\5k! Don't miss it!(通販番組並みの感想) というわけで(何がだ)、秋葉でRaspberry Pi 3 Model B (もちろん安い方w)や他諸々を買ってくる。

PCM5102A on Raspberry PI 3 model B

えっESP-WROOM-02はどうしたって? 今は元気にIPリモコンリレー装置として活躍中ですが何か。あと今更LLMNRレスポンダ公式化っておせーよ(苦笑) ラジーパイ絡みもあって結局Bonjour入れたしな。

閑話休題。余ってた8GBマイクロSDカードに公式からダウンロードしたRaspbianを頭からベタ書きしてラジーパイに食わせる。軟弱なんでもちろんGUIが使える方を。んでそれからやったことを適当に列挙。

  • Windows PCからヘッドレス運用したいのでxrdpとtightvncserverを拾う。
    sudo apt-get --purge install tightvncserver xrdp
    あと日本語キーボードがまともになるように先人の知恵を丸パクリ(苦笑)
    cd /etc/xrdp/
    sudo wget http://w.vmeta.jp/temp/km-0411.ini
    sudo ln -s km-0411.ini km-e0010411.ini
    sudo ln -s km-0411.ini km-e0200411.ini
    sudo ln -s km-0411.ini km-e0210411.ini
  • SDカード上にページスワップファイルを置くとか正気を疑いたくなるので止める。
    sudo dphys-swapfile swapoff
  • 要らん物(個人の主観です)は撤去。
    sudo apt-get --purge autoremove \
     bluej \
     chromium-browser \
     claws-mail \
     debian-reference-en \
     dillo \
     dphys-swapfile \
     epiphany-browser \
     geany-common \
     greenfoot \
     libraspberrypi-doc \
     libreoffice-common \
     libreoffice-core \
     minecraft-pi \
     netsurf-common \
     nodered \
     python-pygame \
     python3-pygame \
     realvnc-vnc-viewer \
     scratch \
     sonic-pi \
     triggerhappy \
     wolfram-engine \
     xpdf
    これで随分と軽くなって4GB以内に余裕で収まる。
  • シャットダウン完了タイミングが把握しづらいのでLED点滅の仕様を変更。
    sudo bash -c "echo dtparam=act_led_trigger=heartbeat >> /boot/config.txt"

まあこんなところかな。何だか大した内容でもないのに長くなったので今回はここまで。

拍手[0回]

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

フリーエリア

最新コメント

プロフィール

HN:
jjsuwa
性別:
非公開

バーコード

ブログ内検索

P R