ロボットの最近のブログ記事
昨日はNHK大学ロボコンでした。
T-semiは予選リーグにおいて、岐阜大学には勝利したものの三重大学の自動マシンに完膚なきまでに叩きのめされ、残念ながら一回戦敗退と相成りました。
会場裏で話してた事を忘れないようにメモしておきます。
- モータをケチったらダメだよね。最低でも540。
- 相手の妨害をものともしない自動マシンをつくらないとダメだよね。
- じゃあ画像処理とか空飛ぶとかロードローラー……
- 大学の支援があるところはいいなあ……
T-semiは知能ロボコンに慣れすぎたせいか、作戦に詰めが甘い(敵がどう動くかをあまり考えない)のではないか、と感じる試合でした。
何はともあれ出場者および制作スタッフの皆様おつかれさまでした。来年も頑張ってください。
まずは再来週の知能ロボコンをがんばりましょうかー。私はたぶんスタッフですけど。
cortex-m3用のコンパイルが通ったってだけの話。相変わらずMac用。
まだ書き込みテストしてないから動くかどうかはわかりません。とりあえずFT2232は買った。
ディレクトリ作る
mkdir ~/arc mkdir ~/work
インストール先も作る
sudo mkdir /usr/local/cross/arm
パスを通しておく
~/.profile に export PATH=/usr/local/cross/arm/bin:$PATH を追加 source ~/.profile
~/arcにファイル持ってくる
- binutils-2.17.tar.bz2(binutils-2.18はなぜかコンパイルが通らない……)
- gcc-4.3.0.tar.bz2(cortex-m3対応は4.3から)
- newlib-1.16.0.tar.gz
展開
cd ~/work tar -jxvf ../arc/binutils-2.17.tar.bz2 tar -jxvf ../arc/gcc-4.3.0.tar.bz2 tar -zxvf ../arc/newlib-1.16.0.tar.gz
newlibをgccと一緒にmakeするためにリンクを張る、らしい
ln -s newlib-1.16.0/newlib gcc-4.3.0/
まずbinutils作る
mkdir arm-binutils cd arm-binutils ../binutils-2.17/configure --target=arm-elf --prefix=/usr/local/cross/arm make sudo make install
GCCつくる
cd ~/work mkdir arm-gcc
GMPとMPFRが必要らしいのでMacportで入れる
sudo port install gmp sudo port install mpfr cd arm-gcc LDFLAGS="-L/usr/lib" ../gcc-4.3.0/configure --prefix=/usr/local/cross/arm --target=arm-elf --enable-languages=c --with-newlib --with-gmp=/opt/local --with-mpfr=/opt/local --with-float=soft CFLAGS_FOR_TARGET="-mcpu=cortex-m3 -mthumb -O2 -msoft-float" LIBCFLAGS_FOR_TARGET="-mcpu=cortex-m3 -mthumb -O2 -msoft-float" sudo make install
ARMv7 Cortex-M3 Projectsの LED Blink Example for STM32F103 はMakeできた。(要:makefileでarm-hogehoge-gccの書き換え)
OpenOCD使うのにGDBいるよね。とりあえず6.8入れる。
configure --target=arm-elf make CFLAGS="-w"
つかれた…
とりあえず買ってきてUSBつないでみた。
/dev/tty.usbmodem1d11 でシリアルポートとして認識。GAINERもそのまま起動。FireFoxでカエルのゲームは動きました(Safariだとなぜか動かなかったけど)
さてこれからプログラム環境の構築です……JTAG要るかなぁ
日産、「攻殻機動隊S.A.C. meets NISSAN」展を開催。下の方にタチコマが。
……脚車輪じゃないのにタチコマを名乗るとは笑止千万。味噌汁で顔洗って(ry
先日のロボコンの動画をまとめてDVDとか作ってみました(やっつけ)。エンコに一晩かかった。
……ディスクイメージはできたがブランクメディアがない件について…… (・c_・`)
知能ロボットコンテスト・フェスティバル2006開催[impress watch].
T-semi露出大杉。私もさりげなーく写ってるようです。
週末(24,25)は仙台市知能ロボコンでした。
今年は運営スタッフ側に回って二日連続審判とかしてました。いろいろとヤッチャッタけどどうにかこうにか。終わった後に中野先生から「気遣いがあって競技者がやりやすかった」とのお言葉を頂いたので報われました。
T-semiとしては受賞者3人。二日目進出とかデモとかを考えればまあまあかな、と。技術レベルの二極化が進んでる気もします。
とりあえず来年は参加者側に回りたいです。
すとろべりーりなっくすのえすえっちつーとまっきんとっしゅでしりあるつうしんをしたいです。ぼーれーとは230400がもくひょうだけどとりあえず38400です。
- Mac - H8, 秋月SH2 : OK
- Win - SBL SH2 : OK
- Mac - SBL SH2 : NG
( ゚д゚) (つд⊂)ゴシゴシ ( ゚д゚)ポカーン
えすえっちがわのぼーれーとはりろんじょうごさがないはずです。まっくのしりあるはえふてぃーでぃーあいのちっぷをつかっています。さいしんのどらいばでもむかしのどらいばでもおなじけっかでした。
![[mをおすと?とかoとかでる]](http://gentlemachine.com/mt/archives/images/mmm.png)
ぼく、mしかおしてないのに。
書いてたあらゆるファイルが消失したので一から書き直し。やる気もかなり失せてるのでプロンプト周りとかかなりいい加減……
メモリ定義に絶対指定で書いてたのが違うところに配置されてました。どうにかしてください。
某ナベ(全国のワタナベさんの大半はこの略称で呼ばれるらしいですが)の日記見て((((;゚Д゚))) 仙台市知能ロボコンのルール改正ですが……
観戦者およびスタッフの安全確保を重視していただきます。制御の効いていない飛び道具、レーザー、極端に高輝度のLEDなどを禁止します。事前審査などは行いませんが、装備の危険性を実行委員会で確認した場合、競技に不可欠なものであっても機能の使用をその場で禁じます。
……全部T-semiじゃね? むしろ暗黙に名指しwwwうぇwwwww
これが勝利の鍵だ!>4月頃にはロボットが動きそうな工程表
だそーで。ファイナルフュージョンとかシンメトリカルドッキングとかするロボット作らなきゃダメですかね。まだアイディア出しも終わってないんですが。今年もソロ出場かしら……
例によって0点。前日の夜から足回りがヘンなんですもの (ノ∀`)
それでも75%くらいの確率で動いてたのが本番では25%に。確率論で動くロボットはどうかと思った。
仙台市知能ロボコンまで1ヶ月を切りました。とりあえずガワとモータドライバとマイコンは動くので走るだけなら走るはずですが、ラインセンサ作ってません。部品もないし作るの面倒です。
……ラインセンサがなければカメラを使えばいいじゃない (・∀・)
Treva互換のDMR-C1。SH2+ノーウェイト1MBメモリならクロック送るだけで何も考えないで取り込めます。先人に感謝です。
回路作ってデータ吐かせるのに1時間。データ読むポート間違えて悩むこと2時間。Mac用クライアントソフト作るのに5時間。変数の初期化は大事です。
撮影に2〜8秒かかるのは仕方ないとして(読み出し部をインライン展開すれば速くできそうだが)、Macにデータ転送するのに30秒かかるのは正直耐え難いですな。RS-232Cの115200bpsが悪いんです。だれかUSBにしてください。
IOポートがなんかおかしいので配線引っこ抜いたらグランドとリセットの線をつなぎ忘れてたことが発覚しました。GNDは信号線の上から被せるように配線しないとダメなので保留にしてたのをすっかり忘れてたようですがなんでリセット繋がってないの……?
IOの48本と上記2本、計50本を配線してとりあえずもうマザーボードにコテは当てなくて済みそうです。
モニタの方はサービスルーチンを全部アセンブラにしてみました。コンパイラが吐いたオブジェクトを逆アセンブルして貼付けただけですが。リンクするオブジェクトが減ったので満足です。
SH2のモニタがヘンだったんです。シリアルで "hello" と1回送信するだけのプログラムなのに……
![[hell, hello]](http://gentlemachine.com/mt/archives/images/hello.jpg)
hellhellhell...地獄を見ました。文字通り。
ユーザプログラム起動スイッチをモニタLED出力ポートに切り替えて使ってるわけですが、プログラム終了して入力端子になった瞬間に自分が出力してた信号を読んでループしてたらしいです。 orz
関数ポインタがよくわからないままSH2のモニタが動きそうです。
0xfffff158に格納されてるアドレスの関数を呼び出したいだけなのに。
const void (*intproc)() = (void (*)())(void *)(* (volatile unsigned long *)0xfffff158); intproc();
アセンブラで書いた方が早そう。
CPLDの書き込みも終わったので(電源全部繋がないと動かなかった)、いよいよ地獄のバス配線です。といっても精々60本。heapを設定しないでprintf使ってた。bssに置かれて0になってるならROM領域にかぶって動かない筈なんだが……ドウナッテルンダロウ
で、その部分を直したら一文字も受信できなくなった。誰か助けてください。
どんどん見当違いの方向に突き進んでる気がするが、メモ。
- .ctors
- プログラムのグローバルコンストラクタ関数へのポインタの配列を保持する
- .dtors
- プログラムのグローバルデストラクタ関数へのポインタの配列を保持する
gccはmain()関数の前に、無条件で__main()関数を呼び出す。これはlibgccで定義され、.torsセクションを設定している。
これはC++を利用しない場合には意味を持たない。そこで、空の__main()関数を自作して置き換えることができる。これに伴い、リンカスクリプト内の.torsセクションも削除して構わない。
シリアル受信が56文字目に達すると割り込みから復帰できなかった。リングバッファの開始位置を50にしたら6文字目で止まった。
バッファサイズを32にしてみたら1文字も受信できなくなった。
スタックポインタの設定を思いっきり勘違いしてスタックがデータ領域にめり込んでるのを発見した。そこを直したら49文字目で止まるようになった。25文字目の時にはデータの取りこぼしがあるようだった。
自前で書いた関数の中にポート出力入れて確認したら関数のリターンに失敗してるらしかった。#pragma interrupt で書いてるからその部分はgccが勝手に生成してるわけで……ドウスレバイイノ?
そんなわけで49,000行くらいある逆アセンブルコードを眺めて途方に暮れて日も暮れた。明日は最小限のシリアル関連だけ書いて実験してみようと思った。FlashROMの書き換え回数内に終わるといいなあと思いました。保証だと100回なのであと半分くらいです。
gdbは相変わらず動かないけれど。ようやくスタートラインが見えるくらいまでは進んだ。気がする。
スタートアップルーチンで遅延分岐なんぞすっかり忘れてトンデモな所に飛んでた模様。東京工業高専のページの解説でどうにかなった。
シリアル送受信の割込でターミナル通信が可能になったのでデバッグが始められそうです。とりあえず割込の登録するときはマスクしてから優先度設定しないとダメっぽい。気がする。
……そろそろ半田ゴテと格闘を始めねばならぬようですな。
リファラ見てるとH8のページ目指して飛んでくる人がいるようなので残しておきます。
Open H8 writerを改造したのを置いときます。-3672と -3694 を追加したのとエラー処理を少々追記。
h8write.c。頭のほうの #ifdef FreeBSD の下にある RSLINE の定義を環境に合わせて書き換えておきましょう。
cc -o h8write h8write.c
できたファイルは /usr/bin あたりに放り込んで chmod 755 を忘れずに。
途中まではH8用と同じなので H8-gcc on Mac OS X を参照。展開( ln -s ../newlib-hogehoge) まで終わらせる。H8用のを作ってある場合はそのままで良い。
~/.bash_profile に次の行を追加
export PATH=/usr/local/cross/sh/bin:$PATH
で、source ~/.bash_profile で読み込む。
binutils構築。
cd ~/cross/work mkdir sh-binutils cd sh-binutils ../binutils-2.15/configure --prefix=/usr/local/cross/sh --program-prefix=sh-coff-hms- --target=sh-coff-hms make CFLAGS="-O2" all sudo make install
gcc。
cd ~/cross/work mkdir sh-gcc cd sh-gcc ../gcc-3.4.3/configure --prefix=/usr/local/cross/sh --program-prefix=sh-coff-hms- --target=sh-coff-hms --with-newlib make CFLAGS="-O2" all sudo make install
sh-coff-hms-gcc -v でバージョン情報が表示されれば完了。
Mac OS X 10.3.8, Xcode 1.1。
作業用ディレクトリとして ~/cross/arc/ と ~/cross/work/ を用意。
インストールディレクトリとして /usr/local/cross/h8/ を想定。適宜読み替えるべし。
下準備としてあらかじめパスを通しておく。~/.bash_profile を編集。次の行を追加。
export PATH=/usr/local/cross/h8/bin:$PATH
source ~/.bash_profile で読み込んどく。
以下のファイルをダウンロード。最新版はリリースでも動かないものがたまにあるので動作確認したバージョンも書いとく。~/cross/arc/ に放り込む。
別にtar.gzでもtar.bz2でもいいんだけど。bz2のほうが軽いっぽい。で、展開。
cd ~/cross/arc bzip2 -d binutils-2.15.tar.bz2 bzip2 -d gcc-core-3.4.3.tar.bz2 cd ../work tar -xf ../arc/binutils-2.15.tar tar -xf ../arc/gcc-core-3.4.3.tar tar -zxf ../arc/newlib-1.13.0.tar.gz cd gcc-3.4.3/ ln -s ../newlib-1.13.0/newlib .
まずはbinutilsを構築。
cd ~/cross/work mkdir h8-binutils cd h8-binutils ../binutils-2.15/configure--prefix=/usr/local/cross/h8 --program-prefix=h8300-hms- --target=h8300-hms make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all sudo make install
続いてgcc。
cd ~/cross/work mkdir h8-gcc cd h8-gcc ../gcc-3.4.3/configure --prefix=/usr/local/cross/h8 --program-prefix=h8300-hms- --target=h8300-hms --with-newlib make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all sudo make install
h8300-hms-gcc -v でバージョン情報が表示されれば完了。
gdb-6.3はintl(国際化なんとか)がファイル群から外されたためNON-GNUなシステムではコンパイルできないそうな。なにそれ。そんなわけで6.2.1をsh-coff-hms用に作ってみた。
……シミュレータがスタートアップルーチンの最初でバスエラー起こして止まる。なにそれ。んで正常動作する(はずの)プログラムをシミュレータにかけたら同じところで落ちた。なにそれ。リンカスクリプトに独自のモノを使うとダメとか書いてあるページもあるんです。なにそれ。
とりあえずobjdumpで逆アセンブルして眺めてみたら最初に設定したはずのアドレスが㌧㌦。スタートアップルーチンの .align 指定がなかった。warning出てたのはこれか。ほかにもいろいろと凡ミスしてますよ。なにそれ。
まだSH2が動かない。昨日の時点でわかったことは単純なポート出力のプログラムも動いていないことくらい orz
gdbでも使ってみようかと思ったがコンパイルが通らないので窓から投げ捨てた。
objdumpで逆アセンブルしてみたら割込ベクタが全部スタートに飛んでた。よく見たらリンカスクリプトで定義してる関数と実装してる関数の名前が違ってた。ポート出力もできないのには関係ないと思うが(これで直ったらいいなあ……今日は実機触ってないのでなんとも)、この調子じゃ動くまでにかなり時間がかかると思った。
愚痴っぽい今日この頃。
