記事一覧

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Em::Blocksを使ってfloat値のsprintf

リンカやコンパイラって???な私にとってMCUを動かす為にプログラムをちょいと書いたりしますが、IDEが無いとなんともなりません。

前記事にて、AC6 SystemWorkBench for STM32を入れてみたわけですが、細かい所が上手く設定できないがために、割と?使い慣れたEm::Blocks(EmBitz)に逆戻りなんだけれども、Em::BlocksでもGCCの設定等々わからない所があるので四苦八苦ってのがホントの所です。

debugとかも、Lチカdebugでオシロを見てちゃんと信号が出てるか、、、確認したりしています。
GDBとか、Linux環境で使えばまた違うんでしょうけど。。

んで、デバイスとして販売開始された頃、案外なお値段で入手したSTM32F410RBをEm::Blockを使用し鼻くそ程度のプログラムを書いてみているわけです。

とりあえず、今、ebayとかAliexpressとかでかなり安価に入手出来るタッチパネル、タッチパネルインターフェースICが付いたSPI接続のILI9341とゆう液晶パネルをdebug用表示器として使えるようにした所。

で、パルスを出力するプログラム中のFloat(浮動小数点数)な変数を表示させようと記述した所、、、、表示されません。
Twitter上で色々とアドバイスを頂いたのですが、(スタックのアライメント云々?)サッパリ理解できず、ldファイルを眺めるだけ、、。

Web上を徘徊してみると、Em::BlocksのWizard使って生成されるプロジェクトのGCCのライブラリにはNewlib Nanoが使用されているご様子。
「NewlibNano float」などの検索ワードで調べてみると、Cypressのフォーラム内のsprintf bug in PSoC Creator 3 with 5LP and formatとゆうページにぶち当たり、よくよく読んでみると、

The Newlib-nano libraries do not include floating point support by default.
Newlib-nanoはデフォルトでは浮動小数点をサポートしてません。

との記述。
解決方法はCypressのPSoCクリエーターの物ですが、設定次第ではなんとかなるご様子。

更に調べてみると、同じくCypressのPSoCクリエーター向けの記述なのですが、Floating-Point Support for PRINTF and SCANF in GNU ARM Compiler - KBA89724とゆうのを見つけました。

この記述によると、LinkerOptionにて、

-u _printf_float

を追加するようです。
あとheepサイズの変更、も。

基本的にGCCをEm::BlocksもPSoCクリエーター(AC6)もGCCを使用しているのでもしかしたら?と思いEm::BlocksのProject build option内のLinker settingタブ内のOther option内に上記を追加。
もちろん当てずっぽうです^^;

heepサイズの設定はしてませんが無事LCDパネルに表示させることが出来ました。
EmBitzのLinker settingタブ内のLinker flag内にはUse float printf with Nano-branchとゆう設定項目が有り、EmBitzの場合はこの項目にチェックを入れれば良いんだろうと思います。

printfのfloat対応オプションを選択すると、ROM部分に書き込まれるプログラムサイズが数kByte増えます。

きちんと計算されているかの確認のためにsprintfをfloat対応させて表示出来るようにしたのですが、表示自体ができなくとも、他の変数を使ってきちんとした数値が計算されているかの確認はしていてちゃんとMCU内の数値が正しく計算されているかの確認は取れてました、が、表示してみると、より解りやすいですね。

それにしても組み込み用のマイコンがCで書けるのは有り難い事ですし、また、ROM,RAMの容量も大きく、速度も速いので私ごときのテケトープログラムでも、容量気にせず書けたりするようになったこの時代。凄いですね。。












スポンサーサイト

コメント

コメントの投稿

非公開コメント

プロフィール

akirahitosi

Author:akirahitosi
タイトルの通り個人的な備忘帳です。
使用しているMCUはSTM32F4とPSoC5LPなどなど。
自分が使う機能で、Web上の記事で参考にさせて頂いたページ等々を残しておこうとしてるので、このブログの記事のみでは、「できる」ようにはならないのでは?と思います。

最新コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。