SSブログ

一部のサンプルプログラムが動かなかった [書籍ITRON本]

オーム社のサーバー
http://www.ohmsha.co.jp/data/link/4-274-06604-5/index.htm
からダウンロードできるサンプルプログラムの内、GCC向けのサンプルのチュートリアル11の3で、正常に動作しない事に気付きました。

結局原因は、Project HOSのサイト
https://sourceforge.jp/projects/hos/
から落とせるHOSのリリースバージョンへ、幾つかあてたパッチに失敗していたらしく、再度パッチをあて直したら動く様になりました。

リリースバージョンとパッチの関係について、いづれサポートページ
http://hamayan.ddo.jp/~hamayan/so-net/book1.html
に書きますね。



ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

  • 作者: 浜原 和明
  • 出版社/メーカー: オーム社
  • 発売日: 2005/04/25
  • メディア: 単行本


nice!(0)  コメント(105)  トラックバック(0) 

nice! 0

コメント 105

hamayan

サポートページに、GCC用修正版のサンプルの掲載を始めました。
by hamayan (2005-05-02 23:17) 

Miw

Miwと申します。以前、メールにてHewでのHOSの作り方を教えていただいたものです。その節はお世話になりました。
さて、HOSの本を買いました。
当方は、Hew3.0 + C 3.0A という変則的な環境でやってます。オームのHPからサンプルをダウンロードしたのですが、展開したワークスペースファイルを読めませんでした。
気をとりなおして、本文の付録Aにそってカーネルライブラリのコンパイルを試してみますね。

今後ともよろしくお願いします。
by Miw (2005-05-03 15:19) 

hamayan

ワークスペースの設定ファイル(拡張子がHWS)はテキストで書かれていて、その先頭にバージョン番号が記載されているのですが、これが一致しないと上手く読めないことが有るみたいです。どれが、どの様に影響して読めないのか判らないのですが。

煩雑ですが、自分の環境下で一発作ってしまった方が、後々良い結果をもたらすと思われます。
プロジェクトの手抜きコピーなんかも、そのうち紹介しますね。
by hamayan (2005-05-03 22:53) 

Miw

とりあえず、gccで動かしてみました。
Hew自体の環境も、うちのは少しおかしいようです。
再インストールかな?
by Miw (2005-05-04 22:42) 

hamayan

ですね。
これはツール入門ではないので、都合の良い方のツールを使って見てください。
by hamayan (2005-05-05 08:40) 

nori

チュートリアル3の2でこけました。暴走してます。
うちの環境が変態かな?
win2000 sp4のcygwin1005.12.0.0
binutiis 2.15 newlib1.13.0 gcc3.4.3です。
HOSのソースはCVSからもってきました。
Cの勉強の教科書にしてます。
66ページのMonitorTaskの10行がswtichになってますよ。
by nori (2005-05-06 23:02) 

nori

ホームページ見てるのでいろいろ試してみます。
2,3年かかるかな?
by nori (2005-05-06 23:09) 

nori

ついでにもう一つ、印刷のかすれたのが有ります。
私の買った本の66ページの2行目の白抜き?
戻り値 説明 の右側がかすれて31ページの3行目の文字が見えます。

 
by nori (2005-05-06 23:43) 

hamayan

noriさん、御購入後、色々試されているようで、ありがとうございます。
まずチュートリアル3の2の暴走ですが、リリースバージョン、CVS共にパッチをあてる必要が有ります。
詳細はサポートページに書いて置きました。
http://hamayan.ddo.jp/~hamayan/so-net/book1.html

もうHOSが動いているので、2、3年は掛からないでしょう。せいぜい2、3週間?。後は使うのみですから。

本の不具合はすいません、書店や出版社に言って交換してもらって下さい。
swtichはなさけない誤植ですね。
by hamayan (2005-05-07 00:10) 

nori

5月2日アップ分をメイク(コンフィギュレーター)すると、m_iResObjとCFG_ERR_DEF_CONFLICTが未定義と成りました。
apidef.hとdefercd.hの中から無くなってる?
by nori (2005-05-07 16:07) 

nori

>swtichはなさけない誤植
私見たいなド初心者でないと気が付き難いんじゃないですか。
hello,worldのレベルです組み込み用は、標準関数があまりつかえないー>憶えなくていいと考えてCの勉強を始めました。

AKI3048でやってますがいつまで書き込めるか?
ま、予備があるのでCPUが死んだら張り替えます。
by nori (2005-05-07 22:59) 

hamayan

コンフィギュレータの修正版を用意しましたので、試してみて下さい。脳内バージョン管理は、限界だなこりゃ。

今回の本の為に、結構書き込みを繰り返しているけれど、結構大丈夫です。
まあ、書き込みの上限位まで使い倒せば、スキルもそれなりに上がっているという事で、投資としては安いんじゃないでしょうか。
by hamayan (2005-05-07 23:35) 

nori

>投資としては安いんじゃないでしょうか。
お釣りがいっぱい腹一杯です、こつこつやって何が判らないのかが判ったらまた書き込みます。
3048は以前書き込みソフトのテストで壊して張り換えしたことがあります。
by nori (2005-05-08 01:17) 

nori

笑ってやってください。
cygwin環境なのにbcc32でメイクしたコンフィギュレータを使ってました。(不思議とチャンと動いてました)
明日以降簡易ゲーム機の配線をやってみます。
3664Fが無いので去年のトラ技の付録の3694Fで。
やっと付録が日の目を見そうです。
by nori (2005-05-09 21:29) 

hamayan

去年のトラ技付録基板バージョンの回路図を描く事を検討していたのですが、CPUクロックが、、、3694は20Mで動いている関係で、BGMは調子っ外れになる事を覚悟して下さい。(>_<)
コンペアマッチ値を修正しても、多分、下の音のシからミ位までは出ません。

あと、アンプと8オームのスピーカーが面倒なら、圧電スピーカーでも良さそうですね。在庫の圧電スピーカーがあまりにも音が出ないので、今回はアンプと8オームのスピーカーを使ったのですが、ちょっと音出過ぎ。
by hamayan (2005-05-09 21:49) 

nori

周波数は大丈夫です。張り替えた3048の16メガの水晶があります。私の場合はツール(開発環境の)問題が大きいような感じです。
途中からメイクして書き込んで動きを見て、しかしてませんが
ほんの少し判った気がします。
チュートリアル17にrot_rdqを追加した時の表示をみてなんか嬉しくなりました。
by nori (2005-05-09 22:47) 

nori@53歳

中間報告。
リンクエラーで止まってます。
ハード的には行けてると思うんですけど。
hamayanさんとこのサンプルのモニターも動いてるような感じがするし、3664の16メガのMOTファイルをそのまま書き込んで
ちゃんと動いたり暴走したりしてます。
こつこつ環境の見直しをしていきます。
by nori@53歳 (2005-05-11 22:46) 

hamayan

リンカーで止まると言う事は、何かの参照名のアドレスが解決できなかったと言う事で、多分エラーメッセージに参照名が表示されているはずです。それを教えていただけませんか?。

えー、暴走の方ですが、HEW版ですか?、GCC版ですか?。
by hamayan (2005-05-12 17:15) 

nori@53歳

エラーはうちの環境のような気がします。(適当に作ったので)
メイクの LIBS = -lgcc -lh4h83n のところで
incompatible (略)  when searching for -lgcc
となります。
ちなみに LIBS = -lh4h83n とすると
incompatible (略)  when searching for -lh4h83n
となります。
暴走したのは、5月7日にアップされてた3664の16メガ用のMOTファイルを無理やり書き込んだからだと思ってます。
FDTのテストで書き込みました。

今日HEWをダウンロードしました(70メガ超えてる)。
で、297ぺージ左最終行のWORKDIRはWORKSPDIRのような(キャプチャの画はWORKSPDIR)
by nori@53歳 (2005-05-12 21:44) 

nori

暴走はLCDのウエイト不足が大きかった様です。クロック20メガのままでは、LCD部のウエイトを変えないと付いてこない(当たり前)変えると表示は落ち着きました。(音は変えてないのでまだ変)
HEW4でしてます。音は外に分周回路を付けてみようと思ってます。
hamayanさんの紹介されたKさんの本買ったけど理解できませんでしたが,ほんの少し判って来ました。
こつこつ頑張ってみます。
by nori (2005-05-16 23:01) 

hamayan

LCDのソフトwaitは、私も毎回調整しています。
BUSYステータスを読み出せば良いのでしょうけれど、結局カットアンドトライで済ませています。
by hamayan (2005-05-17 09:20) 

nori@53歳

音の方も、2倍を出力して、4013で1/2にするとそれらしい音になりました。(正常な動きが判ってないので?ですが)

HEWも3から4に成って少し変わっていました。
キーファイルが無くなっている?
ファイルメニューー>オプションが
ファイルメニューー>ビルドになってたりします。
by nori@53歳 (2005-05-17 21:27) 

m-arai

nori@53歳 さんへ

gccでのリンクエラーについてですが、おそらく↓の件だと思われます。
https://sourceforge.jp/forum/forum.php?thread_id=4999&forum_id=695
by m-arai (2005-05-18 23:04) 

hamayan

m-araiさん有難うございます。
HOSのFAQはかなりSorceforgeに溜まっているので、そっちを先に参照すべきでした。
by hamayan (2005-05-19 07:53) 

nori@53歳

お二人とも有難うございます。
当の私はHEW-4の勉強(遊んでいた?)をしてました。

アセンブラソース .h8300h → .h8300hnの変更はよく判らないので、ほっといて、
リンカスクリプト OUTPUT_ARCH(h8300h) →(OUTPUT_ARCH(h8300hn)の変更だけでエラーは無くなりました。
by nori@53歳 (2005-05-19 20:23) 

hamayan

アセンブラソースの変更は、例えばcrt0.sの先頭にCPUタイプを指定している「.h8300h」が有りますが、これを「.h8300hn」にすると言う話だと思われます
by hamayan (2005-05-19 21:10) 

nori@53歳

早い!重ね重ね有難うございます。

それが、下のエラーメッセージ
incompatible /usr/local/h8300-hms/lib/gcc-lib/h8300-hms/3.3.3/h8300h/normal/libgcc.a when searching for -lgcc

で/h8300h/nomal/libgcc.aまでたどり着いてエラーに成っているので無視して見ました。

>試しに、-lgccを外しても
というのを見て、同じ事を考える人がいたので嬉しがってます。

Cプログラムは、hello,worldしか作ったこと有りません。
20年以上前にCOBOLは作ってましたが。
今は、年に1,2回PICの簡単なアセンブラを作るくらいです。
ボケ防止のCの勉強中です。
by nori@53歳 (2005-05-19 21:51) 

nori@53歳

PS
HEW-4では、無茶苦茶な動きだったソースをGCCでメイクすると、見た目動いてたりします。(LCDのウエイト)やっぱり同じ環境で試さないと駄目ですね。
by nori@53歳 (2005-05-19 23:33) 

sn

はじめまして。
本屋でITRONプログラミング入門を偶然見つけて3日目。
いきなり面白くなってきました!

こんな小さなプロセッサなのにこんな便利に(しかも楽しく)ファームウエアを設計実装できるなんて!!

大変感謝しています!!
by sn (2005-06-02 23:00) 

hamayan

↑感想有難うございます。
マルチタスクは面白いですよね。私も始めて触った時、そう感じて、今でも思っています。
勿論マルチタスクを使う事での短所(CPUパワーやメモリを食う)も有りますが、それが許容されるアプリケーションなら、夢が広がりますね。
by hamayan (2005-06-03 07:43) 

ぼの

gcc用のkernelコンパイルで、途中までは順調なのですが、以下の箇所で、string.hがないで、エラーとなります。

h8300-hms-gcc -c -mh -mn -O2 -fomit-frame-pointer -I../../../include -pipe ../../../src/kernel/tsk/kcre_tsk.c
by ぼの (2005-06-03 15:41) 

hamayan

kcre_tskでmemsetを使用している為に、string.hをインクルードしていますね。

これは、標準ライブラリで使用するヘッダーファイルを納めているディレクトリへの参照が上手くいかない為に発生していると思われるのですが、string.hへの参照を行う環境設定は正しいでしょうか?。
またはコンパイルオプションで直接そのディレクトリへの参照を指示するとか。

それともmemsetに相当する関数を自分で作成して、string.hを呼ばないと言うのも有りますね。
by hamayan (2005-06-03 16:27) 

Miw

こんにちは。
学生実験用にGCCでくんだプログラムをHOSで作り直してみました。
ADコンバータ2chを10HzでよんでSCIにながす、ってものです。
SCI回りでちとミスして一日かかりましたが、無事うごくようになりました。
Taskで考えると、設計が楽な気がしますね!
by Miw (2005-06-16 14:46) 

hamayan

↑大概は楽になりますね。特に複雑な制御(資源共有や時間管理、同期)になればなるほど。
by hamayan (2005-06-16 21:40) 

Miw

ひさしぶりにROMにはモニタ、RAMにアプリで動作するプログラムをつくりました。
以前はHewでやってたんですが、今はGCC Developerでやってるので、ちょと大変でしたが、素のH8-3052Fで動く分には大丈夫になりました。
HOSも同様にやりたいけど、むずかしそうですね。
by Miw (2005-06-20 14:50) 

hamayan

既にProject HOSの方で回答をもらっている様なので、ROMモニタの一部にカーネルの一部を組み込む方法には言及しませんが、
ROMモニタの最大の欠点は、一度止めないと、変数やメモリの参照ができない点です。


そこでいっその事、タスクを一本モニタ用として動かし、簡単なユーザーインタフェースを付けて、DUMPやWATCH機能、タスクの起動や停止、参照と言った事は如何でしょう。動作中の状態を見れるので、結構役に立ちますよ。
by hamayan (2005-06-21 01:31) 

Miw

おはようございます。
あ、それいいですね。目標にしてみます。
いま、日立モニタをいじってます。評価版HEWとソースをルネサスからもらってきて、watson8さんのページを参考にやってますが、むずかしー。
readme.htmのとうりにやって3052用はできてるようですが、printfをfloat対応にするのがまだです。
目標はsprintfと、自分で作ったLCDの関数をモニタにつけることです。
by Miw (2005-06-21 09:20) 

hamayan

> readme.htmのとうりにやって3052用はできてるようですが、printfをfloat対応にするのがまだです。

これはK氏の親切心でfloatをサポートしていないのだと思いますが、HEWのH8/300H用のprintfは、標準ではfloatをサポートします。Tiny用はサポート無しです。
lower.cの先頭でno_float.hをインクルードしていますが、これを付ける事でfloatをサポートしなくなるのです。
この辺はコンパイラのマニュアルに記載されています。

なんでデバックモニタの標準がno_floatなのかと言えば、更に数百byteのスタックが必要になるからです。
by hamayan (2005-06-22 19:32) 

Miw

こんばんは、お久しぶりです。

入門用ということで、秋月のキットそのままで長く使えるようにモニタ+RAM上で実行するmotを目指してます。
このところ、ベストテクノロジーのGDLをコンパイラとして使うこと前提に、
1.ルネサスモニタをいれたAki-3052FのシングルモードをHtermでRAM実行
2.stubをいれたAki-3052FのシングルモードをGDB+insightでRAM実行
を調整してました。
1は問題なく動くのですが、GDL(GCC)のELF形式ではいまのところHtermではうまくソースレベルデバッグができないです。Hew4ではうまくいってます。

2も動いているのですが、なんか不安定。あとstubにワークでRAM4Kとられてます。
ルネサスモニタのアドバンストモード、1Mと16Mでしばらくなやんでました。

同時にAki-3069のモード5でも同じことができるようになりました。
あとはgccで作ったelf形式が、うまくルネサスモニタとHtermに合えばよいのですが。

モニタやstubのmotにgccのライブラリをつけたいのですが、まだできてません。むずかしいですね。

で、やっとHOSのRAM焼きに挑戦しました。
Project HOSからもらってきたAki-3052F用のソースで、ROM用のmotまではできました。
sampleのコンパイルで、hos_vectorとかのリンクでおこられてます。もうちょっとかかりそうかな?
あと、こっちもGCC版のリンクスクリプトをかえてAki-3069F用にRAM焼き版をつくってみました。
こちらはまだ食べさせてないですが、motまではうまくできたので、いけそうです。RAMが大きいと楽でいいですね。
by Miw (2005-07-27 22:07) 

nori

御無沙汰してます。
やっと三岩ボードに焼いたnavajoがpingに応答するようになりました。
cygwin+gcc3.4.3環境でmakeするとnava_cfg.cの中の
char BuildNumber[] = {"20050824170354"};の最後にくっついている0x00の影響か
.data 0x004000c8 0x3c nava_cfg.o
0x004000ff _ThisIs
0x004000f3 _LocalHost
0x004000c8 _BuildNumber
0x004000eb _DomainNameServer
0x004000e7 _BroadCast
0x004000ef _GateWay
0x004000fb _SubNetMask
0x004000f7 _NetWorkAddress
0x004000e3 _SubNetBroadCast
0x004000db _SMTPServer
0x004000df _NTPServer
0x004000d7 _POP3Server
こんなのが出来てました(mapfileの一部)。
で強引にchar BuildNumber[] = {32,30,30,35,30,38,32,34,31,37,30,33,35,34};
に変更してmakeしました。
by nori (2005-08-24 17:51) 

hamayan

> .data 0x004000c8 0x3c nava_cfg.o
> 0x004000ff _ThisIs

これは割り付けアドレスを出力しているので、特に問題ではないですね。
.dataに配置しているのは、IPアドレス等をROM領域において固定する事はせず、動作中にも変更できるようになっているからです。しかし、ビルド番号くらいはROMに置くべきでした。

あと、ビルド番号は文字列なので、最後のNULLターミネータは必ず必要です。
by hamayan (2005-08-24 22:13) 

nori@53歳

.data 0x004000c8 0x3c nava_cfg.o
0x004000ff _ThisIs
0x004000f3 _LocalHost
0x004000c8 _BuildNumber
0x004000eb _DomainNameServer
0x004000e7 _BroadCast
0x004000ef _GateWay
0x004000fb _SubNetMask
0x004000f7 _NetWorkAddress
0x004000e3 _SubNetBroadCast
0x004000db _SMTPServer
0x004000df _NTPServer
0x004000d7 _POP3Server

それが,上のmotを焼いた時LANケーブルを抜いて立ち上げた時は,次の表示

HOS-V4 for HITACHI H8/300H
Presented by Project HOS
IP=192.168.0.254
MASK=255.255.255.0
DNS=192.168.0.1
GATEWAY=192.168.0.1
User Interface Start. Type Enter Key.

以降はLANケーブルを繋いで(DHCP有り)の表示、及びダンプです。

HOS-V4 for HITACHI H8/300H
Presented by Project HOS
IP=168.123.148.254
MASK=255.255.0.192
DNS=129.12.47.192
GATEWAY=168.123.254.1
User Interface Start. Type Enter Key.

Navajo:>d 4000c0
004000C0:00,00,00,00,00,00,00,00, 32,30,30,35,30,38,32,35, ........ 20050825
004000D0:30,38,32,35,32,33,00,C0, A8,00,10,C0,A8,00,10,D2, 082523.. ........
004000E0:84,F7,C0,A8,7B,FF,FF,FF, FF,FF,D3,81,0C,2F,C0,A8, ....{... ...../..
004000F0:7B,FE,01,7F,00,00,C0,A8, 7B,00,FF,FF,FF,00,C0,A8, {....... {.......
00400100:7B,94,FE,00,00,01,00,02, 00,03,00,04,00,09,00,08, {....... ........

0x004000e3 のはずの _SubNetBroadCast のデーターが,0x4000e2 から
入っています。以降1バイトのずれ有り。ワードデータでアクセスしている様です。

試しに、char BuildNumber[] = {"20050825161438 "}; の様に最後にスペースを付けて
ターミネータ含めて偶数バイトに成るようにするとpingがちゃんと動くようになりました。
by nori@53歳 (2005-08-25 18:40) 

hamayan

> .data 0x004000c8 0x3c nava_cfg.o
> 0x004000ff _ThisIs
> 0x004000f3 _LocalHost

成る程、判りました。これはdhcp_c.cの問題ですね。
例えば関数RequesetDHCPの中で以下の様な処理をしています。
/*DHCPサーバーから正常にIPアドレスが取得できた場合*/
if( dnf->lease_ip ) *((unsigned long *)ThisIs) = dnf->lease_ip;
つまり、変数ThisIsが勝手に4byte境界に乗っているとして、
long型の代入を行っています。本当に4byte境界に乗っているならば、最速のコードとなります。
一番安全なのは、memcpy等で1byte単位で代入を行う事ですが、HEWの場合は変数を並べた順にメモリに割り付けるので、先頭の配置を4byte境界にすればlongでアクセスできたからです。

実はこの手の手抜き処理が、他にも有るかもしれません。

対処方法は、当然1byte単位の代入ですが、4byte程度なのでmemcpyでやらず、
a[0] = b[0];a[1] = b[1];a[2] = b[2];a[3] = b[3];
をマクロ化するのが良いかもしれません。
by hamayan (2005-08-26 09:24) 

nori@53歳

GCC3.4.3の場合は変数を並べた順の逆にメモリに割り付けてるようです。(GCC4.0.0も)
とりあえず、navacfg.cのBuildNumberの部分を細工して(最後にスペースを追加)ターミネータ含めて16バイトにして誤魔化してます。
また、こつこつ遊んでみます。
なかなか、Cの勉強をする環境が出来上がりません。
by nori@53歳 (2005-08-26 23:00) 

m-arai

若干記述が五月蠅くなりますが、unsigned longとの共用体に
すれば、アライメントの問題は回避できます。

また、gcc限定でよければ、__attribute__ ((aligned (4)))という
手もあります。
by m-arai (2005-08-27 08:36) 

nori@53歳

管理人さん、m-araiさん有り難うです。私みたいな初心者に付き合っていただいて申しわけないです。
いままで、cygwin+gccで、やってたのが良いのか悪いのか判りませんでした。

でも、今回管理人さんの公開しているnavajoのメイクとKPIT
+HEW4でほぼ同じ物が出来ました。
Cの環境は出来た事にして次に、進みたいです。
by nori@53歳 (2005-08-27 23:38) 

hamayan

IPアドレスの不具合に関して、
http://hamayan.ddo.jp/~hamayan/so-net/navajo.html
に修正差分を用意してみました。差し換えて使ってみて下さい。
by hamayan (2005-08-31 06:50) 

nori@53歳

試して見ました。NotFoundになったので、so-netを追加して、

http://hamayan.ddo.jp/~hamayan/so-net/archive/nava_update.zip

から落として

cygwin+gcc3.4.3では、(メイクファイルはgcc.mak)udp.cのコパイルでエラー(未定義) UDP_SYSTEM_ERROR UDP_UNKNOWN_IP_ADDRESS UDP_RELOCATE_WAIT など

HEW4+KPITv0502も、

ip.h辺りも変更されてませんか?
by nori@53歳 (2005-08-31 12:40) 

hamayan

_orz
by hamayan (2005-08-31 14:32) 

nori@53歳

私の、つついてるnavajoのバージョンは1.0.4です。
by nori@53歳 (2005-08-31 18:37) 

nori@53歳

今日うろうろしてて、gcc_1_1_2_d.zipを拾って来ました。
またKPITをさわっていて、こんなのが見れるのが判って喜んでいました。
  kernel_ini_mem(kernel_heap_mem, sizeof(kernel_heap_mem)); /* initialize kernel heap */
4002C4 1A91 SUB.L ER1,ER1
4002C6 8110 ADD.B #H'10,R1H
4002C8 7A0000429C24 MOV.L #H'00429C24,ER0
4002CE 5E418F5E JSR @.Letext0:24

kernel_ini_tsk(); /* initialize task */
4002D2 5E4190C2 JSR @.Letext0:24
kernel_ini_sem(); /* initialize semaphore */
4002D6 5E419062 JSR @.Letext0:24
kernel_ini_flg(); /* initialize event flag */
4002DA 5E418ED2 JSR @.Letext0:24
kernel_ini_mbx(); /* initialize mail box */
kernel_ini_mbf(); /* initialize message buffer */
4002DE 5E418F16 JSR @.Letext0:24
kernel_ini_mpf(); /* initialize fixed size memory-pool */
4002E2 5E418FC8 JSR @.Letext0:24
kernel_ini_cyc(); /* initialize cyclic handler */
4002E6 5E418E64 JSR @.Letext0:24

/* call initialize routine*/
((FP)(ostim_init))((VP_INT)(TIM_1m));
4002EA 7A00000009C3 MOV.L #H'000009C3,ER0
4002F0 5E40009C JSR @.L0:24
((FP)(SampleInitialize))((VP_INT)(0));
4002F4 1A80 SUB.L ER0,ER0
4002F6 5E400312 JSR @.LFE2:24
}
4002FA 01006D76 MOV.L @ER7+,ER6
4002FE 5470 RTS

kkernel_cfg.cの一部です。

でも kernel_ini_mbx(); /* initialize mail box */
の部分のアセンブラコードはどこに?
by nori@53歳 (2005-09-02 00:21) 

nori@53歳

1.1.2は、ここから持って来ましたが、
http://hamayan.ddo.jp/~hamayan/so-net/netclock/archive/
unix とdosのファイルが混ざってます。
1ファイルの中で、混ざってるのも有ります。(FILE_PROPERTIESのあるファイル)
by nori@53歳 (2005-09-02 21:51) 

hamayan

>unix とdosのファイルが混ざってます。

うーん、UNIXとかlinuxとかBSD環境は持っていないので、UNIX(EUC?)で作成されたファイルは無い筈なんですが。
by hamayan (2005-09-05 09:03) 

nori@53歳

/* ------------------------------------------------------------------------ */
/* グラフ表示処理 */
/* designed by hamayan */
/* Copyright(C) hamayan */
/* since 2004 - */
/* webmaster@hamayan.zive.net */
/* ------------------------------------------------------------------------ */
#ifdef __300HA__

#include <no_float.h>

#endif /*__300HA__*/

cgi_grph.cを、コピペして見ました。
#ifdef __300HA__ の行より前は、改行コード0x0aですが、それ以降は0x0d,0x0aに成ってます。
vimはHEX表示が出来ます。
by nori@53歳 (2005-09-05 22:16) 

hamayan

たしかに、このファイルに限らず、他のファイルにも同様になっています。特に漢字コードが変っていると言う訳ではないので、持っているエディタは、全て普通に表示している為に、気付きませんでした。

多分コンパイラで引っ掛からないと思いますが、引っ掛かったら、修正して下さい。
by hamayan (2005-09-07 12:38) 

Hide

初めまして。いまhamayanさんの本をみながらHOSを学習しています。
秋月のH8/3048FボードにHtermでHOSにモニタープログラムをダウンロードしました。そこでデバッグなのですが、sample.cにブレークポイントを置き、Htermのコマンド「Go」をクリックしますと、ブレークポイントで動作は止まります。しかし、再度「Go」をクリックするとHterm上に「:G」
と表示されるだけです。また例えばhamayanさんの書かれた本の37ページのサンプルプログラム(h83_tutorial1)で26行目と67行目にブレークポイントを置き、最初の「Go」で26行目まで行き、次の「Go」で67行目まで行くというような事をデバッグしたいと思っていますが、Hterm+モニタプログラムではこのような動作機能は無いのでしょうか?
なんだか、Htermに関する質問になってしまい誠に申し訳ないのですが、何か良いアドバイスがありましたらよろしくお願い致します。
by Hide (2005-10-27 23:51) 

hamayan

御世話になっています。
まず最初に開発環境(コンパイラを含めたツール類、基板、デバックモニタのカスタマイズ状況)、セクション等の設定等の情報を教えて下さい。
H8/3048Fの内蔵RAMは4Kbyteしか無いので、これだけでRAMデバックが行えると思えません。
何らかの外付けRAMが実装されているかと思いますが。

以上、宜しくお願いいたします。
by hamayan (2005-10-28 09:05) 

Hide

ご返答ありがとうございました。開発環境はHEW4を使っています。またボードは秋月さんのAE-30xxシリーズ(AKI-H8)です。また外付けRAM(μPD431000A)を付けています。デバックモニタのカスタマイズ情報は以下の通りです。
 monitor.cについて
   #include "3048s.h" に変更
   バスの設定追加
 monitor.subについて
   LIBRARY ADVANCED,3048
DEFINE $BRR=19
DEFINE $STACK=FFF00
START VECTOR/0, ROM/00100, RAM/FEF10,
USER/20000, SCI/FFFFB8
動作モードは5で、HOSプログラムを20000番地以降にダウロードしています。またStandard ToolchainのCPUのところでCPUの種別を
「H8/300H Advanced 1M byte」に設定しました。
何か設定でおかしなところがありましたらお教えください。
よろしくお願い致します。
by Hide (2005-10-28 15:45) 

hamayan

動作モードを6とし、
「H8/300H Advanced 1M byte」を
「H8/300H Advanced 16M byte」にしてみてください。
アドレッシングでエラーになっている可能性が有ります。
by hamayan (2005-10-28 17:17) 

Hide

動作モード6(AKI-H8ボードのCN5のMD0をショート)にし、H8/300H Advanced 16M byteにしてみましたが、今度はモニタープログラムをダウンロードした後に電源ON/OFF(ブートモードから通常動作に戻してあります)しても、HtermのConsoleにモニタープログラムのタイトルも表示されなくなりました。動作モードを5に戻すと表示されます。でもやはりブレークポイント以降は動作しません。(ブレークポイントでプログラムが止まった時点でプログラムカウンターは00000になっています)
あと余談になってしまうのですが、試しにH8/Tiny(3687F)のボード(北斗電子製)とE8エミュレータがありますので、H8/3687Fにサンプルプログラム(h8n)をダウンロードして見ました(サンプルプログラムはH8/Tinyの3664用なのでかなり乱暴かも知れませんが・・・)。ただブレークポイントを置いてプログラムの流れを追っかけるぐらいは出来るのかな~と思い試して見ました。(素人考えでスミマセン・・)
sample.c中にブレークポイントを置いて実行しますと、ブレークポイントでプログラムは止まりました。しかし次にStep実行をすると固まってしまい、しばらくするとE8から応答が無いと言うようなメッセージが表示されます。やっぱりこれはこういったものなのでしょうか?OSを搭載することによりデバッグ方法が変わるのでしょうか。
by Hide (2005-10-28 18:39) 

hamayan

HOSでも、OS無しでもデバック方法は変りません。
もしかして、デバックモニタもモード5で作成していますでしょうか?。
こちらもモード6で作成してみて下さい。または、私の方でデバックモニタを作成してみました。
SRAMの割り付けアドレスが200000なので、多分一致していると思います。
まだ、会社なのでサーバーにアップできませんが、夜中にでもダウンロードできる様にしておきます。
by hamayan (2005-10-28 19:14) 

hamayan

一応、他の方で必要な人が居るかもしれないので、左のサイドバーからダウンロードできる様にして置きました。
by hamayan (2005-10-28 22:55) 

Hide

お世話になっております。
以前はデバッグモニターの件で色々教えていただきありがとうございました。
その後引き続きHOSの学習をしております。
今は本の「付録A」に基づいてHEWによるHOS-V4カーネルライブラリの構築、プロジェクトの登録、PreConfigureの登録、Configureの登録を実施しております。
297ページの「A.4.2 Configureの登録」まで終了しましたがkernel_cfgとkernel_idが作成されません。
また「A.4.1 PreConfigureの登録」が終了した時点でsystem.iが生成されていないので、これが影響しているのではないかと思います。
この時点でビルド後に表示されるエラーは
 C5005 (F) Could not open source file "kernel.h"
です。
3回ほどやり直してみましたので、手順が抜けている可能性は低いと思いますが、何かお気づきの点があればお教えください。
ちなみにHEW4を使用しておりますので、ツールチェインバージョンは
6.1.0.0でやています。
毎度お手数をお掛けしますがよろしくお願いします。
by Hide (2005-11-03 00:07) 

hamayan

御世話になっています。

まずPreConfigureが成功しているか確認する為に、一番したのメッセージウインドウ上でカーソルを一番上に移動し、その時点で行われるPreConfigureのメッセージを確認していただけませんでしょうか。ここで何らかのエラーメッセージが出ているなら、例えばch38.exeへのパスが実際と一致していない等の問題が有ります。
このページが参考になるかもしれません。
http://blog.so-net.ne.jp/hamayan/2005-10-27

C5005 (F) Could not open source file "kernel.h"
この中で問題になっているkernel.hですが、これはHOSのインクルードフォルダーへの参照パスが通っていない為に発生している問題だと思われます。
このインクルードフォルダーは、hosv4以下のincludeになります。ページにすると、298ページにその紹介が有ります。
by hamayan (2005-11-03 10:14) 

Hide

ご回答ありがとうございました。再度トライしてみた結果、うまくいきました。「A.3.3 必要なファイルの登録」の項目で、必要なファイルをh83ディレクトリからh8sampleディレクトリにコピーしていなかったのが原因でした。お騒がせしてスミマセンでした。
by Hide (2005-11-04 13:03) 

miw

HOSのライブラリをデバッグのために、HOS本にそってコンパイルしてみたのですが、ライブラリは無事にできたみたいです。

しかし、アプリケーションのビルドをしてみると、以下のエラーがでてきます。

Phase OptLinker starting
License has expired. Maximum link size limited to 64KB code+data.
L2310 (E) Undefined external symbol "_hospac_ini_sys" referenced in "mini_sys"
Optimizing Linkage Editor Abort
Phase OptLinker finished

続けて、

Phase: H8S,H8/300 C/C++ Compiler, File: H8S,H8/300 C/C++ Compiler, dependency scan error
G:\H8講習会\HOS\HOS_LIB\include\win\hospac.h(17) : DC201 (E) A header file does not exist 'windows.h'

とエラーが表示されます。
なぜにWin用のファイルが参照されているのでしょうか?
こいつが原因ですかね?

hosdenv.hのなかの
#elif defined(__CPU__) /* 日立H8コンパイラ */

#if (__CPU__ == 3) || (__CPU__ == 2) /* H8/300H */
#include "h83/hospac.h"
#endif
がうまく処理できてないのかな?
__CPU__ はどこで定義されているのでしょうか?
by miw (2005-11-25 18:32) 

miw

すみません、src/h83のcソースがはいってないことが原因のようです。
windows.hのエラーも、依存関係警告エラーを抑制すればいいのかな。あれ、コンパイルした結果のエラーじゃないですよね?
by miw (2005-11-25 18:48) 

hamayan

返事が遅くなりました。
Windows.hは、お察しの通り、依存関係検索エラーメッセージの抑制にチェックを入れます。
もともとH8の開発環境にWindows.hは無い訳ですから。
by hamayan (2005-11-28 06:55) 

Hide

お世話になっております。
以前はH8/3048のHOS-V4カーネルライブラリの構築、プロジェクトの登録、PreConfigureの登録、Configureの登録についてお教えいただきありがとうございました。
今回はH8/TinyのHOS-V4カーネルライブラリの構築、プロジェクトの登録、PreConfigureの登録、Configureの登録を行っております。実際に使用するマイコンはH8/3687Fです。本書の説明に基づき最後まで(A.5.5節)行い、最後にビルドを実施したところ「L2310 (E) Undefined external symbol "_kernel_min_intno" referenced in "exe_int"」と言うエラーがどうしても出てしまいます。エラー内容を確認しましたが、ファイル"exe_int"内で未定義のシンボル"_kernel_min_intno"を参照しているとの事のようです。
3回ほど手順を見直して実施しましたが同じエラーが出てしまいます。
「A.4.2節」の段階ではこのようなエラーは出ていませんでした。何が原因なのかアドバイスがありましたらお教えください。
by Hide (2005-12-09 17:31) 

hamayan

おお、偶然ですね。
ちょうど私も3687にHOS-V4を入れて動かしています。
さて掲題の問題ですが、システムコンフィギュレーションファイル(system.cfg)のHOS固有の静的APIに、以下の文を追加してみて下さい。
HOS_MIN_INTNO(14); /* 使用する割り込み番号の最小値(省略時 0) */
HOS_MAX_INTNO(32); /* 使用する割り込み番号の最大値(省略時 0) */
また、3687の場合割り込みベクター番号が3664や3694より大きいので、注意が必要です。
vector.srcを編集して、ベクター番号32までのエントリーを追加して下さい。
by hamayan (2005-12-09 22:31) 

Hide

ご返事ありがとうございました。H8/3687を使う上で大変良い情報です。
ただ、エラーに関してはまだ解決しておらず、いまだに「L2310 (E) Undefined external symbol "_kernel_min_intno" referenced in "exe_int"」が出てしまいます。エラーは「Phase OptLinker starting」の段階で出ています。最適化リンカでの設定がおかしいのでしょうか?
あと、カーネルライブラリの構築は必ずHEWをインストールしたディレクトリー内で行う必要がありますか?
by Hide (2005-12-10 09:38) 

Hide

エラー「L2310 (E) Undefined external symbol "_kernel_min_intno" referenced in "exe_int"」の問題が解決しました!単にkernel_cfg.cがプロジェクトに追加されていないだけでした。単純なミスでした・・・スミマセン。
しかし、vector.srcを編集して、ベクター番号32までのエントリーしたところ、「L2310 (E) Undefined external symbol "_hos_vector030" referenced in "C:\WorkSpace\New_SG\New_BL\Debug\vector.obj"」と言うエラーがでます。「\New_SG\New_BL」は私がつけたディレクトリ名なので気にしないで下さい。vector.srcの編集内容としては「.IMPORT _hos_vector026」を032まで追加したのと、「.DATA.W _hos_vector026」を032まで追加しただけです。他に変更箇所があれば、お手数ですがお教えください。
by Hide (2005-12-10 10:31) 

hamayan

すんません、思い出しました。
カーネルソースで、H8固有のpacintn.srcにも修正が必要です。
修正したら、カーネルを再構築して下さい。
by hamayan (2005-12-10 10:50) 

Hide

ありがとうございます。
だいぶ問題解決に近づいてきた感じです。
pacintn.srcを修正しカーネルを再構築した時点でのビルドで今度は
「C:\WorkSpace\New_BL\src\h83\htc\pacintn.src(49) : 402 (E) ILLEGAL VALUE IN OPERAND」と言うエラーが3つ出ました。このエラーが指している部分はpacintn.srcの「割込みハンドラ」部の「_hos_vector007:」「_hos_vector008:」「_hos_vector009:」の「bra int_handler」の行です。
何故この行でエラーになるのかが分かりませんが、何かアドバイスがあればお教えください。ちなみに上記の3行をコメントアウトするとエラーは出ません。
念のためpacintn.srcの「割込みハンドラ」部の修正内容を以下に添付します。
_hos_vector007: push.w r0
mov.b #7, r0l
bra int_handler

_hos_vector008: push.w r0
mov.b #8, r0l
bra int_handler

_hos_vector009: push.w r0
mov.b #9, r0l
bra int_handler
   ・
   010~025まで中略
   ・
_hos_vector026: push.w r0
mov.b #26, r0l
bra int_handler

_hos_vector027: push.w r0
mov.b #27, r0l
bra int_handler

_hos_vector028: push.w r0
mov.b #28, r0l
bra int_handler

_hos_vector029: push.w r0
mov.b #29, r0l
bra int_handler

_hos_vector030: push.w r0
mov.b #30, r0l
bra int_handler

_hos_vector031: push.w r0
mov.b #31, r0l
bra int_handler

_hos_vector032: push.w r0
mov.b #32, r0l
by Hide (2005-12-10 21:46) 

hamayan

むしろ#7~10は以下の様に修正します。
;------------------------------------------------
; 割り込みハンドラ
;------------------------------------------------
_hos_vector007: push.w r0
mov.b #7, r0l
bra tyuukei
_hos_vector008: push.w r0
mov.b #8, r0l
bra tyuukei
_hos_vector009: push.w r0
mov.b #9, r0l
bra tyuukei
_hos_vector010: push.w r0
mov.b #10, r0l
bra tyuukei
tyuukei:
bra int_handler
つまりデフォルトの8bitアドレッシングの範囲を越えているのです。中継させず、16bitアドレッシングで指定しても良いですね。
402 (E) ILLEGAL VALUEと言うよりは、OUT OF RANGEと表示してもらった方が、判り易かったと思います。
by hamayan (2005-12-10 22:22) 

Hide

ありがとうございました! 
ようやくエラーがなくなり、カーネルの構築とプロジェクトの登録が出来ました!
早速H8/3687を使ってHOSのプログラムを組んで見ようと思います。
今後ともよろしくお願い致します。
また、H8/3687にHOS-V4を入れる上でのヒントなども掲載して頂けると嬉しいですが、あくまでも個人的なお願いなので、可能であればで結構です。
by Hide (2005-12-10 23:35) 

hamayan

割り込みベクターが増えた以外は、3664や3694との違いは無いです。
by hamayan (2005-12-11 00:52) 

Hide

お世話になっております。
以前にお教え頂いたH8/3687Fに対応させたカーネルとプロジェクトでHOSのプログラムを組んでおります。
サービスコール「dly_tsk(1000)」を使用するために、OSタイマの修正を行っていますが、色々な箇所でプログラムが止まってしまいます。再度リセットして実行をさせると「Stack pointer is odd」というエラーがHEW上に出ます。
修正箇所はsystem.cfgのATT_ISRのベクター番号を29(タイマーB1)にし、次にostimer.cの「OSタイマの初期化」の
  TA.TMA.BYTE = 0x03;
  IENR1.BIT.IENTA = 1;

  TB1.TMB1.BYTE = 0x03;
  IENR2.BIT.IENTB1 = 1;
に変更しました。
他に修正箇所があればお教えください。よろしくお願い致します。
by Hide (2005-12-13 15:26) 

hamayan

「Stack pointer is odd」ってメッセージを出力している状況が判らないのですが、正常な状態ではないですよね。スタックポインタが奇数なんですから。
通常、スタックの設定を正しく行い、メモリ不足によるスタック破壊とか起さなければ出てくるエラーでは無いと思われます。

どう言う状況で起きているのか?と、スタック(割り込みやIDLE、タスク)の設定状況、map出力、コールウオーカーで調べた使用スタックサイズなどの情報が必要でしょう。
by hamayan (2005-12-13 16:11) 

Hide

OSタイマーの修正に関して追加の状況報告ですが、色々と手探りで確認をしてみますとどうやらostimer.cの「OSタイマの初期化」の部分に原因がありそうな感じです。例えばostimer.cの「OSタイマの初期化」の部分で修正したTB1.TMB1.BYTE = 0x03;の行にブレークポイントをおいてプログラムを実行させ、TB1.TMB1.BYTE = 0x03;の行でプログラムが止まった後にStep実行すると、「Stack pointer is odd」というエラーが出ます。
またdly_tskが使用できないと言うだけではなく、プログラム自体がうまく動いてないようです。ちなみにostimer.cの「OSタイマの初期化」部分のタイマー設定部分をコメントアウトすると、プログラムは正常に動きます(dly_tskは動きません)。
何か良いアドバイスがあればお教えください。
by Hide (2005-12-14 01:06) 

Hide

ご返事が来ている事に気付かないまま、先ほど追加のコメントを書いてしまいました。スミマセンでした。
「どういう状況で起きているか」と言うことに関しては、先ほどのコメントの内容になります。
あとスタックサイズは130、mapは以下の通りです。
SECTION START END  SIZE ALIG
VECT 00000000 00000041 42 2
P 00000042 00000ca9 c68 2
C 00000caa 00000ceb 42 2
D 00000cec 00000d05 1a 2
B 0000e800 0000ea5f 260 2
X 0000ea60 0000ea79 1a 2
C$DSEC 0000ea7a 0000ea7f 6 2
C$BSEC 0000ea80 0000ea83 4 2
R 0000ea84 0000ea84 0 2
またシンボル定義は
 STACK  Address 0EFFF
です。タスクの設定内容サンプルのままで
CRE_TSK(TSKID_SAMPLE1, {TA_HLNG|TA_ACT, 0x12345678, Task1, 1, 256, NULL});
です。ほかに割込みやIDLEは使っておりません。
度々お手数をお掛けしますが、よろしくお願い致します。
by Hide (2005-12-14 01:30) 

hamayan

「STACK  Address 0EFFF」とされていますが、3687のRAMの底は0xEFFFか0xFF7Fなので、0xF000か0xFF80として下さい。
by hamayan (2005-12-14 10:17) 

Hide

ありがとうございます!
STACKアドレスを0xF000に変更したら問題なく動き出しました。感激とともに自分なりにスタックに関する認識がまだまだ浅いと感じました。
お恥ずかしい質問かもしれませんが、STACKアドレスをRAMの底の次のアドレスに設定する理由について、お教えいただければ嬉しいです。
余計なお手数をお掛けしますが、よろしくお願い致します。
by Hide (2005-12-14 10:43) 

hamayan

スタック操作が、プレデクリメント、ポストインクリメント動作だからです。
ハードウエアマニュアルの例外処理の「割り込み処理シーケンス」辺りを良く読むと、判ると思います。
by hamayan (2005-12-14 11:49) 

Hide

お久しぶりです。
以前からH8/3687でHOS上のプログラムを作成しています。
今回、ルネサスから提供されているFDT(フラッシュ・デベロップメント・ツール)をしようして、ビルドしたプログラムをH8/3687にダウンロードしようとしています。開発環境はHEW4です。しかしビルド後にどのフォルダを探してもMOTファイルがみあたりません。HOSを使わないでプログラムした時はMOTファイルが生成されるのですが・・・。HOSを使った場合、どうすればMOTファイルが生成されるのでしょうか?お手数ですが、お教えください。
by Hide (2006-02-09 20:27) 

hamayan

↑それはもしかしてビルドが完了していないとか?。
ビルドすると各々のプロジェクトディレクトリの中のビルドしたセッションディレクトリにできます。DebugとかReleaseとかですね。
ABSはできているのですか?。多分FDTならABSでも書けると思う。
by hamayan (2006-02-09 23:12) 

Hide

お返事ありがとうございました。
ABSはできていますので、一度ためしてみます。
by Hide (2006-02-09 23:21) 

nori@54歳

御無沙汰してます。
しばらく触っていなかったら54歳になっちゃた。
久しぶりにつついてます。
ちょっと前進しました。
今は、HEW4 KPIT v6.0.1 GCC 4.0.2の環境みたい。
by nori@54歳 (2006-03-24 23:02) 

hamayan

ご無沙汰しております。

うん、歳は関係無いですね。
何時までも興味を持ちつづけられれば。
by hamayan (2006-03-25 14:37) 

nori@54歳

興味はあっても、能力が無いような。
ま、ボケ防止だから良いか。
ちょこちょこ進んで、振り出しに戻ると、いった作業を繰り返してます。
mapファイルを見てデバッグするの久しぶり(20年近く前のZ80アセンブラ以来)
by nori@54歳 (2006-03-30 22:55) 

nori@54歳

ついでに報告(連絡)
某社のモニター今のKPITのMOTファイルを送るとSレコードのエラーになります。
先頭のS0の行が長すぎる?(S0の行を削除すればOKです)

モニターの作り直しで2日かかった。

ボードは3069LANです。
by nori@54歳 (2006-03-31 22:30) 

hamayan

この話は昔、どこかの、確かMLで聞いた事が有ります。
確かS0レコードに長いファイル名を使っているとか、いないとかです。
それに対してモニタの受信バッファが、極限まで使用RAMを削るために、最低限のサイズになっています。
まあルネの人にGNUまでサポートしろと言うのが酷なので。
by hamayan (2006-03-31 23:35) 

nori@54歳

すみません。説明不足でした。
2日かかったのは、私の能力不足です。
ルネの取説にはちゃんと長さが書いてあります。
ついでにチェックサムの部分を細工しておこうとして、
つついてたら、時間がかかりました。

モニターのソースを変更した後の作業がわかって無かった。
経験は有ったけど記憶に無いので、毎回、新鮮。

すごろくの、振り出しに戻るってやつです。
by nori@54歳 (2006-04-01 20:48) 

hamayan

> ルネの取説にはちゃんと長さが書いてあります。
ああ、KさんはMLを読んでいるので、注意書きを書くようにしたんですね。

補数のところは、モニタのソースをいじるより、生成したMOTファイルをいじるほうが簡単だし、使い回しができますよ。GNUで生成したMOTファイルを変換するコマンドラインツールを、カスタムビルドフェーズから呼び出すようにするだけです。
ベクターに私のコマンドラインツールが、ソース付きで公開されています。
by hamayan (2006-04-02 11:56) 

hamayan

ついでに、S0レコードの削除は、GREPでできるはず。
by hamayan (2006-04-02 11:59) 

nori@54歳

>注意書きを書くようにしたんですね。
ばれました?自分の備忘録かな(アホを晒してる)
と言うか、以前の書き込みを見てこんな事したっけ?
という、状態です。
今回は、去年より少し進みました。(自己満足)

GREPでS0レコードを削除してみようとして
grep -v 'S0' aaa.mot >bbb.mot
としてみたらbbb.motの先頭にFile aaa.mot
てのが、くっ付いてました。
寄り道道草が多くて目的地にたどり着けない,nori
by nori@54歳 (2006-04-03 21:40) 

nori@54歳

何が判らないか、判って質問できるまで、こつこつやっていきます。
その時暇だったら教えてください。
by nori@54歳 (2006-04-03 21:51) 

nori@54歳

オーム社のサーバーから落としたファイルの中の、
src/mknl/tsk/msrh_top.cの中の

/* 登録予約タスクを全てレディキューに接続 */
if ( ( mtcb_head = mknl_rdq_tbl[mknl_rdq_cnt].head ) != NULL )

以下の部分は、何をしているんですか?
最低優先度のキューしか見ていないようですし、ここがあるとtutorial14が、デッドロックします(うちの場合)Task ID 5が2回
起動されて、自分でロックしてます。
by nori@54歳 (2006-04-04 19:35) 

hamayan

すいません、基本的にパッチの当て方が正しくない様です。
このパッチの詳細は以下を参照して下さい。
https://sourceforge.jp/tracker/index.php?func=detail&aid=3133&group_id=183&atid=780

Source ForgeのCVS VIEWから最新版のHOSか、リリースファイルを落として来て、上記ページのzomb_3のパッチを当てて、カーネルの再構築をやってみて下さい。
by hamayan (2006-04-04 22:42) 

nori

やってみました。
私の、カーネルがちゃんと出来てないのが判りました。
他に、
>周期ハンドラの起動周期の修正
の部分のパッチを当てるには、コンフィギュレーターのソースが古いような感じがします。
パッチのやりかたが判らなかったので、diffファイルを見ながら変更してたら、行番号が変な所がありました。

>最低優先度のキューしか
ここは、素人まるだしですね。

ま、こんなのもいる。
て笑ってやってください。
by nori (2006-04-06 23:23) 

hamayan

お手数お掛けして、大変申し訳ないです。

本来は、パッチを当てる時、特に今回の様な一つの問題に対して、色々な対策パッチがあるときは、それぞれ別プロジェクトで構築するべきですが、面倒になってこれをやっていなかった。

そのため、一部パッチが正常に当たらなかったのが原因だと思います。
一応確認のためリジェクトファイルは見ていたですが・・・、抜けていました。

なるべくリリースファイルや、CVSから最新版を取って来て、適宜パッチを当てて、ご使用ください。

あと折角なので、Project HOSの開発者登録は如何ですか。お待ちしています。
by hamayan (2006-04-07 09:36) 

nori

>お手数お掛けして、大変申し訳ないです。
申し訳ないのは、こちらの方です。
ここの人なんかちゃんと遣ってるようですし、
http://www.wakayama-u.ac.jp/~miw/linux/pukiwiki/pukiwiki.php?FrontPage

少し前に進むと嬉しいからつついてます。
by nori (2006-04-07 21:36) 

通りすがり

ども。面白いことしてますね。

さっそくですが、include\mknl.hにパッチが当たってMKNL_TTS_DRASが0x03になると、
src/mknl/tsk/mexe_tex.cの
(mknl_run_mtcb->texstat & MKNL_TTS_RDLY) && !(mknl_run_mtcb->texstat & MKNL_TTS_DRAS)
の式が偽にしかなりません。コンパイラ警告が出ています。
ここはどうなるべきなのでしょうか。
ハングったり暴走したりすることがなければ
とりあえずいいかなと思っておりますが。

それとsrc\h83\gcc\pacctxn.Sのstackから14引くところは
gccのバージョンが3.3未満なら16になるのでしょうか。
3.3以上を使っていますのでこれも当面実害ありませんけど。
by 通りすがり (2006-04-20 22:05) 

hamayan

まず先に、stackから14を引くところですが、ご指摘の通りい3.3以前のバージョンでは、16引く必要がありますね。
3.3以降から、ノーマルモードで16bitアドレッシングとなった?のかな?、gccはあまり詳しく無いのであれですが。

それとMKNL_TTS_DRASが0x03になっちゃっている点ですが、これだけでなくMKNL_TSS_DINTが0x03になっている点も含めて、間違っているんだけれども、今となっては経緯が思い出せないので、一連の起動キューイングの問題に関するパッチは忘れてくれ!とパッチ作成者からのコメントです。

とりあえずHOSの現状のバージョンでは、問題が有ると困るシステムでは、起動キューイングを使わない選択をお勧めします。
たとえばact_tskは使わずにsta_tskを使うとか、タスクを終了させないで無限ループとしておき、slp_tskを使うとかですね。
by hamayan (2006-04-22 01:28) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

ちょっと小物作成ADXL311 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。