2010年10月10日日曜日
2010年10月9日土曜日
新しいiPod Touch 4Gは期待はずれかも
iPod Touchへの期待は、最低でも「iPhone品質 ― 電話」です。アップルはこの潜在ニーズがわかっているのか、わかっていないのか? とりあえず、今回の買いは見送りです。このまま行けば、iPod Touchユーザに見放されます、アップルさん。
追伸
amazonではかなり好評のようです。。。
追伸
amazonではかなり好評のようです。。。
2010年9月11日土曜日
モータ制御って楽しそうだ
電気と機械の接点の代表と言えばモータでしょうね。EDNにはベクトル制御に関してこんな解説があり、なんだか面白そう。「座標系を回転子と一緒に回す」って、確かに電機子が回転して見えるでしょう。まるで地動説と天動説のようです。
2010年8月11日水曜日
WindowsXPが最近重たいのはwuauclt.exeのせいか?
WindowsXPが最近やけに重いです。確かに自動更新をやっているwuauclt.exeのメモリ使用量がものすごい勢いで増えてます。ディスアクセスも半端じゃありません。
Windows Update サイトで利用可能な更新を検索すると 0x80248013 エラーが表示される
に従って、履歴DBを削除すると軽くなるようですが、それにしても、wuauclt.exeはそんなに過去の履歴までいちいち参照しているのでしょうか?
Windows Update サイトで利用可能な更新を検索すると 0x80248013 エラーが表示される
に従って、履歴DBを削除すると軽くなるようですが、それにしても、wuauclt.exeはそんなに過去の履歴までいちいち参照しているのでしょうか?
2010年7月25日日曜日
2010年7月17日土曜日
「12ステップで作る 組込みOS自作入門」- KOZOSのスレッド生成を変えてみる part3
p.14~p.17にかけてクロスコンパイラのビルドの話があります。先週ブログに書いたように、cygwinでビルドしようとすると、なんとシェル(shell)がハング! コントロールCでも応答なし。おまけにWindowsのシャットダウンもできなくなる始末です。
cygwinのデフォルトのシェル(shell)の問題ではないかと思い、cygwinのsetupからminttyを選択し新しいシェルとして追加インストールしました。試しにbinutilsをビルドしてみましたが、ここまではまったく問題なしです。
2010年7月10日土曜日
Cygwinハング!?
とりあえず、cygwinでH8用のクロス環境を作ろうと、cygwin環境を設定の上、binutilsをダウンロードしてビルドしたが、binutilsのビルド中にcygwinが固まる。別のパソコンでやってみてもcygwinが固まる。更には、Windowsをシャットダウンできなくなる。
参考:H8マイコンのソフトウェア開発環境を整備しよう
参考:H8マイコンのソフトウェア開発環境を整備しよう
2010年7月4日日曜日
「12ステップで作る 組込みOS自作入門」- KOZOSのスレッド生成を変えてみる part2
KOZOSのレディキューですが、次のようにプライオリティごとにあります。
static struct {
kz_thread *head;
kz_thread *tail;
} readyque[PRIORITY_NUM];
一方、レディキューは1つにするという考え方もあると思います。そのほうがシンプルですし。例えば、こんな感じで
typedef struct _kz_list {
kz_thread *thrd; /* スレッド */
int aux; /* 補助情報 */
struct _kz_list *next; /* 次の要素 */
} kz_list;
static kz_list readyque;
auxという補助情報ですが、基本的にはプライオリティ値を入れます。ただ、先頭要素であるreadyqueにはリストにつながっている要素数を入れておきます。
次にリスト操作のAPIを考えて見ますが、
/* スレッドをリストに挿入する */
void kz_insert(kz_list* list, kz_thread* thrd);
例えば、新しくスレッドを作成した場合は、kz_insertを呼び出してreadyque
にスレッドを挿入します。スレッドの挿入は、プライオリティ値の小さい順に
しておきます。
iPhone OSの進化で見放されるiPod Touch ?
うーむ、互換性がないのでインストールされませんでした、とiTunesに言われても困りますね。最初にアプリケーションを買った時は、この古いOSで動いてたのですから。新しいOSについていくアプリケーションは、古いOSしか動かないハードウェアを見放すというわけでしょうか? 今後もiPhone OSは進化を続けるでしょうね。そして、アプリケーションはそれを追いかける。すると、古いOSしか動かないハードは魅力を失い、新しいハードへ移行する。
2010年7月3日土曜日
2010年6月26日土曜日
「12ステップで作る 組込みOS自作入門」 - KOZOSのスレッド生成を変えてみるpart1
「12ステップで作る 組込みOS自作入門」、非常に良い本ですが、第8ステップのスレッド生成あたりから少し説明が難しくなってきます。
KOZOSのスレッド生成は、システムコールから呼び出されるthread_runで行われるようです。これ以外にもコンテキストスイッチのみをシステムコールで実装する、という考え方もあるかと思います。この場合、(3)は必要に応じてということになるでしょう。
(1)TCB(スレッドオブジェクト)にスレッド生成に必要な情報を格納する
(2)TCBをreadyListに挿入する
(3)現在動作しているスレッド(つまりスレッド生成の関数を呼んだスレッド)よりも、たった今生成したスレッドのプライオリティが高いなら、コンテキストスイッチする
(a) KOZOSでのコンテキストスイッチは_dispatch(pp.296)で行われています。このコードを良く見てみると、スタックに詰まれた値からER0~ER6を復旧してrteを呼び出すことが行われています。
(b)別の実装としては、TCB(スレッドオブジェクト)に格納しておいた値からER0~ER6を復旧してrteを呼び出すといことが考えられます。
(a),(b)、いずれにせよCSRとPCはスタックに保存しておいてrteを呼び出す必要があります。次回は(b)の方法について更に検討してみます。
KOZOSのスレッド生成は、システムコールから呼び出されるthread_runで行われるようです。これ以外にもコンテキストスイッチのみをシステムコールで実装する、という考え方もあるかと思います。この場合、(3)は必要に応じてということになるでしょう。
(1)TCB(スレッドオブジェクト)にスレッド生成に必要な情報を格納する
(2)TCBをreadyListに挿入する
(3)現在動作しているスレッド(つまりスレッド生成の関数を呼んだスレッド)よりも、たった今生成したスレッドのプライオリティが高いなら、コンテキストスイッチする
(a) KOZOSでのコンテキストスイッチは_dispatch(pp.296)で行われています。このコードを良く見てみると、スタックに詰まれた値からER0~ER6を復旧してrteを呼び出すことが行われています。
(b)別の実装としては、TCB(スレッドオブジェクト)に格納しておいた値からER0~ER6を復旧してrteを呼び出すといことが考えられます。
(a),(b)、いずれにせよCSRとPCはスタックに保存しておいてrteを呼び出す必要があります。次回は(b)の方法について更に検討してみます。
2010年6月12日土曜日
2010年6月5日土曜日
x86の割込み(MSI)
最近のx86の割込みは大きく3種類あるようです。
・8259PIC(古典的な割込みコントローラ)
・IOAPIC MSI
・そしてPCIeの場合は PCIe MSI
Atomの例がここにあります。
それにしてもLINT0とLINT1に何かつながるような書き方がされてますが、本当でしょうか?
LINT1はNMIだとして、LINT0には一体何がつながるのでしょうか? 8259は別の線になってますし。
・8259PIC(古典的な割込みコントローラ)
・IOAPIC MSI
・そしてPCIeの場合は PCIe MSI
Atomの例がここにあります。
それにしてもLINT0とLINT1に何かつながるような書き方がされてますが、本当でしょうか?
LINT1はNMIだとして、LINT0には一体何がつながるのでしょうか? 8259は別の線になってますし。
2010年3月15日月曜日
x86カーネル構築入門本、いずれもに短し襷に長し
x86でのカーネル構築に関して、いくつか本がありまますが、いずれも帯に短し襷に長しです。
というわけで、もう少しなんとかならないか、と考えました。そう
、「Bran's Kernel Development Tutorial 」を活用すれば、OSカーネルの構築がもっとやさしく学べるはずです。次回は具体的に検討してみます。
- 作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践
内容は良いのですが、とにかくアセンブラが多すぎです。C言語が出てくるのは結局最後の章。
- はじめて読む486―32ビットコンピュータをやさしく語る
図が多く説明も平易でサンプルの大半はC言語で書かれてます。しかし、実際に試そうと思うとMS-DOS環境が必要で試せない(時代遅れ)。
- 30日でできる! OS自作入門
はやめにC言語が導入されるのは良いですが、だらだらと長い文体で肝心の理屈のほうが頭に入りません。使うツールも著者がカスタマイズしたものです。
というわけで、もう少しなんとかならないか、と考えました。そう
、「Bran's Kernel Development Tutorial 」を活用すれば、OSカーネルの構築がもっとやさしく学べるはずです。次回は具体的に検討してみます。
2010年3月13日土曜日
「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」に関連して
「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」に関連して
os developerなるサイトがあるのを最近発見(?)した。作りながら学ぶOSカーネルの理解の助けとなるのがTutorialの中のBran's Kernel Development Tutorial です。
os developerなるサイトがあるのを最近発見(?)した。作りながら学ぶOSカーネルの理解の助けとなるのがTutorialの中のBran's Kernel Development Tutorial です。
WRITE_REGISTER_*
WRITE_REGISTER_*ですが、ご存知の通り、WindowsドライバからメモリマップドI/Oをアクセスするための関数です。こちらのサイトにWRITE_REGISTER_UCHARについて簡単に紹介されていますが、最後の
lock or dword ptr [esp+4], edx
という命令、何のために実行してるのでしょうね。実はライトバッファのフラッシュっぽいのですが、また時間を見て調べてみます。
lock or dword ptr [esp+4], edx
という命令、何のために実行してるのでしょうね。実はライトバッファのフラッシュっぽいのですが、また時間を見て調べてみます。
2010年2月28日日曜日
「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」3章再び
「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」3章再び
セグメントディスクリプタに関して3章にはアセンブラでの記述があります。
dw 0xFFFF ; limit:0xFFFF
dw 0x0000 ; base 0~15ビット
db 0x01 ; base 16~23ビット
db 0x9A ; P:1, DPL:0, Code, non-conforming, readable
db 0xCF ; G:1, D:1, limit 16~19ビット:0xF
db 0x00 ; base 24~32ビット
これをC言語のデータ構造として表現してみると
unsigned short型のbase_low、次はunsigned char型のbase_mid、最後は
unsigned char型のbase_highです。インテルはリトルエンディアンなので、
unsigned short型の場合、下位バイトが下位アドレス、上位バイトが上位アド
レスになります。つまり、base_low, base_mid, base_highを各バイト単位で見
ていくと、下位バイトが下位アドレスに必ずあります。
過去のまとめについてはこちらです。
セグメントディスクリプタに関して3章にはアセンブラでの記述があります。
dw 0xFFFF ; limit:0xFFFF
dw 0x0000 ; base 0~15ビット
db 0x01 ; base 16~23ビット
db 0x9A ; P:1, DPL:0, Code, non-conforming, readable
db 0xCF ; G:1, D:1, limit 16~19ビット:0xF
db 0x00 ; base 24~32ビット
これをC言語のデータ構造として表現してみると
typdef struct _segdesc { /* 合計 8バイト */
unsigned short limit_low;
unsigned short base_low;
unsigned char base_mid;
unsigned char type;
unsigned char gd_and_limit_high;
unsigned char base_high;
} segdesc;
という感じです。セグメントのベースアドレスは3つに分かれてます。最初はunsigned short型のbase_low、次はunsigned char型のbase_mid、最後は
unsigned char型のbase_highです。インテルはリトルエンディアンなので、
unsigned short型の場合、下位バイトが下位アドレス、上位バイトが上位アド
レスになります。つまり、base_low, base_mid, base_highを各バイト単位で見
ていくと、下位バイトが下位アドレスに必ずあります。
過去のまとめについてはこちらです。
2010年1月16日土曜日
Pleiades All in Oneインストール
Pleiades All in OneのEclipse Europa ベース、3.3.2.20080303 版の中からJavaETL JRE付きをインストールした。Java用のEclipseのプラグインはフリーのものが充実しており試すのが目的。ところが、上記をインストールしようとすると、なんとWinRARなるシェアウェアが必要となる。原因は、255文字を超えるパスを扱うためだ。せっかく、レジストリを一切さわらず、zipの解凍だけでインストールが済むツールになっているのに、これは非常に残念。
登録:
投稿 (Atom)