15日目でマルチタスク
今日はマルチタスクでした。これまで電車の中で何回か読んでいた内容なのでさくさくと進みました。
タスクのスタックへsht_backを積む時のアドレス計算のところで混乱しましたが、よく考えてみるとなるほどなと思いましたとさ。
面白くなってきましたねぇ。すでに本の値段分は楽しんだかも。
タスクのスタックへsht_backを積む時のアドレス計算のところで混乱しましたが、よく考えてみるとなるほどなと思いましたとさ。
面白くなってきましたねぇ。すでに本の値段分は楽しんだかも。
- TB-URL http://www.tokuda.net/diary/0186/tb/
1: hiro 2013年03月31日(日) 午後0時19分
はじめまして.hiroと申します.自分は今,丁度この15日目を読んでいるのですが,どうにも理解できないところがありまして,ご意見を頂きたくコメントさせて頂きます.
harib12gで,本当の割り込み処理を行うということでmt_taskswitchを割り込みハンドラであるinthandler20で呼び出しています.プログラムで明示的にタスク切り替えを行なっている場合は,タイマー割り込み->_asm_inthandler20によるレジスタの保存->inthandler20の実行(タイムアウト処理)->_asm_inthandler20によるレジスタの復帰->タスクの実行->FIFOの状態を見てタスクスイッチ,となっていると理解しています.これをharib12gでは,タスクの変更を割り込みハンドラ内(inthandler20)で行うように変更しています.この場合 ,タイマー割り込み->_asm_inthandler20によるレジスタの保存->inthandler20の実行(タイマー処理とタスクスイッチ)->変更後タスクの実行->タイマー割り込み->...と続き,_asm_inthandler20(レジスタの保存)->inthandler20->タスク実行->タイマー割り込み->_asm_inthandler20(レジスタの保存)->inthandler20の実行...となってしまい,inthandler20から復旧したあとの_asm_handler20によるレジスタの復元が行われないような気がするのですが,ここはどのように理解すればよろしいのでしょうか?
大変恐縮ですが,ご意見をいただければと思います.よろしくお願いいたします.