STM32F4-discovery
STM32F4-discoveryを購入。
Cortex-M4Fのベンチマーク用かな。
TOPPERS/ASPのcfg
seiryu$ export BOOST_DIR=/usr/local/include/boost
seiryu$ export LIBBOOST_SUFFIX=" "
boost_program_systemがないとエラーになるので追加する。
cfg/cfg/Makefile
■変更前
BOOST_LIBFILES = -lboost_filesystem$(LIBBOOST_SUFFIX) -lboost_program_options$(LIBBOOST_SUFFIX)
■変更後
BOOST_LIBFILES = -lboost_filesystem$(LIBBOOST_SUFFIX) -lboost_program_options$(LIBBOOST_SUFFIX) -lboost_system$(LIBBOOST_SUFFIX)
seiryu$ cd asp/cfg
seiryu$ make depend
seiryu$ make
問題なければcfg/cfgにcfgができる。
Boostのインストール
MacOSX v10.4.11 PowerPCにBoost1.4.0 をインストールする。
http://www.boost.org/
よりダウンロード。
seiryu$ chmod +x ./bootstrap.sh ./tools/jam/src/build.sh
seiryu$ ./bootstrap.sh --prefix=/usr/local --libdir=/usr/local/lib --with-toolset=darwin --without-libraries=math
seiryu$ ./bjam -j 3
seiryu$ ./bjam install
mathを除外しているのは、"long double"に未対応のエラーになるため。
bjamの"-j 3"はmakeと同じくジョブの数なので付けなくても良い。
SkyEyeを試す
前々から気になっていたSkyEyeをためす。
TOPPERS/ASPならデバイスマネージャと通信できるみたいだが、とりあえずブートをprintfデバッグしたいだけなのでTOPPERS/JSPで動かしてみる。
【環境】
skyeye-1.2.8_RC1
ターゲット:AZ9360MB
AZ9360MBに搭載されているNS9360とUART等の構成は同じNS9750がSkyEyeで対応しているみたいなので、NS9750の設定にして実行するが動かない。SkyEyeのログからみるにカーネルのputcをポーリングでしているところでループしている。
SkyEyeのNS9750まわりのソースコード見てみたが別CPU向けのファイルを持ってきただけでちゃんと対応していないっぽい。残念。
ARMのgcc環境を構築する6
諸般の理由によりまたgcc環境を構築する。
今度はgcc version 4.3.2。
手順は後日載せるにして、gcc version 4.3からgccをコンパイルするときにGMPとMPFRのライブラリが必要になっている。
http://gmplib.org/
http://www.mpfr.org/
GMPとMPFRはLGPL。ということは静的リンクになる組み込み用途の製品開発ではGPL/LGPLを避けたいなら使えないってこと?
GMPとMPFRはずしもコンパイル通るのかな...
GPLv3でもlibgccとかのライセンス除外規定は継続されるみたいだけど、GMPとMPFRは別だろうな...
http://www.fsf.org/news/2009-01-gcc-exception
GMPとMPFRいらないバージョンで作り直すか...
chumbyのシリアルポート接続成功
chumbyのシリアルポートにUSB-シリアル変換を繋いでTeraTermに表示をさせることができるようになった。
まず、chumbyをばらす。
http://journal.mycom.co.jp/articles/2008/07/21/cookingchumby03/index.html
を参考に液晶側から外した。
合成ゴムと液晶の間に、傷がつかないように柔らか目のモノを差し込んで接着部をはがす。
プラスチック製の耳かきを使ったらちょうどいい感じでした。
シリアルポートをつなげるのは↑ここ。
RXが2つあるが一つしか必要ない。
コネクタを用意したいところだが手持ちにサイズが合うのがなかったので4本の電線を繋ぐ。
基板の見えている側からハンダ付けしている。
基板中央に延びている紫と橙の電線はとりあえず今は関係ない。
全体はこんな感じ。(電線を三つ編みにしたら思ったより短くなった...)
電線の反対側はUART(TTLレベル)をUSBに変換する。
chumbyの公式サイトには、
http://www.superdroidrobots.com/shop/item.asp?itemid=335
を使えとあるが、輸入するのは面倒だし、日本で入手できる方が都合が良いので、秋月電子通商さんの
FT232RL USBシリアル変換モジュール [AE-UM232R]
http://akizukidenshi.com/catalog/items2.php?q=%22K-01977%22&s=score&p=1&r=1&page=
を使った。
FT232RLの1ピン(TXD)にchumbyのRX、5ピン(RXD)にchumbyのTX、7ピンと24ピン(GND)にchumbyのGNDを繋いでいる。3Vは未接続でUSBから供給するようにしている。
裏側はこんな感じ。
USBをPCに接続し、TeraTermで38400bpsに設定し、chumbyの電源ON。
無事にシリアルからの表示がTeraTermに出た。
今回使ったUSBシリアル変換モジュールのUSB側のドライバをchumbyで動かすことができるようなので、chumbyのシリアルをchumbyのUSBにつないでchumby上でデバッグができるかもしれない。
http://d.hatena.ne.jp/ISH/searchdiary?word=%2a%5bChumby%5d
ROMの書き換え2
AZ9360MBのROM書き換え後、リセット?していた問題について。
元々書き込まれていたユーザーアプリとデフォルトアプリのROMをチェック。
ELF形式のヘッダが付いていない。替わりに別の形式のヘッダが付いている。
http://www.ydktec.com/support/download/TOPPERS/az9360_toppers_jsp.zip
からAZ9360KIT/SDKのソースコードをダウンロードして斜め読み。
BOOTからユーザーアプリまたはデフォルトアプリをRAMにコピーする前にCRCチェックを行っている。
ヘッダ部にはCRCなどが入っている様子。
SDKの環境でROMを作るときにヘッダを付加しているはずなので確認したらWindows用ツール(itron/az9360/aplhdr.exe)が同梱されていた。
itron/az9360/make.sh
の89行目がツールを呼び出している処理。
公式版のTOPPERS/JSPで作成したROMをAZ9360MBでftp&updateコマンドで書き込むには、
・itron/az9360/aplhdr.exeとaplhdr.datを適当な位置にコピー(今回はcfgの下に置いた)
・Makefileからaplhdr.exe呼び出し。(下記*.bin生成の行追加とimage.binの生成の行追加。)
を変更すればいいはず。
# # 全体のリンク # $(OBJFILE): Makefile.depend $(ALL_OBJS) $(MAKE_KERNEL) $(OBJNAME).chk $(LINK) $(CFLAGS) $(LDFLAGS) -o $(OBJFILE) \ $(START_OBJS) $(TASK_OBJS) $(ALL_LIBS) $(END_OBJS) $(NM) $(OBJFILE) > $(OBJNAME).syms $(OBJCOPY) -O srec -S $(OBJFILE) $(OBJNAME).srec $(OBJCOPY) -O binary -S $(OBJFILE) $(OBJNAME).bin $(SRCDIR)/cfg/aplhdr $(SRCDIR)/cfg/aplhdr.dat $(OBJNAME).bin image.bin $(SRCDIR)/cfg/chk -m $(OBJNAME).syms,$(OBJNAME).srec \ -obj -cs $(OBJNAME).chk -cpu $(CPU) -system $(SYS)
生成されたimage.binをftpでアップし、updateコマンドでFROMへ書き込む。
DOS窓にて。
ftp 192.168.0.1 ftp> bin ftp> put image.bin ftp> bye
ディップスイッチ3〜5をONにしてデフォルトアプリで起動。
TeraTerm(UART1)にて。
A:>update prog image.bin
電源OFF→ディップスイッチ3〜5をOFFしてユーザーアプリで起動。
TeraTerm(UART1)に見慣れた表示が出力される。
task1 is running (001). | task1 is running (002). | task1 is running (003). | task1 is running (004). |
無事、sample1が動作するのが確認できた。