2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

カテゴリー

ブログパーツ

無料ブログはココログ

« TrueSTUDIOからEclipseへ乗り換える(その3) | トップページ | 夏休みの工作・ロボクライマーをインドアで遊んでみる »

2012年7月14日 (土)

TrueSTUDIOからEclipseへ乗り換える(拾遺)

今回は拾遺というとで、いくつかのトピックを取り上げます。

■浮動小数点演算について
普通にfloatやdoubleを使って演算する分には、FPUを使わないデフォルトの設定で問題ないようです。ただ、引数がfloatの関数にdoubleを渡したりすると、エラーが出ます。シェーキーのプロジェクトでは、fmod()にdoubleの変数を渡したときに起こりました。
「乗り換えガイド」に書いたように、FPUを使う設定にするとエラーはなくなります。理由はよくわかりません。

また、doubleの定義時に0以外の初期値を設定するとシリアルポートのボーレートがおかしくなると書きましたが、僕の環境でもそうならない場合もありました。どうも不思議ですが、やらないほうが無難でしょう。

■sprintfとsscanfのサンプル
サンプルプロジェクトを参考までに公開します。PA2がパソコンへの送信、PA3がパソコンからの受信でレベルコンバータを通してパソコンのCOMポートと接続します。ボーレートは9600bpsです。

プログラムは実数(10とか0.123とか)をターミナルから入力してリターンキーを押すと、"10 *2= 20"のように入力値の2倍をタイプアウトします。

ファイルサイズの関係で、srcフォルダのみ公開します。

「src.zip」をダウンロード


■使い勝手
商品であるTrueSTUDIOに比べると気配りが足りません。たとえば、修正したソースを保存し忘れてビルドしてしまい、デバッグしようとして初めて「保存してないファイルがあるがどうするか?」なんて聞かれてしまいます。わかってんならビルドのとき聞けよといいたくなります。まあ、ロハだからしょうがないかとは思いますが、このへんカスタマイズできるならなんとかしたいところですね。

■コードサイズ
ツールチェインが無償版のせいか、結構大きくなります。シェーキーのソフトはTrueSTUDIOでは約60KBでしたが、こちらでは1.5倍くらいのサイズになりました。
[Project]-[Properties]-[C/C++ Build]-[Settings]でToolchainタブをクリック、Arm Sourcery Windows GCC CompilerのOptimizationをクリックして、Optimize level を Optimize(-O1)に設定してビルドすると、少し小さくなって1.2倍くらいに収まりました。これ以外のレベルを選んでもあまり変わらないようです。

« TrueSTUDIOからEclipseへ乗り換える(その3) | トップページ | 夏休みの工作・ロボクライマーをインドアで遊んでみる »

ロボット作ろう」カテゴリの記事

管理人のページ」カテゴリの記事

コメント

はじめまして。
TrueSTUDIOが使えなくなってきたのでEclipseか何かに移そうと思ってこのブログの記事を使わしてもらっています。

一つエラーが出てしまってネットで検索しても解決できず、行き詰ってしまったので質問させてください。

乗り換えPDF v2に従って開発環境を構築したのですがLinkerが
   c:/program files (x86)/codesourcery/sourcery g++ lite/bin/../lib/gcc/arm-none-eabi/4.5.2/../../../../arm-none-eabi/lib/thumb2\libc.a(lib_a-init.o): In function `__libc_init_array':
   init.c:(.text+0x38): undefined reference to `_init'
というエラーを吐いて止まってしまいます。
もちろんLinkerのGeneralのところのチェックボックスはつけているのですが・・・

何か解決方法はありませんでしょうか?

こんにちは 管理人のササガワです。
ご質問のレポートを見ると、配列の初期化のリファレンスが受け入れられないようですね。どこかで配列の初期化に(text+0x38)という引数を持ってるところがあるんでしょうか?たぶん、そのような配列の初期化の仕方はtrueStudioではよくても、gccでは受け入れないのではないかと思われます。(スミマセン、僕も修行中の身の上、そんなにはっきりした答えはもってません)

僕はきわめて古典的に
 u_int8 Buff[100];
のように配列を定義して、初期化はforループでいちいちやってます。

ご参考までに

実機テストまではやってませんんが一応コンパイルがすべて通るようにはなったので報告させて頂きます。

原因はinit.cというファイルとその中に_init()という関数がなかったことにあるようです。
ProjName/src以下にinit.cを作って命令も何も書かない void _init(){}を入れたところエラーが無くなりました。

ありがとうございました。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1140145/46327754

この記事へのトラックバック一覧です: TrueSTUDIOからEclipseへ乗り換える(拾遺):

« TrueSTUDIOからEclipseへ乗り換える(その3) | トップページ | 夏休みの工作・ロボクライマーをインドアで遊んでみる »