Git Product home page Git Product logo

tinygobook's Introduction

基礎から学ぶ TinyGoの組込み開発

高砂正哲が執筆した「基礎から学ぶ TinyGoの組込み開発」 (C&R研究所) のサポートサイトです。 質問や誤記などがある場合は本ページの Issue もしくは Twitter で受け付けています。

書籍情報

各節まで含めた目次はこちら。

Twitter

Twitter に投稿する時の hashtag は #tinygo#tinygobook を使ってください。

よくある質問と回答

tinygo flash に失敗します

2 章 P.31 に従い (リセット x 2 で) ブートローダーに入れてから tinygo flash してみてください。 それでも改善しない場合は、 tinygo build -o out.uf2 のようにして uf2 ファイルを作ってから手動で書き込みしてください。

正誤表

誤記等を見つけた場合は、 Issue もしくは Twitter で教えてください。

注意

ネットワーク部 (RTL8720DN) のファームウェアアップデート方法の修正があるため必ず確認してください。 具体的には、

$ git clone https://github.com/Seeed-Studio/ambd_flash_tool

ではなく

$ git clone https://github.com/Seeed-Studio/ambd_flash_tool --branch JP

を使うようにしてください。

TinyGo と Go の組み合わせ

TinyGo Go 備考
0.31.0 1.21 - 1.22 net package が大幅更新 (※2)
0.28.1 1.19 - 1.20 Wio Terminal の動作について一部問題あり(※1)
0.27.0 1.19 - 1.20
0.26.0 1.18 - 1.19 書籍執筆時 Version (脱稿直前のリリース)
0.25.0 1.18 - 1.19 書籍執筆時 Version

※1
TinyGo 0.28.1 で Wio Terminal に搭載されている ATSAMD51 マイコンの Cache を有効化する変更が入り、 I2C などが一部動作不良となるケースがあります。 本件については 正誤表 に記載しています。

※2
TinyGo 0.31.0 で net や net/http package 関連が大幅更新されました。 この辺りについては後日まとめる予定ですが、さしあたりは 正誤表 を確認してください。

Demos

デモアプリケーションはこちら。 Wio Terminal + TinyGo 0.26 で動作を確認しています。

Wio Terminal Tracker

LIS3DH から得た情報を用いて、パソコン上の画像の傾きを制御する Demo です。

$ tinygo flash --target wioterminal --size short ./wioterminal/tracker/
   code    data     bss |   flash     ram
  54496    1500    6260 |   55996    7760

注意) -opt z 以外でビルドすると、I2Cデータの受け取りに失敗します

Gopher福笑い

十字キーなどを使って目と口の位置を自由に動かすことができる Demo です。 面白い顔を作って Twitter に投稿してください。

$ tinygo flash --target wioterminal --size short --opt 2 ./wioterminal/fukuwarai/
   code    data     bss |   flash     ram
 447876     356  180480 |  448232  180836

注意) 実行速度を高速化するため -opt 2 でビルドすることを推奨します

Chapter 7 ネットワークに接続する

サポートサイトにて、 chap07 のコードを公開しています。 以下のようにして chap07 ディレクトリに移動してから書き込むことができます。 ssid や password が必要となるコードについては P.235 を参考に設定してください。 TinyGo 0.26 以降は tinygo flash 時に --monitor を指定することが出来ます。 多くの場合、 minicom や Tera Term を使わなくてもうまくやり取りできるはずです。

$ cd chap07/

$ tinygo flash --target wioterminal --size short --monitor ./update_test/
   code    data     bss |   flash     ram
  57452    1528    9004 |   58980   10532
Connected to COM5. Press Ctrl-C to exit.
RTL8270DN Firmware Version: 2.1.2

各種リンク

著者紹介

about Gopher

The Gopher character is based on the Go mascot designed by Renée French.

tinygobook's People

Contributors

sago35 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

madou-sow

tinygobook's Issues

unsafe.PointerのP.89のサンプルの確認方法

P.89のサンプルコードを入力しました。ATSAMD51マイコンのレジスタを参照してSerial Numberを表示してくれると思うのですが?Windows11のパソコンで動かすとこんな感じです。
tinygo build .してみました。
c:\tinygobook\chapter030901>chapter030901.exe
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
ATSAMD51マイコンのレジスタを参照しているのでどうやって確認すればいいのでしょうか?Wio Terminal上で実行すればいいのでしょうか?どうやればいいのか教えて下さい。よろしくお願いします。

C言語からGoの関数を呼び出す時のコンパイルの仕方について

C言語からGoの関数を呼び出してみたかったので
P.96とP.97のサンプルを入力してmain.cをgccでコンパイルすると

akiyoshi@LAPTOP-JPBE28JN:/tinygobook/chapter031004$ gcc main.c
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function _start': (.text+0x24): undefined reference to main'
/usr/bin/ld: /tmp/ccQeVZ4a.o: in function CPrint': main.c:(.text+0x1a): undefined reference to goPrint'
collect2: error: ld returned 1 exit status
akiyoshi@LAPTOP-JPBE28JN:
/tinygobook/chapter031004$

このようにエラーになりました。

インターネットでC言語からGo言語の関数を呼ぶ方法というのを見付けました。
https://blog.takuchalle.dev/post/2020/05/14/call_go_function_from_c/
こちらによると、Goでコンパイルしてから、gccでコンパイルしているようです。

P.96のmain.goとP.97のmain.cをコンパイルして実行する、コンパイルの仕方を教えていただけないでしょうか?
よろしくお願いします。

P.33 Hello Wio TerminalがWSL Ubuntu20.04でエラーになります

TinyGo本、コマンドが多かったのでWSL Ubuntu20.04の環境で実行していましたがP.33 Hello Wio Terminalで
akiyoshi@LAPTOP-JPBE28JN:~/ledproject$ tinygo flash --target wioterminal
error: failed to flash /tmp/tinygo2745262142/main.uf2: unable to locate device: Arduino
とエラーになりました。

Windowsで実行すると問題なくできました。Linux環境で実行する場合はどうしたらよいでしょうか?教えていただけるとありがたいです、よろしくお願いします。

付録のXIAO RP2040を使用したデバッガーは、「基礎から学ぶ組込みRust」の環境でも使用できますか?

付録のデバッガーを作ってみようかと思っています。「基礎から学ぶ組込みRust」を持っているので「基礎から学ぶTinyGoの組込み開発」を読み終えたら、「基礎から学ぶ組込みRust」を読み直してみたいです。

XIAO RP2040を使用したデバッガーは、「基礎から学ぶ組込みRust」の環境でも動きますか?TinyGo本のデバッガーは、SWCLK、SWDIO、GNDの3本を使用していますが、Rust本の方では、XIAOにSWCLK、SWDIO、MCU_RESET、GNDの4本を使っています。

もし、おわかりになるようでしたら教えていただけるとありがたいです。よろしくお願いします。

TinyGo 0.28.1 で動作確認を行う

0.28 での以下の変更などにより動かないコードがあるかもしれない。
ので、いったん確認を行う。

  • reflect の追加により大幅なコード変更
  • 割り込みハンドラ内の heap allocation 禁止 (panic になる)
  • USB 周りのリファクタリング (少なくとも hid-joystick が動かない状態になってしまった)

2023/08/03 時点の動かない部分まとめ。

  • USB MIDI
    • import path の変更 ( → machine/usb/adc/midi ) が必要
  • I2C
    • cache 有効化による高速化で wait 時間が短くなりすぎている (↓ の enableCache() 削除 or wait 時間調整)
  • ディスプレイの PNG 表示
    • enableCache() 削除
  • tinyfont を使用時に問題が出る場合は、以下を実行して Version を下げてみてください
    • go get tinygo.org/x/tinyfont@34f5899f6c1e34aa6daa4e12e2b96a2ea370dff9

TinyGo 0.30.0 で動作確認を行う

TinyGo 0.30.0 で動作確認を行う。

少なくとも以下は読み替えが必要。

  • USB MIDI
    • import path の変更 ( → machine/usb/adc/midi ) が必要
  • ディスプレイの PNG 表示
    • src/runtime/runtime_atsamd51.go の enableCache() をコメントアウト
  • tinyfont を使用時に問題が出る場合は、以下を実行して Version を下げてみてください
    • go get tinygo.org/x/tinyfont@34f5899f6c1e34aa6daa4e12e2b96a2ea370dff9

TinyGo 0.29.0 で動作確認を行う

TinyGo 0.29.0 で動作確認を行う。

少なくとも以下は読み替えが必要。

  • USB MIDI
    • import path の変更 ( → machine/usb/adc/midi ) が必要
  • ディスプレイの PNG 表示
    • src/runtime/runtime_atsamd51.go の enableCache() をコメントアウト
  • tinyfont を使用時に問題が出る場合は、以下を実行して Version を下げてみてください
    • go get tinygo.org/x/tinyfont@34f5899f6c1e34aa6daa4e12e2b96a2ea370dff9

TinyGo 0.28.1 時点で存在した以下の問題は修正済み。

  • I2C
    • cache 有効化による高速化で wait 時間が短くなりすぎている (↓ の enableCache() 削除 or wait 時間調整)

TinyGo 0.31.2 で動作確認を行う

TinyGo 0.31.2 で動作確認を行う。

少なくとも net や net/http 関連は使い方が変わっている (従来のものも動くはずだけど) のでそのあたりのサポートが必要。
とても使いやすくなっているので、新しいやり方を使っていくのが良い。

それ以外は TinyGo 0.30 時点までの以下は読み替えが必要。

  • USB MIDI
    • import path の変更 ( → machine/usb/adc/midi ) が必要
  • tinyfont を使用時に問題が出る場合は、以下を実行して Version を下げてみてください
    • go get tinygo.org/x/tinyfont@34f5899f6c1e34aa6daa4e12e2b96a2ea370dff9
  • net および net/http は書籍記載のものも動くはずですが、今後は以下のサンプルを見ると良い

以下は TinyGo 0.31.2 で解消済み。

  • ディスプレイの PNG 表示
    • src/runtime/runtime_atsamd51.go の enableCache() をコメントアウト

P32 tinygo flashのflags

tinygo flash --target wioterminal --size short examples/blinky1とあるが、flagsはハイフン1つが正しい?
(ハイフン2つでも機能はしているように見える)

tinygo flash -target wioterminal -size short examples/blinky1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.