FC2ブログ

[KOZOS]Step9(p331): 優先度スケジューリング

・bootload側の修正は前回のstep8で完了したので不要。

・OS側の修正で本書の内容に従い修正した後、minicomのxmodem経由でロードしてみたが、
 転送が58/7kまで進むと止まってしまう。

Xmodem sectors/kbytes sent: 58/ 7k



・書籍の内容をそのままコピーしただけだがミスを疑い、Webから入手出来る
 サポートデータでもやってみたが、症状は同じ。

自複写bootload + 自複写OS           : 58/ 7kで停止。
自複写bootload + WebサポートOSデータ      : 58/ 7kで停止。
Webサポートbootloadデータ + 自複写OS      : 58/ 7kで停止。
Webサポートbootloadデータ + WebサポートOSデータ: 58/ 7kで停止。
Webサポートbootloadデータ + WebサポートOSデータ(新H8/3069Fボード): 58/ 7kで停止。


 使用するデータに問題無いようで、2つのボードで同じ症状なのでボード不具合では無さそう。
 どうしたもんか。書籍に注意書きとかヒントあったかな。

・はっ、サポートページにズバリ載ってる!!俺も.elfを転送してた。助かるー。
http://kozos.jp/books/makeos/#fail_xmodem


■ ステップ9付近でXMODEMでの転送がうまくいかなくなった場合

XMODEMでのOS転送が,当初はうまくできていたのにステップ9あたりでうまく いかなくなる,という現象に遭遇するかたがたまにいます.

この場合,転送ファイルに「kozos」でなく「kozos.elf」を指定していないかどうか, 確認してみてください.

これらのファイルはどちらもELF形式のためKOZOSのブートローダーで解釈できますが, 「kozos.elf」はstripによるシンボル情報削除前のファイルのため,ファイルサイズが 大きめになっています.そしてKOZOSのブートローダーが扱えるファイルのサイズは (書籍中にもありますが)8KB程度までです.

で,OSの開発を書籍通りに進めていくとて9ステップあたりでkozos.elfが8KBを 越えてしまうため,転送ができなくなる,ということになるようです.

書籍中では「kozos.elf」でなく「kozos」を指定することになっていますが 「kozos.elf」でも最初のうちはサイズが小さくうまく転送できるため, 気付かずにそのまま「kozos.elf」を利用し続けてしまう場合があるようです.

ただし「kozos」にはシンボル情報等は残っていないため,以下のように使い分ける ことになります.

「kozos」...XMODEMでマイコンボードに転送するファイルはこちら
「kozos.elf」...readelfで解析したり(将来的に)デバッガの解析に利用したり するのはこちら



・サポートページにあった通り、kozos.elfでなく、kozosを転送したら成功した。
 けど、runしてみると書籍と違う結果が。

kzload> kzload (kozos boot loader) started.
kzload> load

XMODEM receive succeeded.
kzload> run
starting from entry point: ffffc020
kozos boot succeed!
test09_1 started.
test09_1 sleep in.
system error!



・書籍ではこんな結果になってないので、サポートページから入手したソースでやってみたら以下。

Welcome to minicom 2.3

OPTIONS: I18n
Compiled on Aug 19 2010, 05:48:57.
Port /dev/ttyUSB0

Press CTRL-A Z for help on special keys

kzload (kozos boot loader) started.
kzload> load

XMODEM receive succeeded.
kzload> run
starting from entry point: ffffc020
kozos boot succeed!
test09_1 started.
test09_1 sleep in.
test09_2 started.
test09_2 sleep in.
test09_3 started.
test09_3 wakeup in (test09_1).
test09_1 sleep out.
test09_1 chpri in.
test09_3 wakeup out.
test09_3 wakeup in (test09_2).
test09_2 sleep out.
test09_2 chpri in.
test09_1 chpri out.
test09_1 wait in.
test09_3 wakeup out.
test09_3 wait in.
test09_2 chpri out.
test09_2 wait in.
test09_1 wait out.
test09_1 trap in.
test09_1 DOWN.
test09_1 EXIT.
test09_3 wait out.
test09_3 exit in.
test09_3 EXIT.
test09_2 wait out.
test09_2 exit.
test09_2 EXIT.



・tkdiffを使って、サポートWebのソースと何が違うか調べてみた。
 見つかった違いは、step8の内容だが、本書p307の内容にあった。

 <kozos.cのline165~172>
/* set thread context */
thp->context.sp = (uint32)sp;

/* return thread which call system call to ready que */
putcurrent(); → ★★この1行が抜けてた★★

/* connect new made thread to ready que */
current = thp;
putcurrent();



・この修正で以下の通り、サポートWebソースと同じ結果になった。

Welcome to minicom 2.3

OPTIONS: I18n
Compiled on Aug 19 2010, 05:48:57.
Port /dev/ttyUSB0

Press CTRL-A Z for help on special keys

kzload (kozos boot loader) started.
kzload> load

XMODEM receive succeeded.
kzload> run
starting from entry point: ffffc020
kozos boot succeed!
test09_1 started.
test09_1 sleep in.
test09_2 started.
test09_2 sleep in.
test09_3 started.
test09_3 wakeup in (test09_1).
test09_1 sleep out.
test09_1 chpri in.
test09_3 wakeup out.
test09_3 wakeup in (test09_2).
test09_2 sleep out.
test09_2 chpri in.
test09_1 chpri out.
test09_1 wait in.
test09_3 wakeup out.
test09_3 wait in.
test09_2 chpri out.
test09_2 wait in.
test09_1 wait out.
test09_1 trap in.
test09_1 DOWN.
test09_1 EXIT.
test09_3 wait out.
test09_3 exit in.
test09_3 EXIT.
test09_2 wait out.
test09_2 exit.
test09_2 EXIT.



■KOZOSブートローダの8KB制限はどこから来るのか?
 サポートWebでヒントになったページには以下の説明があるが、ざっと探したものの
 書籍のどこに記載されているか発見出来ず。

KOZOSのブートローダーが扱えるファイルのサイズは (書籍中にもありますが)8KB程度までです.

カレンダー
01 | 2014/02 | 03
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード