SilentCのバージョンアップ 2月17日版 [SilentC]
ええっと、SilentCが2月17日版にバージョンアップされていますね。
http://www.silentsystem.jp/index.html
ダウンロードのページから落とす事ができます。
改版理由をもう少し詳しく書いて置くと、大量のTCPデータ受信が行われるとシーケンス番号の不整合を発生させてしまってセッションが中途半端に終了してしまうのでした。
※なんでそんな事を知っているのでしょう?。
※来月号は!!!
http://www.silentsystem.jp/index.html
ダウンロードのページから落とす事ができます。
改版理由をもう少し詳しく書いて置くと、大量のTCPデータ受信が行われるとシーケンス番号の不整合を発生させてしまってセッションが中途半端に終了してしまうのでした。
※なんでそんな事を知っているのでしょう?。
※来月号は!!!
Interface (インターフェース) 2009年 03月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2009/01/24
- メディア: 雑誌
今月号(2009年3月号)のInterfaceのSilentCの活用テクニック [SilentC]
読んでみましたが、ユーザープログラムの自動起動、つまりSilentC_RegistryのAutoRun=1は今の段階ではやらない方が良いかもしれませんね。
UserDriver側のSerialMainの中では無限ループに入っていて、例えばこのプログラムを停止してSilentCのコンソールに戻りたくなっても戻らない様な気がします。forループからのbreakもreturnも無いですからね。
ソースコードが付属していますので、AutoRun=1にする前に自分でプログラムの一部にトラップを入れて、コンソールに復帰するように作り変えた方が良いでしょう。
勿論シリアル/Ethernet変換専用機とするなら、サンプルのソースのままでも良い訳で。
もし改造する前にやっちゃって、帰って来なくなっちゃった時の回復は、以下のページを参考にしてみて下さい。
http://hamayan.blog.so-net.ne.jp/2008-12-12
UserDriver側のSerialMainの中では無限ループに入っていて、例えばこのプログラムを停止してSilentCのコンソールに戻りたくなっても戻らない様な気がします。forループからのbreakもreturnも無いですからね。
ソースコードが付属していますので、AutoRun=1にする前に自分でプログラムの一部にトラップを入れて、コンソールに復帰するように作り変えた方が良いでしょう。
勿論シリアル/Ethernet変換専用機とするなら、サンプルのソースのままでも良い訳で。
もし改造する前にやっちゃって、帰って来なくなっちゃった時の回復は、以下のページを参考にしてみて下さい。
http://hamayan.blog.so-net.ne.jp/2008-12-12
SilentCのバージョンアップ [SilentC]
ええっと、SilentCが12月29日版にバージョンアップされていますね。
http://www.silentsystem.jp/index.html
ダウンロードのページから落とす事ができます。
改版理由をもう少し詳しく書いて置くと、TCPセッションの終了時にデータの転送があると、つまりFIN+PSH+ACKのフラグが立っている場合、シーケンス番号を間違えてしまうのでした。
なんでそんな事知っているんでしょうね。
新しいInterface誌が出ている筈だが、近所の本屋には並んでいなかった、、、何故だ?。
http://www.silentsystem.jp/index.html
ダウンロードのページから落とす事ができます。
改版理由をもう少し詳しく書いて置くと、TCPセッションの終了時にデータの転送があると、つまりFIN+PSH+ACKのフラグが立っている場合、シーケンス番号を間違えてしまうのでした。
なんでそんな事知っているんでしょうね。
新しいInterface誌が出ている筈だが、近所の本屋には並んでいなかった、、、何故だ?。
Interface (インターフェース) 2009年 01月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/11/25
- メディア: 雑誌
Interface (インターフェース) 2009年 02月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/12/25
- メディア: 雑誌
でんすけ つまり人とペットとコンピューターの未来 [SilentC]
※フリスク主催の第二回ColdFireアプリケーションコンテスト応募作品のプレゼン資料のWEB版です。硬いイメージの文章を書いてしまって、ちょっと、いやかなり恥かしいなぁ。
今の日本は親世帯と子供世帯が別々に生活する核家族がかなりの割合を占めていると思われます。また東京等の大都市圏への一極集中が進み、親世帯と子供世帯が何か有った時に直ぐには駆けつける事が困難な距離を持ってしまう事も多いでしょう。
家族が離れて暮らすと、当然お互いに無事で居るのかが心配になってきます。もし離れて暮らしている親に突然何か起きたら!と言った懸念は子供にとっては当然です。 |
上記の電気ポットや冷蔵庫は商用サービスとして提供され、テレビ番組にて、実際に役に立った!、御年寄りの危機を救った等紹介されました。
テレビ番組の内容は、 家族と離れて暮らしている御年寄りが、トイレからでた所で突然足を動かす事ができなくなり、その場で転倒、動く事ができなくなりました。 この御年寄り家庭には先の電気ポットが置いてあり、トイレの前で倒れた為に、通常頻繁に利用される電気ポットが長時間使われない事となり、電気ポット自身が管理センターに異常として報告を行いました。 管理センターでは予め登録されている連絡先に電気ポットの利用が長時間無い事を連絡し、その連絡を受けた家族がお年より家庭に駆けつけ、すんでのところで救出したと言う話です。 上記は、「電気ポットが役に立った、とても良かった!」と言う話ですが、しかしこのシステムには大きな欠点が見えて来ます。つまり速報性が低い事です。 先の例では本人は動く事が出来ないだけで倒れた直後には意識はちゃんとありました。この時季節は夏で、この状態で救出までに長時間掛かってしまった為、脱水症状を起こし、本当に命の危険に曝された訳です。 そこでもっと速報性のあるシステムを考える訳です。例えば常に携帯電話を持ち歩いていれば直ぐに救出を求める事が出来たでしょう。しかし家の中で、しかもトイレに行く時まで常に携帯電話を持ち歩いている人はそれ程多くは無いでしょう。”携帯”電話なのですが、こと家の中に限れば携帯性が高くない。 また緊急性のある連絡では、意外とこの携帯電話のインタフェースは向いていない。こう言った機械を苦手としている御年寄りも多い訳です。 ならば電気ポットや冷蔵庫に携帯性を持たせれば良いのか?。または常に人と一緒に電気ポットや冷蔵庫が移動して廻れば良いのか?。 これは現実的では無い話なので、ここはハイテクを利用して移動可能なロボットの登場を待ちましょう!、、、。 何時まで?家の中を自由に移動でき、常に人の動きを把握できるロボットです。20年後?30年後ですか?。 もし人と行動を共にし、家の中を比較的自由に自立移動できる何か!が有ればこの問題は解決に向かいます。 そうです、人間には何万年も前から共生関係となる契約を結んだパートナーが居るじゃないですか。ワンちゃんです。 犬は極めて社会性の高い動物で、常にグループで行動する事を基本としています。家庭と言うグループの中で人間は犬の主であり、主従関係の従の位置にある犬は主の行動を観察し、常に共に行動をする事を望みます。しかもこれが極めて自然に行われるので、主である人間は犬に観察されている事を意識していません。 むしろこの関係は人間の心を癒し、ペットと共生する事に喜びを感じるものです。 家の近所にも沢山の御年寄りがワンちゃんを連れて散歩に出ている姿をみる事が出来ます。誰もがワンちゃんは大切な家族なのです。 |
使役犬と呼ばれる盲導犬や、介助犬等、ワンちゃんが人間をサポートする例は沢山あります。グループで行動する犬にとっては自身の役割を常に認識しており、グループの中で役に立つ事を望みます。役に立つ事で誉められれば喜び、なお更自分の役務に励みます。だから盲導犬や介助犬、それに限らず昔から狩猟や放牧などで活躍してきたのですから。 |
以下は異常発生時のメールメッセージ例です。 ------------------------------------ Caution! A serious accident occurred. Please contact it as soon as possible. ------------------------------------ |
以下は電池電圧低下検出時のメールメッセージ例です。 ------------------------------------ Warnig! Low battery detected. A Charge is needed. COUNT=00460 VBAT=03493 VCC=03273 TEMPERATURE=00136 ------------------------------------ |
この他の異常検出として、親機側は子機からの無線通信の間隔をチェックしており、通常1分周期で子機からの状態報告が送られてきますが、それが5分以上送られて来ない場合は子機異常としてやはりメールで送る事になっています。
以下は5分間タイムアウト検出時のメールメッセージ例です。 ------------------------------------ Warnig! Can't receive a radio. ------------------------------------ |
そこで試作2号では導電糸と言う電気を通す糸を使って電気配線とし、スイッチやLEDもこの布地に縫い付け易い物を使用しています。これでケーブルやLED、スイッチまでもが服と一体化しているので、装着性や動きは格段に良くなりました。
写真は胸の辺りに付けたLEDとスイッチです。手芸に関して全く持って才能が無いので、とてもでは無いですが綺麗とは言い難いですが、一応これでも機能しております。 |
ですがこの導電糸を使った方法にも問題が有ります。まず耐久性です。縫製が下手な事は置いておいて、どの程度洗濯に耐えられるかが不明です。また通常の糸に比べるとこの導電糸はほつれ易い様に感じました。
次に短絡の問題です。当然ですが電気を通す糸が剥き出しでそこにある訳です。それが縫い付けられているのは基板の様にある程度形状が変化しない物ではなく”布”ですから。皺が寄ったりすれば簡単に短絡を起こします。 何らかの対策が必要です。 ですが、この方法は可能性を感じます。常に改良を行っていく価値は有ると思います。 |
さて、今回の解説ではInterface誌付録基板の解説はほとんど行っていません。全然ですね。 これは付録基板に興味が無いとかそう言った事ではなく、この基板とそれに搭載されているSilentCが成熟しているからです。もう、提供されている機能をそのまま使うだけ!と言ったレベルまで完成されています。 これは楽でした。自分でプロトコルスタックを含めて実行環境を作ったら、きっとそれの苦労話ばっかりでしょうからね。 |
SilentC、、、やっちまった。 [SilentC]
経緯はこんな感じ。
ユーザードライバーにアクセスするプログラムを作成し、それを起動早々動かす為にAutoRun = 1としていました。
その後ユーザードライバーの内容を変更する為にTFTPでアップし、書き換えを行います。この時嫌な予感がしていたのですが、そのまま再起動、、、動かん。
そうです、新しいユーザードライバーは従来の物と似ても似つかない為にユーザードライバーに制御が移されたとたん暴走してしまって帰って来ません。
もうなにをやってもこの暴走を食い止める事はできませんでした。TELNETではなくシリアルでコンソールを起動しようとしても駄目です。
パラレルのデバッカーを作ってあったのでファイル領域を書き換えようと色々しましたが、FLASHの書き換え方がさっぱり判らんOTL。
しょうがないので書き換え専用のColdFire基板で書き換えを行います、、、。その為に一枚用意してはあったのですが、、、勿体無いなぁ。
しかしそこでふと思い出しました。ここ最近何度かSILENTC.BINの書き換えを行っているのですが、その度にMACアドレスの再設定をしているじゃないですか。と言う事は、、、。
で、上の写真ですが、素のColdFire基板ではなく既に色々設定済みの基板をマスターにし、飛ばしてしまった基板へのコピーを行っている所です。
無事コピーが完了したら、修復した基板のみネットワークに接続し、再起動です。ちゃんと起動します。
そこでまずはIPアドレスをブラウザを使って修正。次に再起動後SILENTC.BINを転送しupdate。再び再起動して今度はmacsetを行ってこの基板専用のコードを入力して完了です。
そうです。もう予備基板を書き換え専用として保存して置く必要は無いのです。しっかり使ってやりましょう。
macアドレスが重複してしまう問題は、SILENTC.BINを上書きする事で解決できるのですから。
Interface (インターフェース) 2008年 09月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/07/25
- メディア: 雑誌
Interface (インターフェース) 2009年 01月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/11/25
- メディア: 雑誌
SilentCでMP3再生 [SilentC]
しかしTFTPの1パケットは512byteが上限であり、受信側は一回一回ACK応答を返す事から、どうしても128KbpsのMP3の再生が限界でした。
もう仕方が無いので物凄く久し振りにPC側アプリケーションを作成してしまいましたよ。自作なので512byte上限に囚われる事無く、Ethernetの1回の最大サイズである1472byte(これはヘッダー込みのサイズ)のパケットで転送するようにしました。
これで無事に192KbpsのMP3も再生できています。
一番下の図は緑色の山が並んでいますが、左3つは192Kbpsの音楽を再生した時のトラフィック、一番右の山が128Kbpsの音楽を再生した様子です。
結構楽しい!
Interface (インターフェース) 2009年 01月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/11/25
- メディア: 雑誌
SilentCのバージョンアップの密かな余談 [SilentC]
サイレントシステムさんへのリンク
http://www.silentsystem.jp/
11月21日版がアップされております。
密かに余談、予断?2
実は私は無限ループの記述はwhile派なのです。
しかしCodeWarriorを使っているとそうは行きません。while(1)なんて書くともう、一々、いちいち、コンパイラが
「何時でも何処でも真じゃねえか、ボケェ!」と怒るからです。
しょうが無いので改宗してfor(;;)、、、、なんだかなぁ、後が空欄って所が。
勿体無いので初期化用の代入文を入れてしまいます。
for(i=0;;)
これが発端でした。
http://www.silentsystem.jp/
11月21日版がアップされております。
密かに余談、予断?2
実は私は無限ループの記述はwhile派なのです。
しかしCodeWarriorを使っているとそうは行きません。while(1)なんて書くともう、一々、いちいち、コンパイラが
「何時でも何処でも真じゃねえか、ボケェ!」と怒るからです。
しょうが無いので改宗してfor(;;)、、、、なんだかなぁ、後が空欄って所が。
勿体無いので初期化用の代入文を入れてしまいます。
for(i=0;;)
これが発端でした。
Interface (インターフェース) 2009年 01月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/11/25
- メディア: 雑誌
SilentCのユーザードライバーを試す前に COLDFIRE.BINを作ろう [SilentC]
※例によってかなり適当にやっているので、あまり信用しない様に
Net Set Radioには32MbitのシリアルROMが搭載されています。勿論ここには色々なデータを入れて置いたり、ロガーのストレージとしての利用も可能です。
今回はNet Set RadioのMP3再生機能を使って音声や音楽を鳴らす計画を立てました。ちなみに未だにSilentCからのコントロールではありません。
先のシリアルROMにMP3のデータを入れれば良いのでしょうけれど、その為には外からデータをNet Set Radioに送り込むPCのプログラムとか、Net Set Radio内で動くシリアルROMへの書き込みプログラムとか、それなりのユーザーインタフェースとか色々作らねばならないので、なかなか気が進みませんでした。
で、考えてみるとSilentC以外の領域がまだFLASH ROMに128Kbyte残っており、その領域への書き込みはSilentCがやってくれるではないですか。
と言う訳で後半128Kbyteに書き込むべきデータ、つまりCOLDFIRE.BINの製作です。
まずは元になるMP3データの作成です。音声は音声合成ソフトを使ってWAVファイルを作成し、それをMP3に変換しました。
問題は音楽データです。書き込み可能なROM領域は最大で128Kbyteしか無いのですが、元のMP3データファイルは1.2M以上あるファイルです。ビットレートをうーんと落としてなんと16Kbpsでようやく105Kbyteとなりました。高音が抜けてしまってこもった感じになってしまいましたが、まあしょうがない。
これらMP3データをCソースファイルに変換します。変換する時に、ファイルの属性(音データの開始アドレスとかサイズとか)のレコードも一緒に作って置きます。このレコードにユーザードライバーで動くプログラムからアクセスし、音を出すのです。
作ったCソースをCodeWarriorでROMデータ→BINファイルに変換します。
FLASH領域に書き込むデータを作るので、TargetsはINTERNAL_FLASHを使用します。
作成するCOLDFIRE.BINにはコードは含まれていないので、コードを生成する物は一切REMOVEしてしまいます。mainは勿論、start何とかとか、exception何とかとか。
lcfファイルも不必要と思われる所はコメントアウトしてしまいます。
INTERNAL_FLASH settingのLinker→ColdFire Linkerでは、まずエントリーポイントを削除してしまいます。一々開発環境に怒られますが、だってデータしか無くてエントリーする物が無いのですから。怒られても無視しておきます。
Force Action Symbolsには必要な変数名を記述しておきます。
_calling_mp3,_mikupops_mp3,_charge_mp3,_lost_mp3
更に出来上がったSフォーマットのファイルからバイナリーファイルを作成するPost Linkerの設定も行います。このページ辺りを見てください。
http://hamayan.blog.so-net.ne.jp/2008-11-30-1
batファイルはCOLDFIRE.BINを作る様に変更が必要です。
出来上がったCOLDFIRE.BINをtftpを使ってColdFire基板に送り込みます。ここは簡単だ!。
あとはユーザードライバー側から先のファイルプロパティへアクセスし(別々のプロジェクトなのでリンカーでアドレスの解決ができません。COLDFIRE.BINを作った時に出力されるMAPファイルを見ながら、絶対アドレスを指定してアクセスします。)
全部で112Kbyteの領域サイズとなってしまったので、スカッとGDBスタブは削除されてしまいました。まぁ良いか。
Net Set Radioには32MbitのシリアルROMが搭載されています。勿論ここには色々なデータを入れて置いたり、ロガーのストレージとしての利用も可能です。
今回はNet Set RadioのMP3再生機能を使って音声や音楽を鳴らす計画を立てました。ちなみに未だにSilentCからのコントロールではありません。
先のシリアルROMにMP3のデータを入れれば良いのでしょうけれど、その為には外からデータをNet Set Radioに送り込むPCのプログラムとか、Net Set Radio内で動くシリアルROMへの書き込みプログラムとか、それなりのユーザーインタフェースとか色々作らねばならないので、なかなか気が進みませんでした。
で、考えてみるとSilentC以外の領域がまだFLASH ROMに128Kbyte残っており、その領域への書き込みはSilentCがやってくれるではないですか。
と言う訳で後半128Kbyteに書き込むべきデータ、つまりCOLDFIRE.BINの製作です。
まずは元になるMP3データの作成です。音声は音声合成ソフトを使ってWAVファイルを作成し、それをMP3に変換しました。
問題は音楽データです。書き込み可能なROM領域は最大で128Kbyteしか無いのですが、元のMP3データファイルは1.2M以上あるファイルです。ビットレートをうーんと落としてなんと16Kbpsでようやく105Kbyteとなりました。高音が抜けてしまってこもった感じになってしまいましたが、まあしょうがない。
これらMP3データをCソースファイルに変換します。変換する時に、ファイルの属性(音データの開始アドレスとかサイズとか)のレコードも一緒に作って置きます。このレコードにユーザードライバーで動くプログラムからアクセスし、音を出すのです。
static const unsigned char mikupops[] = { 0xFF,0xE3,0x28,0x64,0x00,0x00,0x00,0x01,0xA4,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x48,0x00,0x00,0x00,0x00,0x4C,0x41,0x4D,0x45,0x33,0x2E,0x39,0x37,0x55,0x55,0x55,
const FILE_PROPERTIES mikupops_mp3 = { "mikupops.mp3", "2008/11/30 21:44:56", 0, (void *)mikupops, "", (void *)0, 107280, };
作ったCソースをCodeWarriorでROMデータ→BINファイルに変換します。
FLASH領域に書き込むデータを作るので、TargetsはINTERNAL_FLASHを使用します。
作成するCOLDFIRE.BINにはコードは含まれていないので、コードを生成する物は一切REMOVEしてしまいます。mainは勿論、start何とかとか、exception何とかとか。
lcfファイルも不必要と思われる所はコメントアウトしてしまいます。
# Sample Linker Command File for CodeWarrior for ColdFire KEEP_SECTION {.vectortable} # Memory ranges MEMORY { code (RX) : ORIGIN = 0x00020000, LENGTH = 0x00020000 } SECTIONS { # Heap and Stack sizes definition # MCF52233 Derivative Memory map definitions from linker command files: # __IPSBAR, __RAMBAR, __RAMBAR_SIZE, __FLASHBAR, __FLASHBAR_SIZE linker # symbols must be defined in the linker command file. # Memory Mapped Registers (IPSBAR= 0x40000000) # ___IPSBAR = 0x40000000; # 32 Kbytes Internal SRAM ___RAMBAR = 0x20000000; ___RAMBAR_SIZE = 0x00008000; # 256 KByte Internal Flash Memory ___FLASHBAR = 0x00000000; ___FLASHBAR_SIZE = 0x00040000; ___SP_AFTER_RESET = ___RAMBAR + ___RAMBAR_SIZE - 4; # .userram : {} > userram .code : {} > code # .vectorram : {} > vectorram # .vectors : # { # exceptions.c(.vectortable) # . = ALIGN (0x4); # } > vectorrom # .cfmprotect : # { # *(.cfmconfig) # . = ALIGN (0x4); # } > cfmprotrom .text : { *(.text) . = ALIGN (0x4); *(.rodata) . = ALIGN (0x4); ___ROM_AT = .; ___DATA_ROM = .; } >> code # .data : AT(___ROM_AT) # { # ___DATA_RAM = .; # . = ALIGN(0x4); # *(.exception) # . = ALIGN(0x4); # __exception_table_start__ = .; # EXCEPTION # __exception_table_end__ = .; # # ___sinit__ = .; # STATICINIT # __START_DATA = .; # # *(.data) # . = ALIGN (0x4); # __END_DATA = .; # # __START_SDATA = .; # *(.sdata) # . = ALIGN (0x4); # __END_SDATA = .; # # ___DATA_END = .; # __SDA_BASE = .; # . = ALIGN (0x4); # } >> userram # .bss : # { # ___BSS_START = .; # __START_SBSS = .; # *(.sbss) # . = ALIGN (0x4); # *(SCOMMON) # __END_SBSS = .; # # __START_BSS = .; # *(.bss) # . = ALIGN (0x4); # *(COMMON) # __END_BSS = .; # ___BSS_END = .; # # . = ALIGN(0x4); # } >> userram # .custom : # { # ___HEAP_START = .; # ___heap_addr = ___HEAP_START; # ___HEAP_END = ___HEAP_START + ___heap_size; # ___SP_END = ___HEAP_END; # ___SP_INIT = ___SP_END + ___stack_size; # # . = ALIGN (0x4); # } >> userram # ___VECTOR_RAM = ADDR(.vectorram); # __SP_INIT = ___SP_INIT; # _romp_at = ___ROM_AT + SIZEOF(.data); # .romp : AT(_romp_at) # { # __S_romp = _romp_at; # WRITEW(___ROM_AT); # WRITEW(ADDR(.data)); # WRITEW(SIZEOF(.data)); # WRITEW(0); # WRITEW(0); # WRITEW(0); } }
INTERNAL_FLASH settingのLinker→ColdFire Linkerでは、まずエントリーポイントを削除してしまいます。一々開発環境に怒られますが、だってデータしか無くてエントリーする物が無いのですから。怒られても無視しておきます。
Force Action Symbolsには必要な変数名を記述しておきます。
_calling_mp3,_mikupops_mp3,_charge_mp3,_lost_mp3
更に出来上がったSフォーマットのファイルからバイナリーファイルを作成するPost Linkerの設定も行います。このページ辺りを見てください。
http://hamayan.blog.so-net.ne.jp/2008-11-30-1
batファイルはCOLDFIRE.BINを作る様に変更が必要です。
MakeDC32 "MCF52233_INTERNAL_FLASH.elf.S19" 00020000 00040000 del COLDFIRE.BIN ren SILENTC.BIN COLDFIRE.BIN
出来上がったCOLDFIRE.BINをtftpを使ってColdFire基板に送り込みます。ここは簡単だ!。
あとはユーザードライバー側から先のファイルプロパティへアクセスし(別々のプロジェクトなのでリンカーでアドレスの解決ができません。COLDFIRE.BINを作った時に出力されるMAPファイルを見ながら、絶対アドレスを指定してアクセスします。)
miku = (FILE_PROPERTIES *)0x3C174; /*ミクミク*/ VS1011e_SDI_Write( miku->file, (unsigned long)miku->size );
全部で112Kbyteの領域サイズとなってしまったので、スカッとGDBスタブは削除されてしまいました。まぁ良いか。
Interface (インターフェース) 2009年 01月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/11/25
- メディア: 雑誌
SilentCのユーザードライバーを試す前に ジャンプテーブルを作ろう [SilentC]
どうもこの環境はさっぱり使い方が判っておりません。こんな時参考にするのがウイザードが生成した設定やコードを見て、ああでもない、こうでもない、とTry & Errorを繰り返す訳ですが。フリスクさん!日本語のマニュアル用意しようよ!。
SilentCからユーザードライバーにアクセスする為には、ユーザードライバーの先頭領域にジャンプテーブルを用意しなくてはいけません。関数のアドレスの配列を用意します。勿論C言語で記述します。
この場合参考になりそうなのがexceptions.cです。ここにはリセットベクターを含む割込み処理のベクターテーブルが記述されていますので、これを参考にでっちあげます。試しにvectors.cと言う名前のファイルを作成し、以下の様に記述して適当な関数のアドレスを並べてみました。
勿論lcfファイルの変更も必要です。
MAPを見る限り、無事に配置できたみたいです。
※これが正しいやり方かどうか、まったくもって判りません。信用しない様にして下さい。
SilentCからユーザードライバーにアクセスする為には、ユーザードライバーの先頭領域にジャンプテーブルを用意しなくてはいけません。関数のアドレスの配列を用意します。勿論C言語で記述します。
この場合参考になりそうなのがexceptions.cです。ここにはリセットベクターを含む割込み処理のベクターテーブルが記述されていますので、これを参考にでっちあげます。試しにvectors.cと言う名前のファイルを作成し、以下の様に記述して適当な関数のアドレスを並べてみました。
extern void main( unsigned long argc ); extern void soft_spi_init( unsigned long argc ); extern void AdrSet( unsigned long adr ); extern void SizeSet( unsigned long size ); #pragma define_section vectortable ".vectortable" far_absolute R const __declspec(vectortable) void *jump_vectors[] = { main, soft_spi_init, AdrSet, SizeSet, };
勿論lcfファイルの変更も必要です。
.vectors : { vectors.c(.vectortable) . = ALIGN (0x4); } >> code
MAPを見る限り、無事に配置できたみたいです。
# .vectors 20000000 00000010 .vectortable jump_vectors (vectors.c) # .text 20000010 000000BC .text main (main.c) 200000CC 00000004 .text _ExitProcess (startcf.c) 200000D0 0000015E .text soft_spi_init (soft_spi.c) 2000022E 00000012 .text AdrSet (soft_spi.c) 20000240 00000012 .text SizeSet (soft_spi.c)
※これが正しいやり方かどうか、まったくもって判りません。信用しない様にして下さい。
Interface (インターフェース) 2009年 01月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/11/25
- メディア: 雑誌
SilentCのユーザードライバーを試す前に バイナリーファイルを作成したいんだよ~~ [SilentC]
※上手く行かないので、batファイルだけ別にダブルクリックで動かす事にしました!とさ。はぁ、後ろ向きだなぁ。
サイレントシステムさんが提供しているUserDirverプロジェクトファイルを開くと、CodeWarriorのリンカー処理の一部に、BatRunner PostLinkerと言う手順が追加されている事が判ります。
それでこの手順をExport Pannelでファイル出力し、それを自分のプロジェクトのLinkerの所でImportしたのですが、、、上手く行きません。
エラーダイアログの内容は、
13行目辺りに何か有って、異なるパネルからのインポートを試みている?。さっぱり訳が判らん。
その問題のxmlファイル
サイレントシステムさんが提供しているUserDirverプロジェクトファイルを開くと、CodeWarriorのリンカー処理の一部に、BatRunner PostLinkerと言う手順が追加されている事が判ります。
それでこの手順をExport Pannelでファイル出力し、それを自分のプロジェクトのLinkerの所でImportしたのですが、、、上手く行きません。
エラーダイアログの内容は、
Error Imporing XML file "BatRunner PostLinker.xml" near line 13. The file you're trying to import was exported from a different panel.
13行目辺りに何か有って、異なるパネルからのインポートを試みている?。さっぱり訳が判らん。
その問題のxmlファイル
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <?codewarrior exportversion="1.0" ideversion="5.5" ?> <!DOCTYPE EXPORTEDPANEL [ <!ELEMENT EXPORTEDPANEL (NAME, (SETTINGLIST|VALUE))> <!ELEMENT SETTINGLIST (SETTING+)> <!ELEMENT SETTING (NAME?, (VALUE|(SETTING+)))> <!ELEMENT NAME (#PCDATA)> <!ELEMENT VALUE (#PCDATA)> ]> <EXPORTEDPANEL> <NAME>BatchRunner Panel</NAME> <SETTINGLIST> <SETTING><NAME>MWBatchRunnerPostLinker_BatchPath</NAME> <SETTING><NAME>Path</NAME><VALUE>bin\MakeUserDriver.bat</VALUE></SETTING> <SETTING><NAME>PathFormat</NAME><VALUE>Windows</VALUE></SETTING> <SETTING><NAME>PathRoot</NAME><VALUE>Project</VALUE></SETTING> </SETTING> <SETTING><NAME>MWBatchRunnerPostLinker_SendParam</NAME><VALUE>false</VALUE></SETTING> <SETTING><NAME>MWBatchRunnerPostLinker_Argument</NAME><VALUE>FileName</VALUE></SETTING> <SETTING><NAME>MWBatchRunnerPostLinker_WorkingDir</NAME><VALUE>LinkerOutputDir</VALUE></SETTING> <SETTING><NAME>MWBatchRunnerPostLinker_CmdWindow</NAME><VALUE>Minimize</VALUE></SETTING> </SETTINGLIST> </EXPORTEDPANEL>
Interface (インターフェース) 2009年 01月号 [雑誌]
- 作者:
- 出版社/メーカー: CQ出版
- 発売日: 2008/11/25
- メディア: 雑誌