仕組み
- フラッシュROMに割り込みベクタという配列((4Byte/割り込みベクタ)×64割り込み要因)が配置される
- ある割り込みが呼ばれると、該当の割り込みベクタに格納されているアドレスにジャンプして処理を実行する
- ジャンプ先の処理を割り込みハンドルと呼ぶ
- ボードを起動するとリセットベクタという割り込みが呼ばれる
- リセットベクタはフラッシュROMの0x000000に格納されている
コードの説明
- 割り込みベクタ(vector.c)一部抜粋
- フラッシュROMの先頭(H8の割り込みベクタの場所)に書き込まれる
- リセットベクタの割り込みハンドラとしてstart関数を登録する
- 起動するとstart関数に処理が渡される
- H8の割り込みベクタの数である64個の要素
void (*vectors[])(void) = {
start, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
};
-
リンカスクリプト(ld.scr)
- 上記の配列をフラッシュROMに配置するスクリプト
-
スタートアップ(startup.s)一部抜粋
- start関数の定義
- start関数の中でmain()を呼び出す
_start:
mov.l #0xffff00,sp
jsr @_main
- main()関数の定義(main.c)一部抜粋
int main(void)
{
////略
return 0;
}
元の本
12ステップで作る組込みOS自作入門
posted with amazlet at 16.08.21
坂井 弘亮
カットシステム
売り上げランキング: 38,961
カットシステム
売り上げランキング: 38,961