みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

Zen言語の構造体入門

Zen

はじめに Zen入門中の自分用の備忘録。 詳細はここにある。 使用するZenコンパイラのバージョンは0.8.20191124+552247019(2020/03/12時点のパブリックベータ版)。 基本 src/foo.zenとして次のような構造体を定義する。 pub const Foo = struct { a : u32 = 0…

Giant BoardをDebian GNU/Linux 9 (stretch)で動かす

Giant Boardが届いた。 このボードにはCortext-A5コアのATSAMA5D27-D1G-CUが搭載されている。 MICROCHIPによると、こういうものらしい。 The SAMA5 series are high-performance, ultra-low power ARM Cortex-A5 core based MPU devices. They support multi…

Bashスクリプトで複数のテーブルを組み合わせて使用する

はじめに タイトルいったい何のことか伝わらないと思うので。 いわゆる2次元配列っぽいことをしたいというか、要素数の異なる複数のテーブルを多重ループで回す感じ。 2次元配列が近いと思って調べたけど、自分のやりたいこととうまく合致しないかな。と。 b…

PlatformIO Digisparkを動かす

はじめに ShigezoneでDigisparkを購入したのPlatformIOで動かしてみる。 書き込みの時にコツがいるのでメモっておく。 プロジェクトの作成 作業用ディレクトリを次のように作成する。 $ mkdir -p ~/pio/digispark $ cd ~/pio/digispark このボードのCPUはATT…

ASF傘下に入ったNuttXをビルド

はじめに NuttXはASFのIncubatorプロジェクトへ採択され、リポジトリがBitBucketからGitHubに変更された。 今後はプルリクエストなどもGitHubで受け付ける。 ソースコードを取得 GitHubからソースコードを取得するには次のようにする。 $ git clone https://…

PlatformIO mbedのビルド時間を短縮するスクリプトを作った

はじめに 2020/3/6 追記 PlatformIOでframeworkをmbedにすると必要のない機能のソースコードもコンパイルするため、 ビルド時間がかなり長くなってしまう。 | Mbed for STM32 compiles toooooo long | mbed + PlatformIO = too long compilation これは度々…

ctagsのoptlibをつかってZen言語のタグジャンプを(少しだけ)快適にする

はじめに 前回の続き。 gtagsのPygments-pluginを拡張してZen言語のシンボルタグを抽出してタグジャンプできるようにした。 しかし、定義タグが無く、すべてシンボルタグとなるため関数のジャンプなどがちょっと残念。 Pygments-pluginはctags -xのコマンド…

GNU Global(gtags)+PygmentsでZen言語をタグジャンプする

はじめに 以前紹介した、Pygmentsを使用してGNU Global(gtags)の対応言語を増やしてみる方法を応用して、Zen言語のタグジャンプに対応してみる。 Pygmentsを更新 gtagsのPygments-pluginがPython 2にのみ対応となっているため、2系統に固定してPygmentsを更…

NuttXでZenのプログラムを動かす

今回はNuttXをライブラリとして使用する方法を応用して ユーザーエントリポイントを含むアプリをZenで作成しNuttXの関数を呼び出してみる。 ターゲットはSTM32F4Discoveryを使用する。 また、nshから呼び出せるコマンドをZenで追加したわけではないので注意…

PlatformIO AE-ATmegaを動かす

はじめに 秋月のATmega168/328マイコンボードキットをPlatformIOでLチカしてみる。 かなり昔に購入したので、使用するMCUはATmega168P。 プログラムの書き込みにはAVRISP mkIIを使用する。最近では純正品は入手が難しいっぽい。 PlatformIOの設…

Zen言語の文字列フォーマット入門

Zen

はじめに Zen入門中の自分用の備忘録。 詳細はここにある。 変数の内容を表示 基本 {}を使うと、変数の内容を表示できる。 const a: u32 = 1; std.debug.warn("{}\r\n", a); => 1 複数ある場合 const a: u32 = 100000; const b: u8 = 3; std.debug.warn("a =…

STM32F4Discovery向けのNuttXをClangでビルドする

はじめに NuttXは次のボードについてClangでのビルドに対応している。 nucleo-f446re nucleo-f4x1re stm32f746g-disco 筆者的によく使用するSTM32F4DiscoveryもClangでビルドできないか試してみる。 今回はclang-9を使用している。 clangの設定方法はここを…

PlatformIO nRF52840-DKをmbedで動かす

はじめに nRF52840-DK(pca10056)をPlatoformIOで動かそうとしたところ、 デフォルトのframework(arduino)ではGPIOのピン割り当てが思ったようにならなかった。 そこで、frameworkをmbedに設定して試してみた。 プロジェクト作成 まずはプロジェクトを作成す…

Ubuntu 18.04にaptでLLVM-9をインストール

はじめに LLVM 9環境をUbuntu 18.04で構築する。 google先生に聞いても手動で設定する方法ばかり見つかったので、aptでインストールする方法を調べた。 2020/1/8 修正 リポジトリの設定 $ sudo apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-to…

NuttXをnRF52840-DKで動かす

はじめに NuttXがnRF52840-DKに対応したっぽいので動かしてみる。 ARMのツールチェインの設定方法についてはここを参照。 J-Linkツールの設定方法についてはここを参照。 NuttXの作成 ソースの取得 $ git clone https://bitbucket.org/nuttx/nuttx.git $ git…

Longan nanoをUbuntu 18.04のPlatformIOでハロワ

はじめに Lチカが動いたのでシリアルでHello worldしてみる。 このハロワは失業と関係ない 今時の人たちはHello worldを「ハロワ」と略すらしい。 当時在籍した会社が潰れてハローワークにお世話になった経験がある筆者は、このワードからは悲壮感しか無い。…

Longan nanoをUbuntu 18.04のPlatformIOでLチカ

はじめに 安価なRISC-Vボードとして国内でも比較的入手が簡単なLongan nanoを入手した。 開発環境としては当ブログでもおなじみのPlatformIOに対応している。 国内で入手が容易なせいか日本語の情報も多いが、Windows環境での動作報告記事が多いので、ここで…

Yocto Project 3.0(Zeus)でラズベリーパイ4を動かす

はじめに 技適が通り、やっと国内で流通し始めたラズベリーパイ4が手に入ったので、Yocto Projectで動かしてみる。 発熱がすごいらしいのでファン付きのケースも同時に購入した。 構築手順 ソース取得 依存関係がいつの間にか改善されている。最小限の構成で…

bashでzenのサブコマンドを補完する

Zen

はじめに bashの補完機能にzenのサブコマンドを追加してみる。 2020/1/10 スクリプト修正 bash_completion bashの補完機能に独自のコマンドを組み込みたい場合は、/etc/bash_completion.d/以下にシェルスクリプトを追加する。 ここでは/etc/bash_completion.…

ZenとHiFive1 Rev.BでHello world

はじめに 前回ベアメタルでHello worldができたので、 新進気鋭の言語であるZenで実装してみる。 ただ筆者はZenのエキスパートではないので、もっと良い方法や、本稿に間違った情報があるかもしれない。 そういう場合は情報をいただければ。 ターゲットはHiF…

ベアメタルのHiFIve1 Rev.BでHello world

はじめに 前回ベアメタルでLチカは動いたので、今度はシリアルを動かす。 ホストPCの環境はUbuntu 18.04 UARTのポート HiFive1 Rev.BをPCに接続すると/dev/ttyACM0と/dev/ttyACM1が見えるようになる。 この内/dev/ttyACM0はデバッグコンソールとして使える。…

ラズベリーパイ3でYocto Project 3.0(Zeus)を試す

はじめに Yocto Project 3.0(Zeus)がリリースされていたのでラズベリーパイ3で動かす。 構築手順 ソース取得 $ mkdir -p rpi-zeus/layers $ cd rpi-zeus/layers $ git clone git://git.yoctoproject.org/poky.git -b zeus $ git clone git://git.yoctoproje…

ベアメタルでHiFIve1 Rev.Bを動かす

はじめに PlatformIOでHiFive1 Rev.Bを動かすで下記のように書いたので ベアメタルで動かしてみる。 標準のライブラリやヘッダは使っていないので、リンカスクリプトとスタートアップを書けば、 ベアメタルでもこのまま動くはず。 リンカスクリプト リンカス…

PlatformIOでHiFive1 Rev.Bをデバッグする

はじめに 前回はPlatformIOでLチカの実行までしたので、デバッグ方法調べる。 pio debug 特にplatform.iniを書き換えたりする必要もなく次のコマンドでデバッグを開始できる。 $ pio debug --interface=gdb Warning! Please install `99-platformio-udev.rul…

PlatformIOでHiFive1 Rev.Bを動かす

はじめに HiFive Rev.Bを入手したのでまずはPlatformIOでLチカする。 プロジェクトの作成 次のコマンドを実行し、PlatformIOのプロジェクトを作成する。 $ platformio init --board hifive1-revb 無印とはブートアドレスが異なるので、ボードもhifive1-revb…

ラズベリーパイ3の(ソフトウェア)PWMで回転サーボを動かす

はじめに 秋月電子でも入手可能な回転サーボ FS90R を入手したので動かしてみる。 環境はwarrior(Yocto 2.7)でmeta-raspberrypiを使用する。 環境構築 ここの「環境構築」を参照。 local.confに下記の内容を追加する。 IMAGE_INSTALL_append = " rpi-gpio" c…

ざっくりとALSAとPulseAudioの関係(の続きのようなもの)

はじめに 以前に書いた2015-04-04 ざっくりとALSAとPulseAudioの関係が未だにアクセスがあるようなのでちょっと振り返ってみる。 基本的な理解としては、 最終的に音を鳴らすのはデバイス デバイスを叩くためにデバイスドライバ(カーネルランド) サウンド関…

Yocto環境 callgrindでコールグラフを作成する

はじめに Linuxのユーザー空間のアプリをデバッグする際に、関数が実際にどのように呼び出されているのかを見たいことがある。 valgrindにはcallgrindというツールがあり、これを使うとコールグラフを生成することができる。 ターゲットにRPi3 Model Bを使用…

ラズベリーパイ3 warriorのglimagesinkがエラー

2019/10/09 追記 はじめに warrior(2.7)でcore-image-baseを作ってgstreamerで遊ぼうとしたら、次のコマンドでエラーが発生した。 $ export GST_GL_WINDOW=dispmanx ; export GST_GL_API=gles2 ; export GST_GL_PLATFORM=egl $ gst-launch-1.0 v4l2src devic…

Emacs shell-script-modeのフック

はじめに (を入力すると対応する)を自動で入力してくれるsmartparens-mode。 シェルスクリプトを書く時にも便利なので、init.elでshell-script-modeにadd-hookしたいと思ったが、 少しハマった。 shell-script-modeのフック 最初は次のようにhookを追加しよ…