STM8S103F3P6ボード(その10)

まだOLEDとSTM8Sで戦っている。

(でもときどきよそ事を始めたりもする)

引き続き、やってることをメモ。

 

github内のSduinoの様子を確認したら、つい先日I2C.cが更新されていた。

詳細は元のところを見た方が早い。

 https://github.com/tenbaht/sduino

数字が一つ変わっただけ。でもこれのおかげで状況がガラッと変わった。

 

さっそく自分のライブラリフォルダにあるI2C.cを書き込み直してコンパイルしたら、以前のエラーは出なくなった。

やれやれと思ったのもつかの間、出てきたのは以下のエラーメッセージ。

 最大8192バイトのフラッシュメモリのうち、スケッチが5646バイト(68%)を使っています。
 最大1024バイトのRAMのうち、グローバル変数が1141バイト(111%)を使っていて、ローカル変数で-117バイト使うことができます。
 スケッチが使用するメモリが足りません。メモリを節約する方法については、以下のURLのページを参照してください。 http://www.arduino.cc/en/Guide/Troubleshooting#size
 ボードSTM8S103F3 Breakout Boardに対するコンパイル時にエラーが発生しました。

 「ファイル」メニューの「環境設定」から「より詳細な情報を表示する:コンパイル」を有効にするとより詳しい情報が表示されます。

…という、今度は非常にわかりやすい内容。

わかりやすいけど、これには悩んだ。

 

STM8S103FはRAMの領域が1KBしかない。単にこれを超えたもんだから書き込めないという事。

一応、Arduino本家でスケッチのサイズを小さくする方法を確認してみた。

 https://www.arduino.cc/en/Guide/Troubleshooting#size

でもコードを浮動小数点から整数にするか、いらない#include文を削除するかと言われても、どうしたらいいんだか。

 

調べてみるとArduinoのメモリについては、いろんな人が検証している。

なかなか興味深かったのが以下のブログ。

 https://www.mgo-tec.com/blog-entry-arduino-esp8266-ram-size.html

とてもわかりやすくて参考になりました。上記内のリンク先も必読。

ただ、今戦ってるのがSTM8なんで、またこれとは別の問題があるんだな…。

自力じゃ解決は難しそうなんで、こうやってぐだぐだ悩んでる間にまたライブラリが更新されることを期待します。(結局他力本願)

STM8S103F3P6ボード(その9)

先日の、Sduinoでいろいろコンパイルしてみる続き。
STLファイルを作っては3Dプリンタに出力してる間に、ESP8266と戯れたりSTM8のボードに戻ってきたりと忙しい。
実はESP8266で上手くいかなくなって悩んでいるので現実逃避中…なんだけど、こっちも上手くいってない。

とりあえずやってみたことをちょこっとだけどメモっとく。

 

先日はLチカのみだったので、次はわかりやすくディスプレイに文字とか表示させてみようと考えてた。

以前のSDCCではNOKIA 5110ディスプレイを使って表示できたけど、Sduinoのライブラリを見てたらSSD136の乗ったOLEDで文字とか表示させることができる。
 https://tenbaht.github.io/sduino/api/Mini_SSD1306/
ただ、メモリがとにかく小さいので、表示できるものに制限がある。
サンプル画像でも、下のほうが崩れてるし。

 

でも上記では一応使えてるんだから、自分の環境でも問題ないはず。

と、思ってArduino IDEからMini_SSD1306のサンプルスケッチを開いてコンパイルしてみたところ、
 /home/neko/.arduino15/packages/sduino/hardware/stm8/0.3.3/libraries/I2C/I2C.c:398: error 20: Undefined identifier 'TWDR'
 exit status 1
 ボードSTM8S103F3 Breakout Boardに対するコンパイル時にエラーが発生しました。

と、エラーになってしまう。

 

なんかスケッチが間違ってるとかそういう感じじゃなさそうだったんで、一度以前のBlinkスケッチを開いてコンパイルしてみたところ、これもエラーになった。

なのでもう一度リセットして、Arduino IDEも再起動、USBも接続し直したところ、コンパイルできた。

しかしMini_SSD1306はやっぱりコンパイルできないまま。接続は関係なさそう。

 

エラーコードで検索してみると、「Undefined identifier」は識別子が未定義とのこと。やっぱりスケッチが間違ってるんだろうか?

TWDRを定義してるところを探すと、確かにI2C.cの398行目に最初に出てくる。

うーん、どうしたもんかな。でも気になってしかたないんで、もう少し自力で調べてみることにする。

(とかやってるうちに、ライブラリが更新されないかなあ)

STM8S103F3P6ボード(その8)

Sduinoの話、続き。やってることをメモし続ける。


Ubuntu上でSTM8ボードをArduino IDEに接続して使おうと思ったら、コンパイルは問題なかったが認識されないのでスケッチを転送できなかった。
ttyUSB0のパーミッションについては以前対策したのに、何で??と悩んでたら、そもそもttyUSB*が出てこない。
確認してみると結局ST-Linkのドライバは必要かも…と言う感じで、普通のArduinoのようにttyUSB*は関係なかったらしい。
(メインのドキュメントにはまだ記載がないけど、GitHubの修正項目には書いてある)
この辺りまでは前回やったこと。

 

いじりまくってごちゃごちゃしてきたので一度Arduino IDEからSduinoを削除してから、もう一度インストールしてみたりとさらに悩んでたら、エラーの内容に気付いた。
書き込み時のエラーが、
 libusb: error [_get_usbfs_fd] libusb couldn't open USB device /dev/bus/usb/003/002: Permission denied
 libusb: error [_get_usbfs_fd] libusb requires write access to USB device nodes.
 Could not open USB device.

になってる。権限の問題だろうか。

 

初心に戻ってSduinoのマニュアルを再確認。フラッシュツールについての記述を見つけた。
 https://tenbaht.github.io/sduino/hardware/flashtool/
まだまだ発展途上なんで、マニュアルも新旧入り乱れてる感じ。でも参考になる。
「Installation for Linux」から、下記の文章を/etc/udev/rules.d/99-stlink.rulesで保存する必要があるとわかった。

 # ST-Link/V2 programming adapter

 # ST-Link V1, if using a STM8S discovery board
 # important: It needs a special entry in /etc/modprob/blacklist
 ATTR{idVendor}=="0483", ATTR{idProduct}=="3744", MODE="0666", GROUP="plugdev"

 # ST-Link/V2, the china adapter with the green plastic housing
 ATTR{idVendor}=="0483", ATTR{idProduct}=="3748", MODE="0666", GROUP="plugdev"

 

今度は「udevって何?」と思ったけど、昔いじった覚えがあるな。デバイスの抜き差しを管理してるやつ(?)。
ttyUSB*がまったく関係ないわけではないのか、やっぱり。
rulesファイルの内容が準備されてるということは、やっぱこれ入れないといけないんだろうなあ。
でも自動インストール時についでに入れててくれないかな、と思ったので、一応確認したらフォルダは空っぽ。

 

なのでファイルを作成。いつものnanoエディタ。
 $ sudo nano /etc/udev/rules.d/99-stlink.rules

これで念のため再起動して、再びArduino IDEを起動。ST-LinkでSTM8を接続して書き込み。

今度はうまくいった。

記念に撮影したけどよく見えない。でもまあ、一応LEDはちゃんと点滅してるんです。

 

結局まだフラッシュツールは手動でファイルを作る必要があり、後は自動でインストールできる。
トラブルがあったときにわかりにくいから、自動インストールはちょびっと不安が残った。
しかし最初にエラーになったときにUSBのドライバにこだわりすぎたのはあんまり良くなかった。よくマニュアルを読めばわかったことだったはず。

 

でもこれで、STM8へのコンパイルや書き込みが楽になった。

使えるのがC言語のみだから不具合はあるかもだけど、引き続きまだまだ遊べそう。

Sponsered Link