ねこめもmkII(マークツー)

本家ねこめも (http://nekomemo2.site)の補助用。 主に勉強ネタ。

12日目(タイマー追加の1日目)

かなり間が空いたので、振り返りつつ進める。(これは別途ページ作成予定)
11日目以降から、各ファイルに追記する箇所がわかりやすくなってきた。
が、微妙に違う箇所もあるので油断は禁物。
一応CD-ROMの内容と比較して見るほうがいい。
それとUbuntu上でやっているので、それに合わせた修正をするのに多少注意が必要。

今回からtimer.cが増える。Makefileに忘れずに追記。
本書に記載されている以外に、bootpack.hにもinthandler20関連の追記を忘れないように。 よくやるので。(今回も忘れてエラーを出した)
あと、IRQの説明で不明な点はoswikiで確認。

harib09bでbootpack.hの追記、本書に書かれている

 /* timer.c */
 struct TIMERCTL {
  unsigned int count;
 };

だけでなく、次の行に

extern struct TIMERCTL timerctl;

も必要。
これに気づかず、かなり時間を食った。
やはり元のファイルを見ながらの確認も必要。

harib09dのbootpack.hも同じく。
本書に記載されていること以外にも追加されてるので、これにも引っかかった。
それ以降は変数名の変更を間違えなければ大丈夫そう。

余談だが、「時刻調節プログラム」はよくわからないので飛ばした。

結局今回編集したのはbootpack.c bootpack.h timer.cのみだが、タイプミスにかなり苦しんだ。
それとここに来て、Visual Studio Codeの良さがわかってきた。
Windowsでやり直すことがあったら引き続き使っていこうと思う。

 


今回参照させて頂いたサイト:
http://oswiki.osask.jp/?cmd=read&page=%28PIT%298254&word=irq0

11日目(おまけ)

11日目の前半、どうしても気になったので、参考になるサイトがないか探しまくった。
結局、探し方を変えて「SHTCTL」で検索すると意外と出てきた。

図も合わせて丁寧に解説されていて、とてもわかりやすくて助かったのは以下のブログ。

OS学習メモ10(30日OS自作入門10日目) - JD(情報系大学生)雑記
OS学習メモ11(30日OS自作入門11日) - JD(情報系大学生)雑記

もちろん本書を読んでいること前提で、最初から追ってないと内容は理解できない。

でも初心者でもわかりやすくて目が滑らないので、30日本の記事を最初からじっくり読ませていただいた。

このブログでは自分がやったことだけをメインに書いていたが、こういうふうにまとめておくと他の人のためになるということをしみじみ実感。
しかし今さら書き換えるのも大変なので、この本の勉強についてはこのまま進めて、別の勉強のときに第三者にも分かりやすくまとめる方法を考えたいと思う。

ついでに、意外にもYahoo知恵袋でピンポイントな回答を見つけた。

https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13202204478

初心者に引っ掛かりやすいところは同じなんだなと思うと同時に、コードをそのまま載せて回答を得るというのもありなのかと驚いた。
しかもちゃんと答えてくれる人がいるのがすごい。
独学でやっているとたまに誰かに相談したいと思うときがあるので、知恵袋でなくてもどこかのフォーラムで聞くことができるといいなと思う。

11日目(カウンタの作成、修正)

今回はbootpack.cとsheet.cの微妙な修正が多く、できるだけ手書きで進めていたが、途中でタイプミスのエラーが多くなったため、コピペに変更。
いつもよりは内容は難しく無いので、問題ないと思われる。

しかしカウンタウィンドウの追加以外は大きな変更がないので、変更点が解りづらい。
カウンタを表示させることは難しくはないものの(しかしC言語の解読はあいかわらずできてない)、harib08cの「shtctlの省略」がむしろ難しかった。
ここはまた読み直さないとわからない。

カウンタのちらつきは、自分の環境ではちらつきというレベルではなく、完全に文字が消えるぐらいひどかった。
さらにharib08gでは、ウィンドウにマウスが重なると動かなくなった。
ここでカウンタが10dと表示されたまま動いてないことに気付く。

カウンタの表記のところを、
 sprintf(s, "%d", count);
としてみたら、動くようになった。
ただし、桁数は変動する。(数字の前に0がつかない)
いつもの数字表示の修正だが、なぜマウスまで動かなくなっていたのか不明。

最後にbootpack.hとbootpack.c、それとsheet.cをまた修正。
ちらつきを完全に修正して完了。

harib08hの内容は、考え方はわかりやすいがやはりプログラム自体がわかりにくい。
これについて(自分の低いレベルでもわかるように)詳細を説明しているサイトが見つからなかったので、またいずれ読み直して勉強ことにして次に進める。