Top
HIDaspx
DownLoad
HIDasp高速化
制作
AVR関係
AVR_Monit
AVR_term
W32_term
HIDmon88
HIDtester
usbRS232
Arduino2313
デジタルテスター
ATmega88生活
KeyBoardマニア
KeyBoardマニアII
Arduino400
PICライター
ARMライター
赤外線リモコン
ARM
STM32ブートローダー
STM8S-Discovery改造
STM8S-OpenOCDライター
LPCXpresso
LPC用ブートローダー
NXP用LPCUSB
NXP用ブートローダー
MARY基板
LPC1114FN28
OpenOCD JTAGアダプター
OpenOCDビルド方法
arm-gccビルド方法
mapleIDEの改造
libmapleで仮想COM
PIC32
PIC32MX
Pinguinoで遊ぼう
ブートローダーを作る
シリアルブートローダー
USB仮想シリアル
USBカスタムデバイス
USB簡易モニター
USBオシロスコープ
USBホスト
PIC32でBluetooth
USBAudio
USBStudy
VGA出力に挑戦
BASICを動かす
WinUSB
勝手に改蔵*PIC32
PIC18F
HIDブートローダー
AVR/PIC両用ライター
ARMライター
usb汎用クラス
usbシリアル変換
usbキーボード変換
sdccを使いこなす
mcc18を使いこなす
HIDmon-2550
HIDmon-14K50
PICmonitor
試行錯誤の記録
UBWを試す
旧HIDboot
PIC18F2550試用記
PIC18F4550試用記
その他マイコン
NEC78K
RX62N
SH2A
H8
FM3
XPからubuntuに乗り換え
Android
Xen-hypervisor
Windows8カスタマイズ
開発日記
2015-04
ノウハウ
AVRUSB_Tips
HIDasp情報
汎用USB-IO
・
リンク
フリースペース
ゲストブック
旧コンテンツ
WinVista
インターフェース考
最新の20件
2022-07-25
2008-10
HIDasp高速化
H8/3048F
AutoTicketLinkName
2021-12-11
FormattingRules
2021-12-08
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/V-Z
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/H-K
2020-02-23
YukiWiki
PHP
PukiWiki
WikiWikiWeb
2018-12-19
SandBox
InterWiki
2015-05-07
2015-04
2015-05-02
MenuBar
編集
差分
2011-12 の編集
-- 雛形とするページ --
(no template pages)
[[2011-11]] [[LPC1114]] [[RX62N]] [[SH2A]] ---- *今年もオワター!日本もオワター! [#p26e2e72] -TPPで。 -いや、%%IF事故%%震災で。 ~ -ところで、TPPとPTTって、似てない? --無線機で話すときに押す奴。 ~ オマエガオワットル。 ~ ~ ~ ~ ------------ *心機一転。積み基板SH2AとRX62Nチャレンジ! [#bcee5b28] -[[MARY基板突撃>LPC1114]]の次は、RENESAS突撃だ。 -いまどきSH2AとかRX62Nのgccがあるらしい。(ほんとか?) -それを使ってみるテスト。 さあ、''地雷原を行け!'' もっと読む : [[RX62N]] [[SH2A]] ~ ~ ~ ~ ------------ *KPITのサイトに接続できない。 [#r8822957] -まずはgccの入手。あれ?接続できない。 -http://www.kpitgnutools.com/ -サイト落ちてない? ''いきなり挫折。'' オワター 始まってもいないのに最終回を迎えるのであった・・・。 ~ -自分でクロスgccをビルドするとか・・・昔やってたけど、もう面倒くさくてやってられない。 -RX62やSH2Aにそんなに思い入れ無いんで。 今年ももうオワリ? ~ ~ ~ ~ ------------ *もちべーしょんダダサガリ中 [#cdfef8e0] -KPITのサイトは復活している模様。 -KPITから、RX/SH2A用のgccをDLするにはユーザー登録しなければいけないらしい。 -それって面倒だな。 -自分でクロスgccをビルドするのと同じくらい面倒だ。 -自分でクロスgccをビルドするのは面倒だからやらないと決めてしまったので、ユーザー登録もできないゃぃ(<---コイツまじオワットル) まあ、つまりRX62NやSH2用の環境を整えて、cdcbootのようなものを移植したとしても、その先何もすることがないのでやる気がでないのであった。 -なんか面白いことないんかい。----って、ないんだよなー。RXの中にも。 ~ そういや、NHKのラジオで福島の人がチェルノブイリに視察に行った話をしていた。 -ベラルーシとかでは、除染やらないしやるべきでないこともわかっている。 -そもそも共産圏なので土地は私有財産じゃない。国家で計画的に移住をさせればいいだけのこと。 -''日本も共産主義だったら良かったのに''、とこれほど思ったことはない。 -それに、除染って言うと、掃除みたいにキレイにするイメージがあるけれど、 -言葉を変えると、「高濃度汚染物質集め」だったり、「人工的濃縮作業」なんだよなー。 -そんなゴミ、かえって危険じゃね。 -どっかに永久的に捨てる場所があるなら別だけど。 ~ -つまり、君の部屋が均質にゴミ屋敷だったと仮定して、そのゴミを部屋の真ん中にあつめるような作業だ。無駄だろ?どうせまた崩れる -だったらむしろ「全環境に均質に拡散」させるべきなんじゃないのか?すでに環境放出された分に関しては。 -すでに、海のほうはそうなりつつあるし、地表も放っておいても拡散は続いているわけだ。 ~ どう考えても、終わってるよなー。 ~ **静かな死 [#id59e951] どうせみんな死ぬのよ -http://satehate.exblog.jp/17145645/ |白ロシアの村の人々の悲しみに満ちた生活とその静かな死について、~ |そして原発事故の起こった福島を待ち受けている将来について~ ~ ~ ~ ~ ------------ *秋月にこんなものが売ってる。 [#l5775189] CsI(Tl)固体シンチレータ 10x10x10mm -http://akizukidenshi.com/catalog/g/gP-05293/ -4500円。 CsI(ヨウ化セシウム)結晶の中では潮解性は低いですが、 なるべく湿気の少ない環境、また開封後はお早めに接着下さい。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~笑うトコ。 -なんなんだろ。まさかこんなものが秋月に出てくるとは。 -2010年から見たら全く予想できない展開に。 ~ ~ ~ ------------ *クロスgccのビルド [#r4fe4222] ''懲りずに''まだやっている。--->手段が目的化した、とも言う。 -''本日の結論'' -gcc-4.6.xをビルドするには gmp , mpfr , mpc などが必須。 -とりあえずubuntu上での rx-elf-gccとかrx-elf-g++は使えるようにした。 -だが、cygwin上のそれらには''全く興味が無い'' -mingw (+msys) は最近では../configure とか出来る。''凄い。'' --とりあえずWindowsのMinGW上で、 gmp , mpfr , mpc までセルフビルド出来てしまってびっくり。 --binutilsを通そうとしたら、zlib.hが無いと言われた。 mingw-get install msys-zlib したけどzlib.hは落ちてこない。 mingw-get install zlib だと/usr/include/ に生成される <---- 今ここ。 ~ ~ -gcc-4.6.xのディレクトリにgmp , mpfr , mpc ,(あとついでにnewlib-1.19/newlibとlibgloss)のソースをぶちまけておくかsymbolic linkを張っておくと勝手にビルドして参照してくれるかとおもいきやさにあらず。 -結局gmp , mpfr , mpc の順にビルドして --with-gmp=/dir/to/install みたいに順繰りに参照を渡してやる必要がある。 -ubuntuのパッケージからgmpなどを入れる場合は、--with-gmpとかする必要はない. -けれどもmingwのバイナリーを作るときはパッケージから入れたgmpなどを参照してくれないので自力でやる。 -Windowsのmingw上で直接ビルドする場合も同様だ。 -参考URL: http://uchan.net/w/index.php?building-gcc ~ ~ ~ ------------ *クロスgccに飽きたので・・・ [#n9f51c07] -cygwinでいいや。 -まあ、作り方がわかったのでよしとしよう。 --実は入れていたcygwinがだいぶ古かったのと、bashとかmakeを殺していた(MinGWやWinARMにやらせて、sshとかだけ使ってた) ので、バージョンupしたらいろいろトラブったけどね。 --hos-v4がcygwin使ってたので素直に同じにした。 ~ gccでRX62N付録を遊んでいるページをぐぐる。 -http://www.nextftp.com/abe/ ----- H8とかmbedとかRX62NでZ80とか。 -http://ledmyturn.blogspot.com/ --- hos-v4のRX62N版紹介。 実際のところ、FRK-RX62Nに実装のRX62N7はカタログ値は 384KByte FlashROM, 64KByte SRAMですが 512Kbyte FlashROM, 96KByte SRAMが利用可能でした。 ので、FCURAMを使わずに、Z80メモリすべてをSRAMに割りつけます。 ''え゛?'' -http://berupon.b.sourceforge.jp/2011/09/03/cq-frk-rx62n%E3%81%A7usb/ - -renesasのUSBサンプルはひどい。というかでかすぎ複雑すぎ。gccへの移植は断念した。 もっと読む : [[RX62N]] ~ ~ ~ ------------ *RX62N:なんかダメっぽい感じ。 [#l9e3cc48] USB-CDC(エコーバック)がまともに動かない。 -teratermからの接続、手打ち入力はおK。 -WriteFile()で39バイト以下の書き込みだと、まあまあOK。(後述) =40byte以上書き込むと無反応になる。(なぜかわからない)無反応ではなくて文字欠けが起きるだけかもしれない。 -まあまあOKと書いたのは、1回書いたあと20mS待てばOKだ。10msとか、それ以下だと無応答か、文字欠け。 ソースを全部調べたけれど40のマジックナンバーを60とか64に直しても上記症状は全く改善されない。 -こんなにひどいとは思わなかった。 -打つ手が見当たらない。gcc環境のせいかもしれないが原因を見つけるのは無理かも。 ~ 気になったので、RenesasのxmodemサンプルをHEWのコンパイラでビルドしてみた。 -ビルド出来ない。 L1120 (W) Section address is not assigned to "L" L3100 (F) Section address overflow out of range : "L" -コンパイラのバージョンが新しいとだめっぽい。 -リンカー設定のセクションで"W*"とか書かれている後ろに"L*"を追加したらリンク出来た。 -xmodemサンプルを改造してエコーバックを試した限りでは、USB周りには何の欠陥もないように見える。 -gcc環境だけでの問題かもしれない。 ~ ~ ~ ------------ *RX62N:直ったかも。 [#a713220b] -gcc環境のソースをリファイン。 -要らないソースをどんどん削ってエッセンスだけにした。 -基本、HEW版とUSB部分は変わらないっぽい。 -USBの入出力方法をUSBCDC_Read()とUSBCDC_Write()のみに限定、余計なラッパーを全部排除してエコーバックを書いた。 -速度は1.8Mbps 出ている。字化けもしない。WindowsからのWriteFile()の単位を250byteほどに増やしてもハングしなくなった。非常に安定している。 gccでも何ら問題ないことが分かった。 -結局デバッガもシリアルprintも使わずに、LEDチカチカだけで直してしまった。''ぃぃのか?'' -これだから、OpenOCDもROMライター以外の機能を使おうとしないんだ。 ソースを整理できたのでUP。 もっと読む : [[RX62N]] -USBCDC_Read()とUSBCDC_Write()のみであれば、動作は完璧なんだけど、USBCDC_Read_Async()だと いろいろやっかい。 -特にタイマー割り込みからUSBCDC_Read_Async()を呼ぶと、非常に不可解な動作をする。 -全部フォアグラウンド側から呼ぶなら、まあ許せる範囲。 -%%原因全く不明。%% -%%もしかして、こいつら(USBCDC_*関数)並行動作できないんとちゃうか?%% --すげーつまらん原因だった。ある関数の戻り値が実はちゃんと使われていて、適当に実装すると見事にバグるという''自分で作った罠''にはまっていたらしい。 -SH2Aに手を出そうか出すまいか悩み中 --%%RXだけでも地雷が多いので、SH2Aは無し。%% ---地雷原進軍中。 --なんかFRK-SH2AはCPU内蔵Flashがなくて、SRAMが1MBもある。 --そいでもって、外付けのserial Flash(32kB x 2page)にあらかじめHEWモニターが入っているのだった。 --HEWモニターはUSB-CDCデバイスになっている。 --普通にHEWをインストールした状態では、このHEWモニターには接続できない。 --接続するためにはHEWの環境に、このモニター用のDLLをプラグインみたいにインストールしないとだめらしい。 -残念ながら、この基板を使うためには、Renesasサイトの登録と、HEW統合環境、SHコンパイラのダウンロードが必須になる。そうしないとターゲットにユーザープログラムを書き込めない。 -それから、serial Flashの書き換えは難易度が高いらしい。%%いまだに書き換えはおろかLチカサンプルのビルド実行すらままならない状態。%% ---ファームアップデート完了。read more [[SH2A]] ~ ~ ~ ------------ *電子ブロックMini [#u3153aaa] -買った。 -http://otonanokagaku.net/magazine/vol32/index.html -なかなか気に入った。 -大きさが手ごろ、値ごろ感もある。 -5x5ブロック程度で十分じゃん。学習用としても、ちょっとしたパズルとしても。 -EX150復刻版も持ってたけど、長らく放置状態。 -自分はSR-1AとかSR-2Aを死ぬほど遊び倒したクチなので、いまさら何かをすることはしないで、いまのところ小学生に遊ばせているけれど、 -さっそく魔改造している人が居た。 -やっぱりAVRの米粒とか入れて遊ぶのかな? ●Arduino発想の原点は「電子ブロック」~ 同氏はArduinoの最初のインスピレーションは,学研の電子ブロックから得られたと明かしました. -http://www.kumikomi.net/archives/2011/12/rp53mtm7.php?page=1 -なんかうれしい。 ~ ~ ~ ------------ *STM32F4−DISCOVERY [#p7122b22] -http://akizukidenshi.com/catalog/g/gM-05313/ -1650円 -大量購入向け? -とりあえず、STM8S-Discoveryみたいに、3枚くらい買っとくか。(大雑把) -またST-Link側をVersaloonにする遊びが流行るんだろうなぁ。 -USBがmicroなのがアレだな。480Mbpsはナシか。 ~ ~ ~ ~ ------------ *今週のプログラムTips [#d2e3e55d] ''エディタからタグジャンプできる関数リファレンスを作る。'' -なんてものを昔はしょぼいperlで書いてたりするんですが、最近のC++風の書き方に対応できなかったりするんで、 -ctags+perlで強化版を作ってみたり。 ~ -関数リファレンスが欲しいならDoxygenとかglobal-tags(gtags + htags)とかctagsとかがあるけれど、 -HTMLページを作ってくれるけれど、テキストエディタのタグジャンプ用ファイルは作れない。 そこで、 -ctags( Exuberant Ctags )のxrefオプション (-x)でクロスレファレンスを吐かせて、それをperlで加工する。 -ctagsはあらかじめインストールしておく。 -まあ、たったこれだけなので。 #!/usr/bin/perl sub gen_tag() { my ($line)=@_; $line =~ s/\n//; my ($id,$type,$lnum,$source,@etc)=split(/[ ]+/,$line); if($type eq 'function') { my $func = join(' ',@etc); print $source . ':' . $lnum . ":\t" . $func . "\n"; } } sub main() { my @buf = `ctags -R -x`; my $line; foreach $line(@buf) { &gen_tag($line); } } &main(); -以上。 - ~ ~ ~ ~ ------------ *今週のubuntu Tips [#a1ccab0c] -ubuntu 11.10は例によってデスクトップがUnity. -使う努力はしてみたものの、普通はダメだと諦める。--> Gnomeを入れる。 -さらに、最近の液晶は縦に短くタスキに長し(?)なので、上下にあるメニューバーをどっちかにまとめたい。 -以前のGnomeなら右クリックで「移動」メニューが出てきたのだが、11.10のやつは出ない。 コツ ''ALTを押しながら''右クリックすると、メニューバーの上のアイコンなどが「移動」出来るようになる。 -上のメニューやらアイコンを全部下に移動して、上のメニューバーを消す。消すメニューも''ALTを押しながら''右クリックのようだ。 ~ ~ ------------ *そして、今週の[[Android-x86:http://www.android-x86.org/]] [#pbc09643] -android-x86-4.0-eeepc-20111209.isoをVMWarePlayerに入れてみた。 -入れ方は、vmplayer.exeを立ち上げて、新規仮想マシンを作成、isoファイルを選択、OSはあとで入れる、にする。 -次に、VMの設定を変更する。SCSIを消して、IDEで仮想ドライブを作り直し、OSカーネル選択はOther Linux2.6にする。 -仮想マシンを起動して、isoをマウントすると、インストーラーが立ち上がるので、/dev/sda1を作って、そこに入れる。 --入れ方はまるで古いLinuxのインストーラーのまんまな感じ。 --fake SDカードも入れておく。 -インストールが終わると、Android OSが立ち上がり、初期設定メニューが出る。「日本語」を選んで、あとはガイド のとおりにすればAndroid 4.0が起動する。 -SDカード(IDE)も表示も全くOKなんだけれど、VMWareでは無線LANがeeepcではないからネット接続だけできない。 --困った <----今ここ ~ ~ ------------ *今週の[[SH2A]] [#if09340c] -シリアルデバッグ&ブートのための外部USB-シリアル変換回路(元は軽快電話付属Prolificケーブルの電話側コネクタをバラしてマイコンにつなげるようにしたもの:注TxDが5V振れる危険な奴。RxDは5Vトレラント) をSH2AのUART2に繋いだ。(ろくに確かめもせず) -シリアルブートのファームをSPIに焼いた。(HEW上でしか出来ない。これ毎回面倒くさい) -シリアルポートはOK。接続を確認。 -uploadしたプログラムが正常に動かない! --↑Teratermのfile uploadオプションで ''[ ]バイナリー''のチェックが抜けていただけだった。うーむ。 -teratermでuploadするのも面倒なので、w32termからコマンドラインでupload出来るようにした ''<---今ここ'' http://psp.dip.jp/web/jpg/sh2a.jpg ~ -同様のscif2/usb両対応の簡易ブートも存在する。 --http://www.kumikomi.net/interface/editors/2010/10/post_12.php →sh7264_usb_function_sample.zip --この中のbinファイルをシリアルROMに焼いて起動させる。USBが有効でないときは自動でscif2シリアル経由に切り替わる。 今週の目標: -とりあえず、sh7264_usb_function_sample.zipをgccでビルドしてみるテスト。 --ビルドはOKになった。 --vectorのセクションが正しい位置になるようにgcc対応の属性をつけてみた。 --いくつかの未定義関数を追加した。 --USBデバイスとしては認識するようになった。が、 --Lチカが最初の1回だけ実行したあとだんまりになる。全くもって''意味不明'' --Lチカだけ取り出して、LEDtestプロジェクト上でビルドしたものは正しくブリンクが継続する。 ~ -さらに試す。 --Lチカが最初の1回だけ実行したあとだんまりになる奴は、割り込み禁止状態で実行すると正しくブリンクが継続する。 --調べていくと、#pragma interrupt FUNCNAME みたいな奴がいっぱい並んでいた。 --注:gccでは#pragmaは''丸無視。'' --このような関数を __attribute__((interrupt))属性を付けまくってみたが、こんどはgccに丸無視された。 -酷い・・・ --どうやらSH2Aでは __attribute__((interrupt_handler)) とか nmi_handler みたいに書かないとだめっぽい。 --そう書くと、prologueでは全レジスタを保存してくれて、epilogueではrteで戻ってくれるようなコードに変わった。 --あと、gccオプションでは -m2a が要るらしい。objdumpするときは -m sh2a だ。 --けれども、暴走癖は直らない''謎。'' どうなってんの?SH2A ~ -うまくいくようになったらシリアルROMに焼いてみる。 --先は遠そうだ。 ~ **SH2Aはブート手順とかシリアルROMとかメモリーマップとかがいろいろ訳分からない。 [#fb331463] -シリアルROMの前半32KはHEWモニターなので触らない。 -シリアルROMの後半32Kは(今は)scif2/usb両対応簡易ブート(sh7264_usb_function_sample.zip)を焼いている。 -後半32Kのファームを使いたいときは、JPP2クローズ。 -後半32Kのファームを書き換えたいときは、JPP2オープンで起動して、HEWからSPIWriterUser.hwsを読み込んで、absとROMのBINをダウンロードして、CPUリセット、実行、という手順を踏む。 -通常のデバッグは1MBのSRAM(1c00_0000〜)を使う。 ~ というわけで、現在、順調に''積み基板''を消化中であった。~ 今週の標語: -のんびり、気長に[[SH2A]]. ~ ~ ~ ------ *音声合成LSI ATP3010F4 [#ndd8f4fe] -http://d.hatena.ne.jp/OkibiWorksLabo/20111204/aquestalkpico ~ -http://www.a-quest.com/products/atp3010f4.html データシート -http://www.a-quest.com/download/manual/atp3010f4_datasheet.pdf ~ -LSIというか、なんかATmega328Pに限りなく近いんですけど。 -Arduinoに挿しても動かせると言うし。 -最初はATmega328と大容量ROMの混載かと思ったけど、実はATmega328Pにファームを焼いただけなんじゃないかと。 --音声合成コアのworkサイズとcodeサイズがATmega328Pに収まっているからナノ。 -昔PC8801MkIISRのFM音源チップで喋らせていたあれに近い感じ? ~ そいえば、ATmega328Pとピン互換、DIPで大容量品とか高速品種とか、実はARMが入ってんだけどAVRがエミュモードで動くんだよみたいなPC98DO状態の28PINチップどっか出さないかな?? ~ ~ ------------ *最強にして最凶悪な国産MPU。[[SH2A]]の続き。 [#x0f73998] -今週は、[[SH2A]]のUSB-CDCサンプルをgccでビルドしようといろいろやっていた。 -いろいろ手直しして、Lチカが少しだけ動くようになったが、以下のような未解決問題があった。 --割り込み禁止で走らせたらLチカは正常に行なわれる。 --USB割り込み、タイマー割り込みのどちらかでも有効な状態で走らせたら、Lチカは最初の1tickだけ 実行されて、そこで停止する。 --タイマー割り込み側でLチカ処理を入れるととりあえず短時間は動作しているようだ。この場合フォアグラウンド側の処理は死んでいる。 ~ -SH2Aにはレジスタバンクという高速割り込み応答のための機構があり、これをONにした場合はレジスタの退避復帰がかなり省略できる(全部ではない)。 --ただし、RTEする前にRESBANK命令でレジスタpop(バンク切り替え)する必要がある。 --gccでは、 __attribute__((interrupt_handler,resbank))という属性を割り込み関数に付与することで、そのようなレジスタ復帰コードに切り替わる。 -で、resbankあり、なしの両方でいろいろやってみたが症状は改善せず。 ~ **解決策は'-m2a-nofpu'だった。 [#caa05106] -http://d.hatena.ne.jp/chakoku/20101212/1292114475 - 'nofpu'でコンパイルすると、何事も無かったように動く。 - けれども、fpuが使えない。 ''なんじゃこりゃー!'' ''fpscr''という浮動小数点まわりの設定レジスタが鬼門だそうだ・・・ -そもそもfloatを全く使っていないし、 -割り込みハンドラー内でもfloatレジスタを全く使っていないのに、 -単純なLチカがハングするって、いったいどういう仕様なのだろう・・・。 ちなみにRenesasのCコンパイラでは問題は起きないっぽい。(けれども、使う気も起きない。GUIコンパイラ大っ嫌い) ~ **gccによるUSB-CDCデバイスの動作を確認。 [#ne41113a] sh7264_usb_function_sample.zip -上記アーカイブをCQのサイトにあったcygwinのsh-elf-gccでビルドできるようにした。 -一応RAM上でusbデバイスになって、USB経由のローダーとしてなんとなく動作していることまでを確認できた。 -ただし、1段目のローダー(シリアルROMからブート。これも同一ソースのプログラムをHEWでビルドしたもの)はUSBモードではなくscif2シリアルモードで使用しないとうまくUSBデバイスを立ち上げてくれないっぽい。何故かはわからない。 -修正作業の大半はRenesasCにあってgccにない関数の補完と、#pragma interrupt を等価なgccディレクティブに書き換え、それからldスクリプトの修正とかISR_VECTORセクションの設定とかそんな感じだった。 -''最後の大ボス''は -m2a-nofpuが必要だったことだ。これはバイナリーをいくら追っかけても分からなかったのでgoogle先生(というかSH2Aに詳しい先達)に教えてもらった。 ミッション終了。 -ソース整理しないと。 read more: [[SH2A]] ~ ~ ------------ *最強にして最凶悪な国産MPU。FPUが使えるようにしてみた。 [#p784fe17] 今日の試行 -割り込みハンドラーをC記述からアセンブラ記述に切り替えられるようにしてみた。(ビルドスイッチ1個とソース書き換え1個で対応) -アセンブラ記述の割り込みハンドラーにしておいて、コンパイルオプションを -m2a-nofpu から -m2a (もしくは-m2a-single)に変更。 read more: [[SH2A]] -ブートローダーが動くようになったのでダウンロード(32k)&実行はほぼ一瞬で出来る。 ~ ~ ~ ------ *ARMコンパイラ・・・ [#b2b72efa] -積み基板の消化も一段落ついたところで、こんどはMinGWのcross-gccの作り方でも勉強しようかなと。 -ほら、sh-elf-gccがバグってるし、Sourceryも入手難になるらしいので。 ~ -cygwinはやっぱりビルド遅いよ。体感でMinGWの1/3くらいかな。-j 4 付けてるんだけどね。 -最近のintel CPUは速いし、HDDもSSD化したりとか、Gavotte使ってたりとか(相変わらずWinXP32bit) -マシンはどんどん速くなってるのにcygwinだけ遅く感じる。(比例して速くなってない。) ~ なんすかねー、やっぱりWinを捨ててubuntuですかねー。Win7に移行するくらいならubuntuでも一緒か。 ~ ~ ------------ *今日のSH2A [#t910eb20] -printf("%g",atan(1)*4);とかが出来なかったので、trap34()を置き換えてみた。 -適当なsyscalls.cをでっちあげて、_open,_write,_closeを実装してみた。 -printfは使えるようになったが、"%g"が駄目だ。なんでだろ?分からない。 -''皮肉なことに、-m2a-nofpuでビルドしたものは "%g"で正しく表示される'' - -m2aでビルドした場合は "%g"の結果は全部nanになる。 -atan(1)*4の結果の16進表現まではどうやら正しいようだ。 -なので、printfの実装のどこかに欠陥があると思われるが・・・・nofpuだとちゃんと動くんだよねー。こまったちゃん。 ''残念なお知らせ'' -その後いろいろやってみたのだが、SH2Aはgccでは正しい浮動小数演算のコードを吐いてくれないようだ。 -floatとdoubleの区別がおかしい。 - __fpscr_valuesという不思議なグローバル変数はだれも初期化していない。(おそらくcrt1.Sで初期化しろということだろう) - 適当に、0x00040001とかで初期化してはみたものの、動作が芳しくない。 - 現時点での結論としては、FPUを使いたいなら素直にHEWのCコンパイラを使う。 - あるいは、SH2Aには最初からFPUが付いてこなかったものとして諦める。 ''また基板ゴミが2枚増えた。'' ~ sh-elf-gccの挙動メモ -浮動小数演算の直前に頻繁に mov.l ___fpscr_values,r1 ; PC相対で ___fpscr_valuesのアドレス定数をr1に入れている lds.l @r1+,fpscr ; つまり、 fpscr = __fpscr_values[0] ということなのだろう。 -のようなコードを吐いている。 -このコードはすごいムカつく。 -なぜかというと、PC相対の定数フェッチと0x00040001という定数値のフェッチの2回のメモリーアクセスが(浮動小数演算のたびに)増えるからだ。FPUがいくら高速でも、このコードで全部台無しだ。 -どうやら__fpscr_values[2]の最初の値はfloat演算用のfpscr値で、2番目の値はdouble演算用のfpscr値ではなかろうかと推測した。 -そのように初期化してはみたものの、相変わらずnanしか表示しない。 ~ ~ ------------ *日刊 SH2A [#o322738c] -SH2AではないけれどCortex-M3用のFlash書き込みルーチンを書いていた。 -動くかどうかなんて分からない。 -SH2AはFPUが最初から乗ってないものと割り切って使う分には悪くないかもと思うようになった。 --FPU自体は''設計は壊れてる''けど、中身が壊れてるわけじゃないので、gccを直せば全く使えないわけじゃない。 -クロック速いし、SRAM多いし、何といってもUSB 2.0/Hi-Speed/HOSTありだ。しかもLPC2388みたくに熱くならないし。 -問題はブート方法だが、SDカードを繋ぐか、諦めてhostから毎回流し込むか・・・。 -とりあえず、SH2A用のブートローダーを書いたので、hostから毎回流し込むのはそれほど苦にはならない(速いし) read more: [[SH2A]] ~ ~ ~ ---------- *少し古い(''安定版''の) CodeSourcery_G++_Lite の入手方法 [#mdfa016a] - CodeSourcery はmentor graphicsに買収されてしまったので、G++_Liteの入手性が悪くなっている。 - MentorからDLする代替として、[[leaflabs:http://leaflabs.com/]]から、maple-ide-0.0.12-windowsxp32.zipを入手してインストールする方法がお勧め。 --そうすると、''maple-IDE''まで使えるようになるおまけ付き。 --さらに、GCCのVersionも4.4.1なので''-Os''オプション指定によるバグに当たらずに済むメリットがある。 --arm-none-eabi-gcc.exeの実行パスは、「maple-ide-0.0.12をインストールしたパス」の hardware/tools/arm/bin/ --もうひとつの選択肢としては、[[netx-arm-elf-gcc:http://sourceforge.jp/projects/sfnet_netx-arm-elf-gc/]]もある。 ~ ~ ~ ~ ~ ~ [[<前の月>2011-11]]|[[次の月>>2012-01]] ~
タイムスタンプを変更しない
[[2011-11]] [[LPC1114]] [[RX62N]] [[SH2A]] ---- *今年もオワター!日本もオワター! [#p26e2e72] -TPPで。 -いや、%%IF事故%%震災で。 ~ -ところで、TPPとPTTって、似てない? --無線機で話すときに押す奴。 ~ オマエガオワットル。 ~ ~ ~ ~ ------------ *心機一転。積み基板SH2AとRX62Nチャレンジ! [#bcee5b28] -[[MARY基板突撃>LPC1114]]の次は、RENESAS突撃だ。 -いまどきSH2AとかRX62Nのgccがあるらしい。(ほんとか?) -それを使ってみるテスト。 さあ、''地雷原を行け!'' もっと読む : [[RX62N]] [[SH2A]] ~ ~ ~ ~ ------------ *KPITのサイトに接続できない。 [#r8822957] -まずはgccの入手。あれ?接続できない。 -http://www.kpitgnutools.com/ -サイト落ちてない? ''いきなり挫折。'' オワター 始まってもいないのに最終回を迎えるのであった・・・。 ~ -自分でクロスgccをビルドするとか・・・昔やってたけど、もう面倒くさくてやってられない。 -RX62やSH2Aにそんなに思い入れ無いんで。 今年ももうオワリ? ~ ~ ~ ~ ------------ *もちべーしょんダダサガリ中 [#cdfef8e0] -KPITのサイトは復活している模様。 -KPITから、RX/SH2A用のgccをDLするにはユーザー登録しなければいけないらしい。 -それって面倒だな。 -自分でクロスgccをビルドするのと同じくらい面倒だ。 -自分でクロスgccをビルドするのは面倒だからやらないと決めてしまったので、ユーザー登録もできないゃぃ(<---コイツまじオワットル) まあ、つまりRX62NやSH2用の環境を整えて、cdcbootのようなものを移植したとしても、その先何もすることがないのでやる気がでないのであった。 -なんか面白いことないんかい。----って、ないんだよなー。RXの中にも。 ~ そういや、NHKのラジオで福島の人がチェルノブイリに視察に行った話をしていた。 -ベラルーシとかでは、除染やらないしやるべきでないこともわかっている。 -そもそも共産圏なので土地は私有財産じゃない。国家で計画的に移住をさせればいいだけのこと。 -''日本も共産主義だったら良かったのに''、とこれほど思ったことはない。 -それに、除染って言うと、掃除みたいにキレイにするイメージがあるけれど、 -言葉を変えると、「高濃度汚染物質集め」だったり、「人工的濃縮作業」なんだよなー。 -そんなゴミ、かえって危険じゃね。 -どっかに永久的に捨てる場所があるなら別だけど。 ~ -つまり、君の部屋が均質にゴミ屋敷だったと仮定して、そのゴミを部屋の真ん中にあつめるような作業だ。無駄だろ?どうせまた崩れる -だったらむしろ「全環境に均質に拡散」させるべきなんじゃないのか?すでに環境放出された分に関しては。 -すでに、海のほうはそうなりつつあるし、地表も放っておいても拡散は続いているわけだ。 ~ どう考えても、終わってるよなー。 ~ **静かな死 [#id59e951] どうせみんな死ぬのよ -http://satehate.exblog.jp/17145645/ |白ロシアの村の人々の悲しみに満ちた生活とその静かな死について、~ |そして原発事故の起こった福島を待ち受けている将来について~ ~ ~ ~ ~ ------------ *秋月にこんなものが売ってる。 [#l5775189] CsI(Tl)固体シンチレータ 10x10x10mm -http://akizukidenshi.com/catalog/g/gP-05293/ -4500円。 CsI(ヨウ化セシウム)結晶の中では潮解性は低いですが、 なるべく湿気の少ない環境、また開封後はお早めに接着下さい。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~笑うトコ。 -なんなんだろ。まさかこんなものが秋月に出てくるとは。 -2010年から見たら全く予想できない展開に。 ~ ~ ~ ------------ *クロスgccのビルド [#r4fe4222] ''懲りずに''まだやっている。--->手段が目的化した、とも言う。 -''本日の結論'' -gcc-4.6.xをビルドするには gmp , mpfr , mpc などが必須。 -とりあえずubuntu上での rx-elf-gccとかrx-elf-g++は使えるようにした。 -だが、cygwin上のそれらには''全く興味が無い'' -mingw (+msys) は最近では../configure とか出来る。''凄い。'' --とりあえずWindowsのMinGW上で、 gmp , mpfr , mpc までセルフビルド出来てしまってびっくり。 --binutilsを通そうとしたら、zlib.hが無いと言われた。 mingw-get install msys-zlib したけどzlib.hは落ちてこない。 mingw-get install zlib だと/usr/include/ に生成される <---- 今ここ。 ~ ~ -gcc-4.6.xのディレクトリにgmp , mpfr , mpc ,(あとついでにnewlib-1.19/newlibとlibgloss)のソースをぶちまけておくかsymbolic linkを張っておくと勝手にビルドして参照してくれるかとおもいきやさにあらず。 -結局gmp , mpfr , mpc の順にビルドして --with-gmp=/dir/to/install みたいに順繰りに参照を渡してやる必要がある。 -ubuntuのパッケージからgmpなどを入れる場合は、--with-gmpとかする必要はない. -けれどもmingwのバイナリーを作るときはパッケージから入れたgmpなどを参照してくれないので自力でやる。 -Windowsのmingw上で直接ビルドする場合も同様だ。 -参考URL: http://uchan.net/w/index.php?building-gcc ~ ~ ~ ------------ *クロスgccに飽きたので・・・ [#n9f51c07] -cygwinでいいや。 -まあ、作り方がわかったのでよしとしよう。 --実は入れていたcygwinがだいぶ古かったのと、bashとかmakeを殺していた(MinGWやWinARMにやらせて、sshとかだけ使ってた) ので、バージョンupしたらいろいろトラブったけどね。 --hos-v4がcygwin使ってたので素直に同じにした。 ~ gccでRX62N付録を遊んでいるページをぐぐる。 -http://www.nextftp.com/abe/ ----- H8とかmbedとかRX62NでZ80とか。 -http://ledmyturn.blogspot.com/ --- hos-v4のRX62N版紹介。 実際のところ、FRK-RX62Nに実装のRX62N7はカタログ値は 384KByte FlashROM, 64KByte SRAMですが 512Kbyte FlashROM, 96KByte SRAMが利用可能でした。 ので、FCURAMを使わずに、Z80メモリすべてをSRAMに割りつけます。 ''え゛?'' -http://berupon.b.sourceforge.jp/2011/09/03/cq-frk-rx62n%E3%81%A7usb/ - -renesasのUSBサンプルはひどい。というかでかすぎ複雑すぎ。gccへの移植は断念した。 もっと読む : [[RX62N]] ~ ~ ~ ------------ *RX62N:なんかダメっぽい感じ。 [#l9e3cc48] USB-CDC(エコーバック)がまともに動かない。 -teratermからの接続、手打ち入力はおK。 -WriteFile()で39バイト以下の書き込みだと、まあまあOK。(後述) =40byte以上書き込むと無反応になる。(なぜかわからない)無反応ではなくて文字欠けが起きるだけかもしれない。 -まあまあOKと書いたのは、1回書いたあと20mS待てばOKだ。10msとか、それ以下だと無応答か、文字欠け。 ソースを全部調べたけれど40のマジックナンバーを60とか64に直しても上記症状は全く改善されない。 -こんなにひどいとは思わなかった。 -打つ手が見当たらない。gcc環境のせいかもしれないが原因を見つけるのは無理かも。 ~ 気になったので、RenesasのxmodemサンプルをHEWのコンパイラでビルドしてみた。 -ビルド出来ない。 L1120 (W) Section address is not assigned to "L" L3100 (F) Section address overflow out of range : "L" -コンパイラのバージョンが新しいとだめっぽい。 -リンカー設定のセクションで"W*"とか書かれている後ろに"L*"を追加したらリンク出来た。 -xmodemサンプルを改造してエコーバックを試した限りでは、USB周りには何の欠陥もないように見える。 -gcc環境だけでの問題かもしれない。 ~ ~ ~ ------------ *RX62N:直ったかも。 [#a713220b] -gcc環境のソースをリファイン。 -要らないソースをどんどん削ってエッセンスだけにした。 -基本、HEW版とUSB部分は変わらないっぽい。 -USBの入出力方法をUSBCDC_Read()とUSBCDC_Write()のみに限定、余計なラッパーを全部排除してエコーバックを書いた。 -速度は1.8Mbps 出ている。字化けもしない。WindowsからのWriteFile()の単位を250byteほどに増やしてもハングしなくなった。非常に安定している。 gccでも何ら問題ないことが分かった。 -結局デバッガもシリアルprintも使わずに、LEDチカチカだけで直してしまった。''ぃぃのか?'' -これだから、OpenOCDもROMライター以外の機能を使おうとしないんだ。 ソースを整理できたのでUP。 もっと読む : [[RX62N]] -USBCDC_Read()とUSBCDC_Write()のみであれば、動作は完璧なんだけど、USBCDC_Read_Async()だと いろいろやっかい。 -特にタイマー割り込みからUSBCDC_Read_Async()を呼ぶと、非常に不可解な動作をする。 -全部フォアグラウンド側から呼ぶなら、まあ許せる範囲。 -%%原因全く不明。%% -%%もしかして、こいつら(USBCDC_*関数)並行動作できないんとちゃうか?%% --すげーつまらん原因だった。ある関数の戻り値が実はちゃんと使われていて、適当に実装すると見事にバグるという''自分で作った罠''にはまっていたらしい。 -SH2Aに手を出そうか出すまいか悩み中 --%%RXだけでも地雷が多いので、SH2Aは無し。%% ---地雷原進軍中。 --なんかFRK-SH2AはCPU内蔵Flashがなくて、SRAMが1MBもある。 --そいでもって、外付けのserial Flash(32kB x 2page)にあらかじめHEWモニターが入っているのだった。 --HEWモニターはUSB-CDCデバイスになっている。 --普通にHEWをインストールした状態では、このHEWモニターには接続できない。 --接続するためにはHEWの環境に、このモニター用のDLLをプラグインみたいにインストールしないとだめらしい。 -残念ながら、この基板を使うためには、Renesasサイトの登録と、HEW統合環境、SHコンパイラのダウンロードが必須になる。そうしないとターゲットにユーザープログラムを書き込めない。 -それから、serial Flashの書き換えは難易度が高いらしい。%%いまだに書き換えはおろかLチカサンプルのビルド実行すらままならない状態。%% ---ファームアップデート完了。read more [[SH2A]] ~ ~ ~ ------------ *電子ブロックMini [#u3153aaa] -買った。 -http://otonanokagaku.net/magazine/vol32/index.html -なかなか気に入った。 -大きさが手ごろ、値ごろ感もある。 -5x5ブロック程度で十分じゃん。学習用としても、ちょっとしたパズルとしても。 -EX150復刻版も持ってたけど、長らく放置状態。 -自分はSR-1AとかSR-2Aを死ぬほど遊び倒したクチなので、いまさら何かをすることはしないで、いまのところ小学生に遊ばせているけれど、 -さっそく魔改造している人が居た。 -やっぱりAVRの米粒とか入れて遊ぶのかな? ●Arduino発想の原点は「電子ブロック」~ 同氏はArduinoの最初のインスピレーションは,学研の電子ブロックから得られたと明かしました. -http://www.kumikomi.net/archives/2011/12/rp53mtm7.php?page=1 -なんかうれしい。 ~ ~ ~ ------------ *STM32F4−DISCOVERY [#p7122b22] -http://akizukidenshi.com/catalog/g/gM-05313/ -1650円 -大量購入向け? -とりあえず、STM8S-Discoveryみたいに、3枚くらい買っとくか。(大雑把) -またST-Link側をVersaloonにする遊びが流行るんだろうなぁ。 -USBがmicroなのがアレだな。480Mbpsはナシか。 ~ ~ ~ ~ ------------ *今週のプログラムTips [#d2e3e55d] ''エディタからタグジャンプできる関数リファレンスを作る。'' -なんてものを昔はしょぼいperlで書いてたりするんですが、最近のC++風の書き方に対応できなかったりするんで、 -ctags+perlで強化版を作ってみたり。 ~ -関数リファレンスが欲しいならDoxygenとかglobal-tags(gtags + htags)とかctagsとかがあるけれど、 -HTMLページを作ってくれるけれど、テキストエディタのタグジャンプ用ファイルは作れない。 そこで、 -ctags( Exuberant Ctags )のxrefオプション (-x)でクロスレファレンスを吐かせて、それをperlで加工する。 -ctagsはあらかじめインストールしておく。 -まあ、たったこれだけなので。 #!/usr/bin/perl sub gen_tag() { my ($line)=@_; $line =~ s/\n//; my ($id,$type,$lnum,$source,@etc)=split(/[ ]+/,$line); if($type eq 'function') { my $func = join(' ',@etc); print $source . ':' . $lnum . ":\t" . $func . "\n"; } } sub main() { my @buf = `ctags -R -x`; my $line; foreach $line(@buf) { &gen_tag($line); } } &main(); -以上。 - ~ ~ ~ ~ ------------ *今週のubuntu Tips [#a1ccab0c] -ubuntu 11.10は例によってデスクトップがUnity. -使う努力はしてみたものの、普通はダメだと諦める。--> Gnomeを入れる。 -さらに、最近の液晶は縦に短くタスキに長し(?)なので、上下にあるメニューバーをどっちかにまとめたい。 -以前のGnomeなら右クリックで「移動」メニューが出てきたのだが、11.10のやつは出ない。 コツ ''ALTを押しながら''右クリックすると、メニューバーの上のアイコンなどが「移動」出来るようになる。 -上のメニューやらアイコンを全部下に移動して、上のメニューバーを消す。消すメニューも''ALTを押しながら''右クリックのようだ。 ~ ~ ------------ *そして、今週の[[Android-x86:http://www.android-x86.org/]] [#pbc09643] -android-x86-4.0-eeepc-20111209.isoをVMWarePlayerに入れてみた。 -入れ方は、vmplayer.exeを立ち上げて、新規仮想マシンを作成、isoファイルを選択、OSはあとで入れる、にする。 -次に、VMの設定を変更する。SCSIを消して、IDEで仮想ドライブを作り直し、OSカーネル選択はOther Linux2.6にする。 -仮想マシンを起動して、isoをマウントすると、インストーラーが立ち上がるので、/dev/sda1を作って、そこに入れる。 --入れ方はまるで古いLinuxのインストーラーのまんまな感じ。 --fake SDカードも入れておく。 -インストールが終わると、Android OSが立ち上がり、初期設定メニューが出る。「日本語」を選んで、あとはガイド のとおりにすればAndroid 4.0が起動する。 -SDカード(IDE)も表示も全くOKなんだけれど、VMWareでは無線LANがeeepcではないからネット接続だけできない。 --困った <----今ここ ~ ~ ------------ *今週の[[SH2A]] [#if09340c] -シリアルデバッグ&ブートのための外部USB-シリアル変換回路(元は軽快電話付属Prolificケーブルの電話側コネクタをバラしてマイコンにつなげるようにしたもの:注TxDが5V振れる危険な奴。RxDは5Vトレラント) をSH2AのUART2に繋いだ。(ろくに確かめもせず) -シリアルブートのファームをSPIに焼いた。(HEW上でしか出来ない。これ毎回面倒くさい) -シリアルポートはOK。接続を確認。 -uploadしたプログラムが正常に動かない! --↑Teratermのfile uploadオプションで ''[ ]バイナリー''のチェックが抜けていただけだった。うーむ。 -teratermでuploadするのも面倒なので、w32termからコマンドラインでupload出来るようにした ''<---今ここ'' http://psp.dip.jp/web/jpg/sh2a.jpg ~ -同様のscif2/usb両対応の簡易ブートも存在する。 --http://www.kumikomi.net/interface/editors/2010/10/post_12.php →sh7264_usb_function_sample.zip --この中のbinファイルをシリアルROMに焼いて起動させる。USBが有効でないときは自動でscif2シリアル経由に切り替わる。 今週の目標: -とりあえず、sh7264_usb_function_sample.zipをgccでビルドしてみるテスト。 --ビルドはOKになった。 --vectorのセクションが正しい位置になるようにgcc対応の属性をつけてみた。 --いくつかの未定義関数を追加した。 --USBデバイスとしては認識するようになった。が、 --Lチカが最初の1回だけ実行したあとだんまりになる。全くもって''意味不明'' --Lチカだけ取り出して、LEDtestプロジェクト上でビルドしたものは正しくブリンクが継続する。 ~ -さらに試す。 --Lチカが最初の1回だけ実行したあとだんまりになる奴は、割り込み禁止状態で実行すると正しくブリンクが継続する。 --調べていくと、#pragma interrupt FUNCNAME みたいな奴がいっぱい並んでいた。 --注:gccでは#pragmaは''丸無視。'' --このような関数を __attribute__((interrupt))属性を付けまくってみたが、こんどはgccに丸無視された。 -酷い・・・ --どうやらSH2Aでは __attribute__((interrupt_handler)) とか nmi_handler みたいに書かないとだめっぽい。 --そう書くと、prologueでは全レジスタを保存してくれて、epilogueではrteで戻ってくれるようなコードに変わった。 --あと、gccオプションでは -m2a が要るらしい。objdumpするときは -m sh2a だ。 --けれども、暴走癖は直らない''謎。'' どうなってんの?SH2A ~ -うまくいくようになったらシリアルROMに焼いてみる。 --先は遠そうだ。 ~ **SH2Aはブート手順とかシリアルROMとかメモリーマップとかがいろいろ訳分からない。 [#fb331463] -シリアルROMの前半32KはHEWモニターなので触らない。 -シリアルROMの後半32Kは(今は)scif2/usb両対応簡易ブート(sh7264_usb_function_sample.zip)を焼いている。 -後半32Kのファームを使いたいときは、JPP2クローズ。 -後半32Kのファームを書き換えたいときは、JPP2オープンで起動して、HEWからSPIWriterUser.hwsを読み込んで、absとROMのBINをダウンロードして、CPUリセット、実行、という手順を踏む。 -通常のデバッグは1MBのSRAM(1c00_0000〜)を使う。 ~ というわけで、現在、順調に''積み基板''を消化中であった。~ 今週の標語: -のんびり、気長に[[SH2A]]. ~ ~ ~ ------ *音声合成LSI ATP3010F4 [#ndd8f4fe] -http://d.hatena.ne.jp/OkibiWorksLabo/20111204/aquestalkpico ~ -http://www.a-quest.com/products/atp3010f4.html データシート -http://www.a-quest.com/download/manual/atp3010f4_datasheet.pdf ~ -LSIというか、なんかATmega328Pに限りなく近いんですけど。 -Arduinoに挿しても動かせると言うし。 -最初はATmega328と大容量ROMの混載かと思ったけど、実はATmega328Pにファームを焼いただけなんじゃないかと。 --音声合成コアのworkサイズとcodeサイズがATmega328Pに収まっているからナノ。 -昔PC8801MkIISRのFM音源チップで喋らせていたあれに近い感じ? ~ そいえば、ATmega328Pとピン互換、DIPで大容量品とか高速品種とか、実はARMが入ってんだけどAVRがエミュモードで動くんだよみたいなPC98DO状態の28PINチップどっか出さないかな?? ~ ~ ------------ *最強にして最凶悪な国産MPU。[[SH2A]]の続き。 [#x0f73998] -今週は、[[SH2A]]のUSB-CDCサンプルをgccでビルドしようといろいろやっていた。 -いろいろ手直しして、Lチカが少しだけ動くようになったが、以下のような未解決問題があった。 --割り込み禁止で走らせたらLチカは正常に行なわれる。 --USB割り込み、タイマー割り込みのどちらかでも有効な状態で走らせたら、Lチカは最初の1tickだけ 実行されて、そこで停止する。 --タイマー割り込み側でLチカ処理を入れるととりあえず短時間は動作しているようだ。この場合フォアグラウンド側の処理は死んでいる。 ~ -SH2Aにはレジスタバンクという高速割り込み応答のための機構があり、これをONにした場合はレジスタの退避復帰がかなり省略できる(全部ではない)。 --ただし、RTEする前にRESBANK命令でレジスタpop(バンク切り替え)する必要がある。 --gccでは、 __attribute__((interrupt_handler,resbank))という属性を割り込み関数に付与することで、そのようなレジスタ復帰コードに切り替わる。 -で、resbankあり、なしの両方でいろいろやってみたが症状は改善せず。 ~ **解決策は'-m2a-nofpu'だった。 [#caa05106] -http://d.hatena.ne.jp/chakoku/20101212/1292114475 - 'nofpu'でコンパイルすると、何事も無かったように動く。 - けれども、fpuが使えない。 ''なんじゃこりゃー!'' ''fpscr''という浮動小数点まわりの設定レジスタが鬼門だそうだ・・・ -そもそもfloatを全く使っていないし、 -割り込みハンドラー内でもfloatレジスタを全く使っていないのに、 -単純なLチカがハングするって、いったいどういう仕様なのだろう・・・。 ちなみにRenesasのCコンパイラでは問題は起きないっぽい。(けれども、使う気も起きない。GUIコンパイラ大っ嫌い) ~ **gccによるUSB-CDCデバイスの動作を確認。 [#ne41113a] sh7264_usb_function_sample.zip -上記アーカイブをCQのサイトにあったcygwinのsh-elf-gccでビルドできるようにした。 -一応RAM上でusbデバイスになって、USB経由のローダーとしてなんとなく動作していることまでを確認できた。 -ただし、1段目のローダー(シリアルROMからブート。これも同一ソースのプログラムをHEWでビルドしたもの)はUSBモードではなくscif2シリアルモードで使用しないとうまくUSBデバイスを立ち上げてくれないっぽい。何故かはわからない。 -修正作業の大半はRenesasCにあってgccにない関数の補完と、#pragma interrupt を等価なgccディレクティブに書き換え、それからldスクリプトの修正とかISR_VECTORセクションの設定とかそんな感じだった。 -''最後の大ボス''は -m2a-nofpuが必要だったことだ。これはバイナリーをいくら追っかけても分からなかったのでgoogle先生(というかSH2Aに詳しい先達)に教えてもらった。 ミッション終了。 -ソース整理しないと。 read more: [[SH2A]] ~ ~ ------------ *最強にして最凶悪な国産MPU。FPUが使えるようにしてみた。 [#p784fe17] 今日の試行 -割り込みハンドラーをC記述からアセンブラ記述に切り替えられるようにしてみた。(ビルドスイッチ1個とソース書き換え1個で対応) -アセンブラ記述の割り込みハンドラーにしておいて、コンパイルオプションを -m2a-nofpu から -m2a (もしくは-m2a-single)に変更。 read more: [[SH2A]] -ブートローダーが動くようになったのでダウンロード(32k)&実行はほぼ一瞬で出来る。 ~ ~ ~ ------ *ARMコンパイラ・・・ [#b2b72efa] -積み基板の消化も一段落ついたところで、こんどはMinGWのcross-gccの作り方でも勉強しようかなと。 -ほら、sh-elf-gccがバグってるし、Sourceryも入手難になるらしいので。 ~ -cygwinはやっぱりビルド遅いよ。体感でMinGWの1/3くらいかな。-j 4 付けてるんだけどね。 -最近のintel CPUは速いし、HDDもSSD化したりとか、Gavotte使ってたりとか(相変わらずWinXP32bit) -マシンはどんどん速くなってるのにcygwinだけ遅く感じる。(比例して速くなってない。) ~ なんすかねー、やっぱりWinを捨ててubuntuですかねー。Win7に移行するくらいならubuntuでも一緒か。 ~ ~ ------------ *今日のSH2A [#t910eb20] -printf("%g",atan(1)*4);とかが出来なかったので、trap34()を置き換えてみた。 -適当なsyscalls.cをでっちあげて、_open,_write,_closeを実装してみた。 -printfは使えるようになったが、"%g"が駄目だ。なんでだろ?分からない。 -''皮肉なことに、-m2a-nofpuでビルドしたものは "%g"で正しく表示される'' - -m2aでビルドした場合は "%g"の結果は全部nanになる。 -atan(1)*4の結果の16進表現まではどうやら正しいようだ。 -なので、printfの実装のどこかに欠陥があると思われるが・・・・nofpuだとちゃんと動くんだよねー。こまったちゃん。 ''残念なお知らせ'' -その後いろいろやってみたのだが、SH2Aはgccでは正しい浮動小数演算のコードを吐いてくれないようだ。 -floatとdoubleの区別がおかしい。 - __fpscr_valuesという不思議なグローバル変数はだれも初期化していない。(おそらくcrt1.Sで初期化しろということだろう) - 適当に、0x00040001とかで初期化してはみたものの、動作が芳しくない。 - 現時点での結論としては、FPUを使いたいなら素直にHEWのCコンパイラを使う。 - あるいは、SH2Aには最初からFPUが付いてこなかったものとして諦める。 ''また基板ゴミが2枚増えた。'' ~ sh-elf-gccの挙動メモ -浮動小数演算の直前に頻繁に mov.l ___fpscr_values,r1 ; PC相対で ___fpscr_valuesのアドレス定数をr1に入れている lds.l @r1+,fpscr ; つまり、 fpscr = __fpscr_values[0] ということなのだろう。 -のようなコードを吐いている。 -このコードはすごいムカつく。 -なぜかというと、PC相対の定数フェッチと0x00040001という定数値のフェッチの2回のメモリーアクセスが(浮動小数演算のたびに)増えるからだ。FPUがいくら高速でも、このコードで全部台無しだ。 -どうやら__fpscr_values[2]の最初の値はfloat演算用のfpscr値で、2番目の値はdouble演算用のfpscr値ではなかろうかと推測した。 -そのように初期化してはみたものの、相変わらずnanしか表示しない。 ~ ~ ------------ *日刊 SH2A [#o322738c] -SH2AではないけれどCortex-M3用のFlash書き込みルーチンを書いていた。 -動くかどうかなんて分からない。 -SH2AはFPUが最初から乗ってないものと割り切って使う分には悪くないかもと思うようになった。 --FPU自体は''設計は壊れてる''けど、中身が壊れてるわけじゃないので、gccを直せば全く使えないわけじゃない。 -クロック速いし、SRAM多いし、何といってもUSB 2.0/Hi-Speed/HOSTありだ。しかもLPC2388みたくに熱くならないし。 -問題はブート方法だが、SDカードを繋ぐか、諦めてhostから毎回流し込むか・・・。 -とりあえず、SH2A用のブートローダーを書いたので、hostから毎回流し込むのはそれほど苦にはならない(速いし) read more: [[SH2A]] ~ ~ ~ ---------- *少し古い(''安定版''の) CodeSourcery_G++_Lite の入手方法 [#mdfa016a] - CodeSourcery はmentor graphicsに買収されてしまったので、G++_Liteの入手性が悪くなっている。 - MentorからDLする代替として、[[leaflabs:http://leaflabs.com/]]から、maple-ide-0.0.12-windowsxp32.zipを入手してインストールする方法がお勧め。 --そうすると、''maple-IDE''まで使えるようになるおまけ付き。 --さらに、GCCのVersionも4.4.1なので''-Os''オプション指定によるバグに当たらずに済むメリットがある。 --arm-none-eabi-gcc.exeの実行パスは、「maple-ide-0.0.12をインストールしたパス」の hardware/tools/arm/bin/ --もうひとつの選択肢としては、[[netx-arm-elf-gcc:http://sourceforge.jp/projects/sfnet_netx-arm-elf-gc/]]もある。 ~ ~ ~ ~ ~ ~ [[<前の月>2011-11]]|[[次の月>>2012-01]] ~
テキスト整形のルールを表示する
ログインまたはアカウント作成