はじめに
秋葉原ロボット部の有志で、milk-v duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。
Milk-v duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。
- CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
- 最高1 GHzで動作するデュアルRV64コア
- 64 MBのラム
- オプションのアドオンボードを接続すると10/100Mbpsの速度でイーサーネットに接続可能
最近、milk-v duoにTiny C Compiler(以降、TinyCC)が移植されましたので、milk-v duo上でCのプログラミングを行います。
TinyCCとは
Tiny C compilerはFabrice Bellardさんによって、開発されたCコンパイラです。
https://bellard.org/tcc/
現在は、レポジトリで管理されています。
https://repo.or.cz/w/tinycc.git
ディスカッション等はメーリングリストで行われているようです。
https://lists.nongnu.org/mailman/listinfo/tinycc-devel
TinyCCのインストール
母艦で、
https://github.com/robtech21/MilkV-Duo-Resources
から「milkv-duo-tinycc.zip」をダウンロードして、milk-v duoの「/root」に転送します。
その後、以下の操作により、tinyccをインストールします。
./install.shの後の記述は、インストールプロセスの表示です。
# unzip milkv-duo-tinycc.zip
# cd milkv-duo-tinycc
# chmod +x install.sh
# ./install.sh
1 . copy tcc, include/*, lib/* --> /usr/local/lib/tcc
2 . copy sysroot/include/* --> /usr/local/include/riscv64-linux-gnu/
4 . copy sysroot/lib/* --> /usr/local/lib/riscv64-linux-gnu/
5 . install success
#
プロンプト「#」が表示されたら、インストール終了です。
tccに実行権限を付与します。
# chmod +x /usr/local/bin/tcc
SSD1360 OLED用プログラムのコンパイル
母艦で、
https://github.com/armlabs/ssd1306_linux
をダウンロードし、milk-v duoに転送します。
Milk-v duo上で以下の操作を行います。
# unzip ssd1306_linux.zip
# cd ssd1306_linux
# tcc -r -o ssd1306.o ssd1306.c -I .
# tcc -r -o linux_i2c.o linux_i2c.c -I .
# tcc -o ssd1306 main.c linux_i2c.o ssd1306.o -I .
実行ファイルの「ssd1306」が生成します。
SSD1360 OLED上に文字表示
画面サイズを指定します。
# ./ssd1306 -I 128x64
画面をクリアします。
# ./ssd1306 -c
ダブルクオーテーションで囲まれた文字の表示を行います。
# ./ssd1306 -m "Low Level Meetup\n at Zoom meeting\n 0n Nov.4, 2023"
文字が表示されました。
以下にパラメータを記載しますので、いろいろ試してみてください。
-I oledの初期化 (128x32 や 128x64 、 64x48)
-c 画面消去 (行番号 あるいや all)
-d 0/ディスプレイオフ 1/ディスプレイオン
-f 0/ 5x7の小さいフォント 1/ 8x8の普通のフォント(デフォルトは小さいフォント)
-h ヘルプ
-i 0/ 正常な位置 1/ 上下逆さま
-l 表示したい行を指定
-m OLEDに表示したい文字列を指定
-n I2Cデバイスのノードアドレス(0,1,2..., デフォルトは 0)
-r 0/ 回転なし 180/回転
-x x 座標
-y y 座標
参考 https://community.milkv.io/t/milk-v-duo-i2c-ssd1306-with-user-space-driver/323