LoginSignup
2
1

More than 5 years have passed since last update.

【12ステップで作る 組込みOS自作入門】③1stステップ:スタートアップの仕組みメモ

Posted at

仕組み

  • フラッシュ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自作入門
坂井 弘亮
カットシステム
売り上げランキング: 38,961
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1