わがロボットの譜

千葉工業大学、総合工学研究会所属の者です。とりあえず、二足歩行ロボット作成日誌です。

スポンサーサイト

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

PageTop

STM32F4の開発環境構築(本当はこれが本編です)

今日もちまちまとやっていきます。

さて、今までやってきたことですが、結果的にビルドを通るようにしたものの上手く行かず。
やってらんねーよ!

この前までのブログ記事なんてなかったんだ!

ってことでまぁ初めからこうなるだろうと予想していたAtollicStudioを使う方法をば。

STM32F4 Discovery を Eclipse で開発 を尋常じゃなく参考にしました。


基本みながらやればできますがが、いささかわかりにくかったところを。

プロジェクトの設定でコピペしてくるのは、Librariesとsrc、stm32f4_flash.ldです。

4) spirintf()云々は、全然理解できなかった&別にsprintfを使いたいわけではないのでスルー。
zylinのデバッグ環境も設定画面がエラーと言われ開けずスルー。
gdbは別もスルー。

いいのかこんなんで…


とりあえず自分は
arm-none-eabi-hogeと世間ではなっているらしいところが、
arm-none-linux-gnueabi-hogeとなっていたので、
プロジェクトの設定 → C/C++ビルド → 設定 から、すべてのコマンドを全力で修正。

良からぬエラーが出るので、srcの下にある、printfも削除。(もとの作成時に作らなくてもよかった)
なんだかわからないアセンブリのエラーも華麗にコメントアウト!
/* Call static constructors */
// bl __libc_init_array



無事コンパイルできました。
本当にありがとうござます。


書込方法は、LinuxでもST Linkが使えるということで、
STM32 Value Line DiscoveryをLinuxで開発する(2) を参考にさせてもらいました。

自分はバーション2の方を使って見ました。

バージョンの違いなのかビルドの方法が違ったのでメモ。
解凍したstlinkフォルダ下で、
./autogen.sh
./configure
make
を叩けとのことです。
まぁREADMEに書いてあるんですけどね。
未来の自分が英語を読み直さなくても済むように(

終わったら、基板を接続した上で
sudo ./st-utils
で起動します。

初めスーパユーザで実行してあれ?できないぞ?となってしまったのでご注意を。

起動後の使い方はまんま真似しました。

少々面倒。きっとなんとかなるのだろうけどそんな手間ではないのであまり気にしていない。
でも、なんとかしたいなぁ。






とりあえずサンプルをパクって、LED制御までをやってみた。
IO1つにも設定が多すぎてなんだか冗長な感じがしてしまいますが、気にしたら負けでしょう。


で、毎回ここら辺の設定するのが面倒だなーと思ったので、テキトーに対処。

コピペした中にあったすべてのヘッダをプロジェクトの外部にひとまとめにする。
で、パスおよびシンボルのインクルードパスはそこを参照するだけに。
stm32f4_flash.ldも外に退避。
プロジェクト下には、
元のsrcフォルダと、ドライバ用のソースフォルダをまとめた、driver_srcだけが有る状態に。

とりあえずここら辺で、ファイル → エクスポート → ファイル・システム
で、プロジェクト全体をテキトーなところに出力しておきます。

あとは今後、新規プロジェクト作成してから、ファイル → インポートでとりこめばよいだけ。


ものすごーーーーーーくとりあえずですが、使えるようにはなりました。
さてこれからどうして行こうか。


そうだ、最後にもうひとつ、C++プロジェクトで作成して、mainもcppですが、問題なくいけるようです。
これでAtollicStudioでは出来なかったC++での開発ができるということです。

要らない人にはでっていうという問題ですが;

PageTop

STM32F4の開発環境構築(3)

今日もちまちまやっていきます。

機能の続きで、まずはワークスペースの作成。

とりあえず素直にホームフォルダにstm32_workspace フォルダを作成。
その下に、STM32F10x_StdPeriph_Libをコピペして、workspaceフォルダを作成。

インストールはもうすでにしてあったのでとくにやることなし。
テキトーに指示に従ってればいいだけです。

起動時にでてくるワークスペースの選択で、~/stm32_wrokspace/workspaceを選択。


ここからはEclipseの操作。

・ ヘルプ → 新規ソフトウェアのインストールでcdtをインストール。
すでに導入済みなのでスルー。

・ GCC Cross Compiler Support インストール
使用していたEclipse が indigoだったので http://download.eclipse.org/tools/cdt/releases/indigo にURLを変更。CDT オプション・フィーチャー → C/C++ GCC Cross Compiler Support をインストール。

・ STM32用のプロジェクトの設定
ファイル → 新規 → C++プロジェクトを選択
プロジェクトタイプ 実行可能 → クロス・コンパイラー プロジェクト → Cross GCC を選択。
プロジェクト名も素直にTempleteにしておいた。
ここで完了ではなく次へを選択。
Tool command prefix に arm-none-eabi
Tool command path に CodesourceryBenchのbinフォルダを指定。
自分の場合は /home/taki4416/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin
完了を押してプロジェクト作成。

・ アセンブラの設定
プロジェクトを右クリックしてプロパティ選択。
C/C++ビルド → ツール・チェーン・エディター
ツールの選択ボタンをクリック。
左の項目の中からGCC Assemblerを追加。
C/C++ビルド → 設定 を選択
左の選択肢からGCC Assemblerを選択。
コマンドを arm-none-eabi-as に書き換える。
さらに左の選択肢のGCC Assemblerの下にある設定を選択。
アセンブラー・フラグに -mthumb -mcpu=cortex-m4 と記入。多分こうなんじゃないかな(
次があるのでまだ閉じない。

・ C,C++コンパイラの設定
プロジェクトのプロパティ内。
C/C++ビルド → 設定
Cross GCC Compiler → その他 を選択。
その他のフラグに
-lm -mthumb -mhard-float -mcpu=cortex-m4 -mfpu=fpv4-sp-d16
と追記。あってるといいなぁ。
Cross G++ Compilerについても同様に。
まだ閉じない方がラク。

・ リンカの設定
プロジェクトのプロパティ内。
C/C++ビルド → 設定
Cross G++ Linker → その他
とりあえず、リンカー・フラグに
-T "${ProjDirPath}\startup_src\stm32_flash.ld" -lm -mthumb -mhard-float -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -Wl,-Map=linker.map -Wl,-cref -Wl,--gc-sections
と入れた。あってないだろう。おそらく。


今日はココらへまでで。

PageTop

STM32F4の開発環境構築(2)

この前はいろいろ関係ないとこみたけどいよいよやるぞー
と思っていろいろ見ましたが、いまいちわからない。

みんな大好き徹底入門はなにかセットになっててとりあえず使えるかもしれないけれども、
今後ちゃんと1ステップずつわかってないと厳しいと思ってので、地道にやっていきます。

参考にするのはここのサイト
また英語ですよ英語。

とりあえずテキトーに解釈しながらやってみます。

初めに必要なものを取ってくる。

・JRE、Eclipise ここはすでに導入済み。
入れかたは僕が書くよりeclipseでぐぐってくれればいくらでもいい記事が有ると思うので割愛します。

・STLink Utility
こっから取ってくるとリンクが貼ってあるのみ。
クリック → Not Found… 早くも波乱の予感ですよ。
とりあえず、STLink Utility で検索してそれらしいものと出会えたのでダウンロード。
なるほどWindows用と。ということで入れてません(

・ARM-based 32-bit MCU STM32F10x Standard Peripheral Library
これまたリンクが切れている。
とりあえず、ホームに行き、右のサーチタブを選択。
STM32F10x Standard Peripheral Library とぶち込んで、一番上に出てきたSTM firm wareをクリック。
ここでサーチに peripheral と入れて出会えました。ZIPフォルダのアイコンクリックでダウンロード。
たしか以前、製品ページのダウンロードタブからとってきたものもあったが、そっちはv1.01。
おそらく古いもののままだと思われるので要注意。製品によって使えるバーションが違うとかないよな(^_^;)

・STM32VLDISCOVERY firmware package
↑のFirmwareでサーチにdiscoveryと入れてダウンロード。

ダウンロードに時間がかかってしまったので今日はここまでか。


PageTop

STM32F4の開発環境構築

お久しぶりです.
いろいろありますが生きてます.

ちょっと時間ができ(?)ので,前々からやろうとしていたSTM32の開発環境の構築にトライ.

とりあえず必要なものをインストール.
eclipse & プラグインのCDTはすでに入っていたので,

次に入れるものはクロスコンパイラな模様.
で,みんな口を揃えてCodeSourceryG++推しなようなのでググって入れてみる.
が,本家ページ行くと今の最新版は違う名前の模様(?)
とりあえず Sourcery CodeBench Lite をダウンロードしてインストール.
Ubuntuだと.binが実行できず困った.
http://etherpod.org/blog/?p=1494
ここのブログに助けられなんとかインストール.

で,あれだろ?後はオプションつけてコンパイルすれば俺の勝ちだなと思ってみるも,
全然オプションがわからない.

とりあえずAtollic true stdio という開発ボードが推してる,ツールを入れてmakefileを作成してみる.
オプションがすごい量.もちろんサッパリわからない.
一つひとつ地道ーに見てみます.

これを機に積んであったGNUmakeも読んだという気合の入れようですよ。
わからないということがわかっただけでしたが。

オプションの記述は
http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
http://www.sra.co.jp/public/sra/product/wingnut/ld/ld-ja.html#SEC_Top
ここらへんを参考にしてみた。本家はどこに書いてあるんだろう←

-lm
lはライブラリの名前の前にくっついて、ライブラリの読み込みをさせる。ってことでm.aを読み込んでる。
m.aは数学ライブラリ。

-mthumb
正直良くわからない。thumbコードにするぜってオプションなのか?
とりあえずデフォルトが32bit長の命令なのを、16bitにしてるんじゃないかと思っている。
浮動小数点演算の高速化なんて記事もみつけた。ここらへんは今後検証したい。

-mhard-float
ハードウェア小数点演算を使いますよ。でしょうどうみても。これは設定画面で選択した。

-mcpu=cortex-m4
どうみてもCPUの選択。

-mfpu=fpv4-sp-d16
ハードウェアで小数点演算を行う場合の、小数点演算ユニットの種類の選択。
まぁ、作成されたコードがfpv4-sp-d16と書いてあるので、きっとこれがのってるに違いない。

ここから下はリンカに渡すオプションな模様。まとまった資料に出会えなかった。
多分ココらへんは必要ないのではないか?
-Wl,--gc-sections -T$(LINK_SCRIPT) -static
http://blog.kmckk.com/archives/2601869.html
うーん、GCみたいなもの…?まぁ要らない関数を分けてくれますと。
後ろについてるものはもうね。ほら…なんですかね。-staticは静的リンクってこと?
LINK_SCRIPTは別の行で指定されている。デフォルトの挙動ではなく他のスクリプトを実行している。

-Wl,-cref "-Wl,-Map=$(BIN_DIR)/hoge.map"
クロスリファレンステーブルを出力。で、出力場所を変更してるってことか?
全然わからない。

-Wl,--defsym=malloc_getpagesize_P=0x1000
グローバルシンボルをつくり、絶対アドレスをその値とすると。
0x1000がはどの部分の絶対アドレスなのかわかれば少しは試合になるんだろうか。



http://d.hatena.ne.jp/suikan+blackfin/20101202/1291297872

を参考にするかぎりリンカ回りは要らなそう。
他にいろいろ出力するのはなにか別の用途なんだろうか。


とりあえず根本て的な仕組みを理解していないので、なかなかしっくりこない。
とくにリンカ。


なにか勉強するのに良い物はありませんかね。
一体全体どういう本を読んだらいいのかも全然検討がつかないという…

大夫ハナシはそれてしまったけれども、長くなるのでこのぐらいに。
しばらくはちょくちょくやれそうなので、続きはおいおいやっていきます。

PageTop

Armadillo-500でなんとかC++を


Armadilloは素晴らしい。サイト行けばたくさんの情報が引っかかる。

がしかし、自分みたいな情弱ゆとりには多すぎる情報を扱うのは大変なのです。


ということで、C++が使えるようになるまでのなんやかんやを忘備録として書いておく。



とりあえず、デフォルトの設定を色々変更する方法もわからないので、デフォルトの環境をベースに行きたい。
が、そもそも出荷状態ではライブラリがないとかで実行不可能。

で、まぁライブラリを突っ込みたいわけだけれどもなかなか厄介。
ベースになるファイルはすべてRAMディスクになってて、突っ込んでも次の起動時には消えてしまう。
サイトのHowToにある方法で実行出来なくはないのだけれども、使う用途としては、元のファイルに入れたい。

みたいな感じに俺は受け取った。いろいろ調べた。
最終的にそういうシステムがどうなってるのかは正直わからない(
が、以下の手順でいける。。


atmark-dist の下の/romfs/usr/lib に必要なものをぶち込む(stdlibc++)
atmark-dist 直下で make image

/images/ にできた、romfs.img を以下のコマンドで書き込む
hermit download -i romfs.img -a 0xa0220000

ここでの 0xa0220000ってのは書き込むリージョンの先頭アドレス。
Armadillo-500の場合、romfs.imgを書き込むユーザーランド領域が13.75MBなので、
それを上回る場合は圧縮されたromfs.img.gzを書き込む。
ここらへんのアドレスと領域のサイズはソフトウェアマニュアルで確認可能。

書き込み終わったら立ち上げ直せばok.



わかってしまえば簡単な手順だが、いまいちまとまったのに出会えず、
また仕組みも理解していないので大夫苦戦した…

このくらいさらっとできるようになりたい。。


PageTop

symbol cout could not be resolved


eclipseのcdtを使おうとするとだいたいこいつにお目にかかる。

今回環境をUbuntuに変えたので、またお目にかかったわけですよ。


で、ハイハイあれでしょ?パスでしょ?とか言って
C/C++ 一般のパス及びシンボルにg++のiostreamやらがあるパスを通すわけですよ。


で、もうすごいドヤ顔でインデクサのリビルドのプログレスバーを眺めてたりするわけですよ。
でね、終わったの確認してね、軽く腕まくりとかしてやるかみたいなオーラを全力で出してたわけです。



しかし、依然として symbol cout could not be resolved と…
下の行見てみてもType 'std::string' could not be resolvedとか出てたりするわけです。

もうパニックですよ。とりあえずもう一度インクルードパスを確認しなおしたりしたり。




で。頑張って英語のフォーラムを漁ってみたりしたものの解決方法がよくわからない。
インデクサーの設定はきちんとしてそうだしな…と。

というわけで色々と格闘。。
最終的になんとかなった。


プロジェクトを右クリック、インデックスから未解決インクルードの検索を選択。
いろいろでている。とりあえずiostreamを見てみる。
bits/c++config.h とかなにそれ?という状況らしい。
テキトーに bits/c++config.h で検索をかけて、それらしきフォルダのパスをパス及びシンボルで設定。

できたーーー。
ついでにstringの方もOKな模様。同じパスが問題だったのかな?


今回は割と悩んだ。ここに書いておくことで、誰かの役にたてば。

PageTop

ramdisk使う


ramdisk使用する上での疑問点。

UbuntuでもRAMdisk利用(とりあえずFireFox高速化)

ここを見ながらramdisk作成はした。


でさ、起動時にramdiskに特定のファイルを読み込むようにしたいわけですよ。
で、いろんなサイトにいろんなやり方が書いてあった。

が、僕みたいなゆとりには小難しくてよくわからなかったので、
結局、rc.localに
cp -r /home/taki4416/.ramdisk-bk/* /mnt/ramdisk/
と書いておいた。

/*みたいな感じに書かなくてもいいオプションとかあるのかってのと、
どーして単純にコピーするだけではダメなのかという疑問。


PageTop

Ubuntu仕様記録4

いろいろやることがあって結局あまり使えていない。


とりあえず気分転換にテーマを変更した。
Myunityとgnome-tweak-toolを使ってみたけれども、
gnome-tweal-toolのほうがいい感じ。


他、やっていなかったので端末の中に開くができるように変更。
nautilus-open-terminal を設定するだけ。簡単。



さて、本題はここから。研究で使う「armadillo-500」をインストール。

ソフトウェアマニュアルを読みながら進める。
いろんなパッケージを一括でインストールできるのか便利だな、とか思って実行したらいくつかエラーが、、

ググったら参考になるところが。
Armadillo-240の開発環境をubuntu上に構築
参考にしながら、以下のように変更。

「atde-essential-arm_9_all」
Depends: genext2fs (>= 1.3-7.1-cvs20050225), file, libncurses5-dev, gcc, cpp, binutils-arm-linux-gnu, cpp-4.1-arm-linux-gnu, gcc-4.6-arm-linux-gnueabi, libc6-arm-cross, libc6-dev-arm-cross, g++-4.6-arm-linux-gnueabi, libstdc++6-arm-cross, libstdc++6-4.1-dev-arm-cross, libgcc1-arm-cross, linux-kernel-headers-arm-cross

「libssp0-arm-cross_4.1.1-21_all」
Depends: gcc-4.6-base (>= 4.1.1-21), libc6-arm-cross (>= 2.3.5-1), libc6-arm-dcv1

「libstdc++6-4.1-dev-arm-cross_4.1.1-21_all」
Depends: gcc-4.6-arm-linux-gnueabi-base (>= 4.1.1-21), g++-4.6-arm-linux-gnueabi (>= 4.1.1-21), libstdc++6-arm-cross (>= 4.1.1-21), libc6-dev-arm-cross (>= 2.3.6-7)

その他必要なものは随時インストールしています。



シリアル通信ソフトが必要になってので、minicomをインストール。
設定はCtrl+A押してから p。


さてここからうまくビルドできるんだろか。時間がなくなったので、結果はまた今度に。。

PageTop

ubuntu使用記録3

当分はちょこちょこいじってるんじゃないだろうか。そんなかんじです。


とりあえず、IMEがマジでね。もうねって感じだったので、
mozcに変更。

いろんなサイト見たけれども、どこもパッケージが違った?
結局いろいろ動くまで入れてみたので、何が正解だったのかわからない。

Modified mozcと、IBUS Engine module for mozxと、Mozc utilitiesが最終的に入っている。
まぁとりあえず使えるようになった。変換はだいぶ改善された感じ。

ついでに一度ibusをscimに変えてみたのだけれども、
unityのdashでまともに打てないという問題があったので断念。

そしてAZIK入力という面白い存在に出会ったのでチャレンジ。
使いこなせる日は来るのだろうか。。

PageTop

ubuntu使用記録2

ただただひらすらに絵に描いたような備忘録です。えぇ。


とりあえずソフトウェアセンター。
skypeとかgimpとかchromiumとかテキトーにいれた。
本当はironを使いたかったのだけれども、chromeストアから面の
プラグインの導入がうまくできない。
この前iron入れたときはできてたんだけどな…

そして、evernoteを使いたい。が、本家ではLinux用はでてないのかー。
なにやらNixnoteというクローンがあるので入れてみる。
参考サイト

なかなかにいい感じ。ただちょっと、アカウントの同期の仕方がわかりづらかったのでメモ。
バーのツールから接続をクリック。アドレスとパスワードを入れる。
→ さらにまたバーのツールから、Evernoteと同期を選択。

機能は十分あると思うのだけれども、
立ち上げ直す度にアカウント情報を再入力しなきゃいけなくなってしまっている。
なにかいい方法ないだろうか。

それとtwitterクライアントは結局しっくりくるのに出会えなくて、
chromeプラグインのsilver birdをしばらくは使うことに。


もうちょっとがっつりいじって、便利に使いたい。

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