その後ユーザードライバーの内容を変更する為にTFTPでアップし、書き換えを行います。この時嫌な予感がしていたのですが、そのまま再起動、、、動かん。新しいユーザードライバーは従来の物と似ても似つかない為にユーザードライバーに制御が移されたとたん暴走してしまって帰って来ません。なにをやってもこの暴走を食い止める事はできませんでした。TELNETではなくシリアルでコンソールを起動しようとしても駄目です。パラレルのデバッカーを作ってあったのでファイル領域を書き換えようと色々しましたが、FLASHの書き換え方がさっぱり判らんOTL。しょうがないので書き換え専用のColdFire基板で書き換えを行います、、、。その為に一枚用意してはあったのですが、、、勿体無いなぁ。そこでふと思い出しました。ここ最近何度かSILENTC.BINの書き換えを行っているのですが、その度にMACアドレスの再設定をしているじゃないですか。上の写真ですが、素のColdFire基板ではなく既に色々設定済みの基板をマスターにし、飛ばしてしまった基板へのコピーを行っている所です。無事コピーが完了したら、修復した基板のみネットワークに接続し、再起動です。そこでまずはIPアドレスをブラウザを使って修正。次に再起動後SILENTC.BINを転送しupdate。再起動して今度はmacsetを行ってこの基板専用のコードを入力して完了です。予備基板を書き換え専用として保存して置く必要は無いのです。macアドレスが重複してしまう問題は、SILENTC.BINを上書きする事で解決できるのですから。[SilentC]やってみました。当初はPC側アプリケーションを作るのが面倒だったので、SilentCとユーザードライバーでTFTPの書き込みのみのサーバー機能を実現し、PC側アプリケーションにはTFTPクライアントを用意してファイルの内容をストリーミングデータとして受信、MP3デコーダーへ転送と言う手順で再生します。TFTPの1パケットは512byteが上限であり、受信側は一回一回ACK応答を返す事から、どうしても128KbpsのMP3の再生が限界でした。仕方が無いので物凄く久し振りにPC側アプリケーションを作成してしまいましたよ。自作なので512byte上限に囚われる事無く、Ethernetの1回の最大サイズである1472byte(これはヘッダー込みのサイズ)のパケットで転送するようにしました。これで無事に192KbpsのMP3も再生できています。下の図は緑色の山が並んでいますが、左3つは192Kbpsの音楽を再生した時のトラフィック、一番右の山が128Kbpsの音楽を再生した様子です。[SilentC]サイレントシステムさんへのリンクhttp://www.silentsystem.jp/11月21日版がアップされております。密かに余談、予断?2実は私は無限ループの記述はwhile派なのです。CodeWarriorを使っているとそうは行きません。while(1)なんて書くともう、一々、いちいち、コンパイラが「何時でも何処でも真じゃねえか、ボケェ!」と怒るからです。しょうが無いので改宗してfor(;;)、、、、なんだかなぁ、後が空欄って所が。勿体無いので初期化用の代入文を入れてしまいます。for(i=0;;)これが発端でした。Radioには32MbitのシリアルROMが搭載されています。ここには色々なデータを入れて置いたり、ロガーのストレージとしての利用も可能です。RadioのMP3再生機能を使って音声や音楽を鳴らす計画を立てました。ちなみに未だにSilentCからのコントロールではありません。Radio内で動くシリアルROMへの書き込みプログラムとか、それなりのユーザーインタフェースとか色々作らねばならないので、なかなか気が進みませんでした。ROMに128Kbyte残っており、その領域への書き込みはSilentCがやってくれるではないですか。言う訳で後半128Kbyteに書き込むべきデータ、つまりCOLDFIRE.BINの製作です。元になるMP3データの作成です。音声は音声合成ソフトを使ってWAVファイルを作成し、それをMP3に変換しました。問題は音楽データです。書き込み可能なROM領域は最大で128Kbyteしか無いのですが、元のMP3データファイルは1.2M以上あるファイルです。ビットレートをうーんと落としてなんと16Kbpsでようやく105Kbyteとなりました。高音が抜けてしまってこもった感じになってしまいましたが、まあしょうがない。これらMP3データをCソースファイルに変換します。変換する時に、ファイルの属性(音データの開始アドレスとかサイズとか)のレコードも一緒に作って置きます。このレコードにユーザードライバーで動くプログラムからアクセスし、音を出すのです。*)0,107280,};作ったCソースをCodeWarriorでROMデータ→BINファイルに変換します。FLASH領域に書き込むデータを作るので、TargetsはINTERNAL_FLASHを使用します。作成するCOLDFIRE.BINにはコードは含まれていないので、コードを生成する物は一切REMOVEしてしまいます。mainは勿論、start何とかとか、exception何とかとか。lcfファイルも不必要と思われる所はコメントアウトしてしまいます。Linkerでは、まずエントリーポイントを削除してしまいます。一々開発環境に怒られますが、だってデータしか無くてエントリーする物が無いのですから。怒られても無視しておきます。Symbolsには必要な変数名を記述しておきます。Linkerの設定も行います。このページ辺りを見てください。http://hamayan.blog.so-net.ne.jp/2008-11-30-1batファイルはCOLDFIRE.BINを作る様に変更が必要です。COLDFIRE.BIN出来上がったCOLDFIRE.BINをtftpを使ってColdFire基板に送り込みます。あとはユーザードライバー側から先のファイルプロパティへアクセスし(別々のプロジェクトなのでリンカーでアドレスの解決ができません。COLDFIRE.BINを作った時に出力されるMAPファイルを見ながら、絶対アドレスを指定してアクセスします。);全部で112Kbyteの領域サイズとなってしまったので、スカッとGDBスタブは削除されてしまいました。[SilentC]どうもこの環境はさっぱり使い方が判っておりません。Errorを繰り返す訳ですが。フリスクさん!日本語のマニュアル用意しようよ!。SilentCからユーザードライバーにアクセスする為には、ユーザードライバーの先頭領域にジャンプテーブルを用意しなくてはいけません。関数のアドレスの配列を用意します。この場合参考になりそうなのがexceptions.cです。ここにはリセットベクターを含む割込み処理のベクターテーブルが記述されていますので、これを参考にでっちあげます。試しにvectors.cと言う名前のファイルを作成し、以下の様に記述して適当な関数のアドレスを並べてみました。SizeSet,};勿論lcfファイルの変更も必要です。codeMAPを見る限り、無事に配置できたみたいです。SizeSet(soft_spi.c)※これが正しいやり方かどうか、まったくもって判りません。信用しない様にして下さい。[SilentC]※上手く行かないので、batファイルだけ別にダブルクリックで動かす事にしました!とさ。はぁ、後ろ向きだなぁ。PostLinkerと言う手順が追加されている事が判ります。Pannelでファイル出力し、それを自分のプロジェクトのLinkerの所でImportしたのですが、、、上手く行きません。panel.13行目辺りに何か有って、異なるパネルからのインポートを試みている?。最近のコメントこんなものでよろしければ。場合..ありがとうございます。Electronicsアットマークエレ不要なデバイスドライバーを削除ダウンロードInterface付属SH2基板のSRAM有り/無しデバックモニタとHOS-V4同梱バージョンHOS本のサンプルをH8/3048Fでデバックする為のデバックモニタH8/3048Fのセクション情報ファイルインポートして使います。