2018年01月06日

Rust言語でSTM32マイコンメモ 2018

Rust言語でSTM32マイコンメモ 2018
はじまり
(1) 
2018年初頭。素晴らしいページを発見したのでひとまず。メモ
STM32F4Discoveryボード用
ARM Cortex-M 32ビットマイコンでベアメタル "Safe" Rust
https://qiita.com/tatsuya6502/items/7d8aaf3792bdb5b66f93

上のページの方の解説が丁寧で感激しました。

発見したばかりなのとLinux用なので、Windows上でも可能かどうか試してみようと
思います。

オリジナルの英語記事はSTM32F3Discoveryボードのようです。
https://japaric.github.io/discovery/02-requirements/README.html


ちなみに、
レジスタ直設定型の LEDチカチカ + 簡易プリエンプティブ型マルチタスク
で、コンパイル後の

FLASHサイズ1440バイト、SRAM 4バイト

だそうです。

これは試したい。


(2) 
    Rustで組み込みプログラム(Cortex-M)
    http://park11.wakwak.com/~nkon/homepc/rust_embedded/

    このページはNucleoでSTM32Cubeを使っている。
    そのうちためそう。

posted by Copyright (C) avrin All Rights Reserved. at 13:51| Comment(0) | Rust言語 | このブログの読者になる | 更新情報をチェックする

2017年12月31日

Rust言語をWindows上でインストールした時のメモ 2018

Rust言語をWindows上でインストールした時のメモ 2018

はじまり
msvc版とgnu版の違い
    「Build Tools for Visual Studio 2017」(C++)
    インストールサイズ比較
gnu版がおすすめでない理由
結論
    ただし (オイ
Rustのバイナリを小さくする方法
gnu版 Rustのインストール方法
    nightly版とstable版を入れ替える方法


はじまり
C++/Cの牙城に迫る次世代言語 Rust。

実行速度比較
Rust vs C言語
https://benchmarksgame.alioth.debian.org/u64q/rust.html
Rust vs C++言語
https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=gpp
Rust vs Swift言語
https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=swift
Rust vs Go言語
https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=go
Rust vs Java言語
https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=java

Go言語をインストールしてみて、検索中に引っかかって来た言語 Rust。 (オイ
Go言語よりも実行速度が速く、単独のバイナリサイズも小さい様だ。
ていうか、Go言語の単独バイナリが少し大きめか。(注1)

Rust言語を検索中に引っかかってきた言語 Swift。
RustとSwiftは似てる感じがする。
Swiftは未調査だけど、単独バイナリが小さいならRustに並ぶか、
スマホ系サポートで一気にRustを抜いてしまう可能性もある。
ということで、
Rust言語をWindows上でインストールしてみたメモ。

インストール方法
https://www.rust-lang.org/ja-JP/install.html

msvc版とgnu版の違い
おすすめは「msvc版」。
上記トップにあるrustup-init.exeを実行するとmsvc版になる。

「Build Tools for Visual Studio 2017」(C++)
ただし、 rustup-init.exeを実行する前に、
「Build Tools for Visual Studio 2017」(C++) (2013以降なら可)
をインストールしておく必要がある。
これのサイズが約5.5GBもあってorz orz orz orz なのは確か。
orz
https://www.visualstudio.com/ja/downloads/?rr=https%3A%2F%2Fwww.rust-lang.org%2Fja-JP%2Finstall.html
上のページの、一番下から2番めあたりにある。
直リンク
https://www.visualstudio.com/ja/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15

インストールサイズ比較
    msvc版のインストールサイズ 約7GB
         5.5GB : 「Build Tools for Visual Studio 2017」(C++)
         1.4GB : stable版 + nightly版
    gnu版のインストールサイズ 約1.4GB
         1.4GB : stable版 + nightly版
            インストール方法
            https://www.rust-lang.org/ja-JP/other-installers.html

gnu版がおすすめでない理由
インストールサイズが小さいので、はじめはこれを試しました。
しばらくして、以下のことがわかったので即座に使うのをやめました。

(1) Rustで書いたソース・ファイルをコンパイルした*.exeの実行速度が劇的に遅い。
        簡単な比較でpythonスクリプトよりも30倍以上低速だった。
        orz orz orz
        ありえない 遅さ。
        テキストファイル処理(ファイルI/O)が、mingw系なので遅いと推測。
        (BufReader, BufRead を使った上で)

        追記: よくあるフィボナッチ数列のベンチマークだと、
              gnu版は1/3強の速度しか出ていなかった。
(2) コンパイルされた*.exeのファイルサイズがデカい。
        Hello world プログラム($cargo build --release)で、
        gnu版   約700KB
        msvc版  約100KB

        (単独バイナリで700KBならGo言語に比べればマシなほうかもしれないが)

        ちなみに、main関数空っぽの場合、msvc版は数キロバイトの差しかないので、
        オーバヘッドが100KBくらいあることになる。

結論
よほどの理由がない限り、msvc版をインストールするべき。

ただし (オイ
ARMマイコンなのどのクロスコンパイルをするなどに特化した場合は、
gnu版でもmsvc版でも差がない可能性を否定できない。
というか試してない。
追記:
試したところ、ARMマイコン用のRustソースコードのコンパイル速度に違いはなかった。
なので、クロスコンパイル用途が主体なら軽量なgnu版でもいいかもしれない。

Rustのバイナリを小さくする方法
Windows上だと、Hello Worldで100KBくらい。
これを 151byteから2KBまで小さくする方法が以下の最後のほうのリンク先にある。
https://lifthrasiir.github.io/rustlog/why-is-a-rust-executable-large.html

151byte になるらしい。 邪道か。 未確認
http://mainisusuallyafunction.blogspot.jp/2015/01/151-byte-static-linux-binary-in-rust.html

以下を実際に試したら2KBくらいだった。
https://github.com/retep998/hello-rs/blob/master/windows/src/main.rs
    以下をgitで持ってくればできる。
    https://github.com/retep998/hello-rs

ベアメタルの組み込み用だとこういう使い方になるのだろう。

gnu版 Rustのインストール方法
最初はこれをインストールしたので、メモしておきます。(Windows10上)
インターネット接続が必要です。

(1) これをダウンロード。 保存先は多分どこでも可。
    https://static.rust-lang.org/rustup/dist/i686-pc-windows-gnu/rustup-init.exe
(2) 実行すると
rustup-init_start.png
    こうなるので 2) Customize installation を選択。
    (キーボードで2 を入力し、エンターを押す。)
(3) Default host triple? の質問に対して以下を入力してエンターする。
    (以下をコピペでもOK)
    32bitのパソコンなら
        i686-pc-windows-gnu
    64bitのパソコンなら
        x86_64-pc-windows-gnu
rustup-init_confirm.png
(4) 続いて Default toolchain? (stable/beta/nightly/none) には
    nightly と入力してエンター。
    (インストール後に、stableやbetaに切り替え可能)
(5) Modify PATH variable? (y/n) は y でエンター。
(6) 画面上に入力した内容が表示されるので、良ければ、 1を
    入力してエンターで、インストールが開始される。
    インストールには数分かかります。
(7) 以下のメッセージがでるのでウィンドウを閉じる。
rustup-init_end_message.png

(8) 環境変数 PATHにはRustの実行パスが追加されたので、
    MS-DOSコマンドプロンプトか
    PowerShell上
    でコンパイルが可能になっているはず。

    Rustツール群は
    C:/Users/[User name]/.cargo/bin
    に格納されているのでうまくいかない時は、PATH変数に上記が追加されているかを
    確認する。

(9) 動作確認
    適当なフォルダでコマンドラインを開いて
cargo new hello --bin
cargo run
と打ち込んで、 Hello World が表示されればOK。 nightly版とstable版を入れ替える方法 コマンドラインで、 stable版にしたいなら、
rustup default stable
nightly版にしたいなら、
rustup default nightly
現在の状態を確認したいなら、
rustup show
とする。
Default host: i686-pc-windows-gnu

installed toolchains
--------------------

stable-i686-pc-windows-gnu
nightly-i686-pc-windows-gnu (default)

active toolchain
----------------

nightly-i686-pc-windows-gnu (default)
(timeout reading rustc version)
上は nightlyとstableがインストールされていて、 今は nightlyがアクティブになっているという状態。 ちなみに、msvc版の時はこうなる
Default host: i686-pc-windows-msvc

installed toolchains
--------------------

stable-i686-pc-windows-msvc
nightly-2017-12-20-i686-pc-windows-msvc
nightly-i686-pc-windows-msvc (default)

active toolchain
----------------

nightly-i686-pc-windows-msvc (default)
rustc 1.25.0-nightly (6828cf901 2018-01-06)
なんかnightly版が2種類入ってる。 (注1) pythonやRubyをEXE化したものよりは断然小さいと思う。
posted by Copyright (C) avrin All Rights Reserved. at 22:38| Comment(0) | Rust言語 | このブログの読者になる | 更新情報をチェックする

RustのEXEファイルにWindowsのアイコンを埋め込むメモ 2018

RustのEXEファイルにWindowsのアイコンを埋め込むメモ 2018
Windows上で作ったRust言語のEXEファイルにアイコンを追加するメモ。
単に実行ファイルにアイコンをくっつけるだけです。

このページに従ってやっただけ。
https://github.com/FaultyRAM/windres-rs

必要条件:
msvc版のRust言語ツールがインストールされている必要がある。
https://www.rust-lang.org/ja-JP/install.html
(したがって最低限「Build Tools for Visual Studio 2017」(C++)がある状態)

Rustのバージョンは rustc 1.24.0-nightly。
1.22.1のstableでも多分OK。(未確認)



以下、新規の作業フォルダhello_dirを作る。
$ cargo new hello_dir --bin
$ cd hello_dir
hello_dirフォルダ内に以下の内容のbuild.rsファイルを作成する。
// hello_dir/build.rs

#[cfg(windows)]
extern crate windres;

use windres::Build;

fn main() {
    Build::new().compile("src/hello_dir.rc").unwrap();
}
srcフォルダ内に以下の内容のテキストファイルhello_dir.rcを作成する。 アイコンファイル名は HardwareChip.ico 。
1 ICON "HardwareChip.ico"
アイコンである*.icoファイルはアイコンエディタ等で適当に作成し、 hello_dir.rcファイルと同じフォルダ(src)に置く。 アイコンの大きさは、ひとまず64x64ドットくらいでいいんじゃないかと。 hello_dir/Cargo.tomlファイルの最後に以下の内容を追加する。
[target.'cfg(windows)'.build-dependencies]
windres = "0.1"
作業フォルダhello_dirで
$ cargo build
とすると、 target/debug/hello_dir.exe にアイコンが追加されている。 以上
posted by Copyright (C) avrin All Rights Reserved. at 22:36| Comment(0) | Rust言語 | このブログの読者になる | 更新情報をチェックする

2017年12月29日

Visual studio codeのメモ 2018

Visual studio code 1.19.1 が現在のバージョン。
以下vscodeと書く。
一年ぶりくらいにアップデートして起動だけしてみた。 :-)
Pros:
* プラグインの検索、インストール、無効化、有効化、
オプション設定のしやすさは非常に簡単で好印象だった。
* Vimのキーバインドは結構使えそうな感じ。 (^^)/
* プラグインの数(各種言語サポート)が増えていて、なんかスゴ。
* コンパイル時のターミナル統合感が自然で良い。
* IDE風に使えそうなんだけど、IDEじゃなくてエディタ。
* DVCS統合もできる。
* マルチプラットフォームなのは良いかも。

Cons:
* vscodeのウインドウにファイルをD&Dできない orz orz
* デフォルトで画面分割が縦分割になる orz
一応 ALT+ shit + 1 で切り替わる。
縦横混在の分割は?
* 各ウインドウのタイトルバーやタブ部分の大きさががやたらでかい。

違和感がある点:
ファイルを修正変更して未保存でvscodeを終了できる。
再起動すると変更中状態から始まる。
オプションで挙動の変更は可能と思われるが、ちょっとじゃないくらいの
違和感があった。 orz

(1) vscodeで未保存終了する。
(2) そのファイルを他のエディタで変更保存する。
(3) vscodeを再起動すると、 (2)内容が反映されていない。
orz
orz
どうしてデフォルトでそんな風にしたくなったのか謎。
マルチコミット対応なのかも。
きっとそうだ。
そうに違いない。













posted by Copyright (C) avrin All Rights Reserved. at 22:44| Comment(0) | その他 | このブログの読者になる | 更新情報をチェックする

2017年01月01日

2016年,2017年にかけてのメモ

2016年,2017年にかけてのメモ
海外だとクリスマス前後に新しいバージョンを出してくるイメージがある。

* Mecrisp stellaris FORTH (ARM)
    今では、死言語と思われる :D、 FORTH言語が ARM Cortex-M系に移植された。
    FORTHコンパイラ。
    ソース付き。GPL。
    http://mecrisp.sourceforge.net/
    2016-12-16 に最新版リリース。 mecrisp-stellaris-2.3.2.tar.gz
    もともとはMSP430系用に書かれたものだったらしい。
    マルチタスクもできる様だ。
    ダウンロード
    https://sourceforge.net/projects/mecrisp/files/?source=navbar
    年明けにでもブログメモにしようかどうか考え中。
    辞書内はサブルーチンコールの集積ではなく、直接アセンブラ(インライン化)を吐く様で
    速度はその分速そう。ANS FORTHに結構準拠している感じだ。
    WORDの仕様
        http://128.199.141.78/words.html
    Window上だとincludeが使えないので結構めんどくさい。
    Linux上だとそれなりに使えるみたい(未確認)
    かなり限定仕様だけど、SDカード(FAT32)をリードだけできるライブラリがあった。
    結構進化中の感じがする。

    全体的なドキュメント
    http://hightechdoc.net/mecrisp-stellaris/_build/html/index.html

    恐らく無料のARM Cortex-M系FORTH実行系としては、決定版と思われる。
    see コマンド: wordの逆アセンブラ出力コマンド
        seeコマンドが無いみたいなので逆アセンブル結果はみれていない。
        commonフォルダ内の
            disassembler-m0.txt
            disassembler-m3.txt
        のどちらかをマイコンに合わせてインクルードすれば、
        seeコマンドが使えました。

    ちなみに、2016/10 あたりまではSTMのCortex-M4ではさっぱり動かなかった。
    最近の版は試してない。
    LPC1114とかSTMのCortex-M3は動いた。

    NUCLEO-F411REで動作した: 2017/01 追記
        最新のv2.3.3でもダメだったので、試しにST-LINK-UtilityからFlash ROMの
        完全イレースを実行した後、HEXファイルを書いたら動いた。orz
        (^^)/
        方法:
            ST-LINK-Utilityのメニューから「Target」-「Erase Chip」、
            その後、HEXファイルを書き込む。

* C++Builder, Delphiの無料版が出た
   https://www.embarcadero.com/jp/free-tools
   経営が苦しくなってくると、無料版でシェアを確保しようとして
   失敗、言語部門を売り払う、買った先は無料版があっては儲からないので
   配布を中止する。
   というのをずっと繰り返えしている情景が「見えま〜〜す!」
   デジャブーなのか。
   せっかくなので、ありがたくダウンロードさせていただきました。:D

   でもホビーユーザは全員、 Visual なんとかの無料版に移行済みの気がしてならない。

* Great Cow BASIC (PIC/AVR)
    2016-12-16にv0.96がリリースされた。
    http://mpu.seesaa.net/article/399685697.html
    久々なのでお試し中。

* PMP (PIC Micro Pascal)
    2年ぶりで、 2016-12-15にv2.12がリリース。
    http://www.pmpcomp.fr/smf/index.php?action=downloads
    http://www.pmpcomp.fr/smf/index.php
    まだ、コンパイラにバグが多い感じだけど、なかなか立派なPascalの言語仕様なので
    このまま改良を続けてほしいと思うのだった。

* Jalv2 (PIC)
    2016年末に最新版 JALv2 2.4q6 がリリース。
    ぶっちぎりの超効率っぷりは健在だ。
    改良が続いている。
    http://mpu.seesaa.net/article/399685590.html

* LunaAVR (AVR)
   2016-12-31に最新リリース。
    http://avr.myluna.de/doku.php?id=de:download
    LunaAVR 2017.r1 (BETA) from 31.12.2016
    Windowsでコンパイルできないっぷりは今も健在だ。xD
    どうすんねん コレ。
    orz orz orz

* Pinguino (PIC)
    2016年に入って、ついにXC8コンパイラに対応してしまった様だ。
    http://www.pinguino.cc/
    開発者はMicrochipのコンパイラをかなり嫌っていたが、どう変遷したのかよくわからない。
    最新版のインストールに失敗したので放置中であはる。
    orz

* mbed OS 5 vs mbed2
    2016年にmbed OS 3 をポイっと捨てて
    mbed2とmbed OS 3 を統合するような形でmbed OS 5になったんだけど、
    mbed2のほうが統合のあおりを受けて当初バグにまみれた状態になったイメージ。
    現状、自分の場合Nucleoしか使ってないわけだけど、
    統合前に動いていたものが動かくなるわ、ツール類はコケて動かないわ、
    mbed cli(オフライン・コンパイル)は、バージョン切り替えるごとに
    200MByte(git版)もダウンロードしてくる馬鹿げた仕様(注1)になって、切り替えに膨大な時間がかかるわ、
    その挙句動かないし、元の版に戻すのもまた時間がかかるで、

    mbedはやる気がうせた。
    orz
    ちなみにmercurial版のイメージだと1GByte超えてた気がする。
    どんなくつりやねん。
    orz
    オンラインコンパイルは興味がないので書かない。
    で、
    mbed2は統合直前、または直後あたりの「rev.121」くらいが一番マシな感じだ。
    ということで、落ち着くまでにまだ半年から1年くらいはかかりそうな気がする。
    orz orz

    中の人が頑張っているのは知っているので、
    もっとガンバレ!

    (オイ


pip install -Ur requirements.txt

(注1) ダウンロード済みのファイルがあれば、2回目からはダウンロードしないんだけど、
      200MBもあるので切り替えに結構な時間がかかるのだった。 orz
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(2) | 雑多なメモ | このブログの読者になる | 更新情報をチェックする