📄 cpu_support.src
字号:
;; TOPPERS/JSP Kernel; Toyohashi Open Platform for Embedded Real-Time Systems/; Just Standard Profile Kernel;; Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory; Toyohashi Univ. of Technology, JAPAN; Copyright (C) 2001-2005 by Industrial Technology Institute,; Miyagi Prefectural Government, JAPAN; Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering; Tomakomai National College of Technology, JAPAN;; 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation; によって给山されている GNU General Public License の Version 2 に淡; 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア; を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布·; 网脱と钙ぶ∷することを痰浸で钓满するˉ; (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯; 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖; スコ〖ド面に崔まれていることˉ; (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗; 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱; 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡; の痰瘦沮惮年を非很することˉ; (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗; 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ; とˉ; (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟; 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ; (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに; 鼠桂することˉ; (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄; 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ;; 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お; よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も; 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木; 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ;; @(#) $Id: cpu_support.src,v 1.1 2005/12/12 09:00:13 honda Exp $;; プロセッサ巴赂モジュ〖ル アセンブリ咐胳婶∈H8S脱∷; カ〖ネル柒婶で蝗脱する年盗 .CPU 2000A .SECTION P, CODE, ALIGN=2 .INCLUDE "sys_config.inc" .INCLUDE "cpu_config.inc" .INCLUDE "offset.inc"; 鼎奶婶とのインタ〖フェ〖ス; 恃眶 .IMPORT _runtsk .IMPORT _schedtsk .IMPORT _reqflg .IMPORT _enadsp; 簇眶 .IMPORT _ext_tsk .IMPORT _call_texrtn; H8S巴赂婶迫极; 恃眶 .IMPORT _intnest .IMPORT _iscpulocked .IMPORT _task_intmask; 簇眶 .IMPORT _cpu_experr;; 充哈み敦贿】钓材; exrレジスタのトレ〖スビットTは瘦赂していない;;; 充哈み敦贿∈カ〖ネル瓷妄嘲の充哈みを近く∷;DISINT: .DEFINE "ldc.b #MAX_IPM, exr";; すべての充哈みを钓材;ENAINT: .DEFINE "ldc.b #EXR_ENAINT_ALL, exr";; タスクディスパッチャ;; _dispatch は、充哈み嘲ネストカウンタ = 0,充哈み敦贿觉轮; で钙び叫さなければならないˉ_exit_and_dispatch も·充哈みネスト; カウンタ = 0ˇ充哈み敦贿觉轮で钙び叫すのが付搂であるが·カ〖ネル; 弹瓢箕に滦炳するため·充哈みネストカウンタ = 1で钙び叫した眷圭に; も滦炳しているˉ .GLOBAL _exit_and_dispatch_exit_and_dispatch: ; 充り哈み敦贿で钙ばれる。 mov.b #0, r0l ; 充哈みネストカウンタをクリア mov.b r0l, @_intnest bra dispatcher ; ; サ〖ビスコ〖ル柒から笆布の掘凤で钙ばれる。 ; ˇCPUロック觉轮 ; ˇer0,er1を瘦赂 ; .GLOBAL _dispatch_dispatch: push.l er2 ; er2×6を瘦赂 push.l er3 push.l er4 push.l er5 push.l er6 mov.l @_runtsk, er0 ; er0 <- runtsk mov.l sp, @(TCB_sp, er0) ; タスクスタックポインタを瘦赂 mov.l #dispatch_r, er1 ; 悸乖浩倡戎孟を瘦赂 mov.l er1, @(TCB_pc, er0);; ディスパッチャ塑挛;dispatcher: ; ここには充り哈み敦贿で丸ること ; ここでruntskにschedtskを洛掐するのは2つの罢蹋がある。 ; (1) schedtsk != NULLの眷圭 ; 奶撅のタスク磊り仑えを乖う。 ; (2) schedtsk == NULLの眷圭 ; runtskにNULLを洛掐しておく。 ; ∈dispatcher_1笆惯の充哈み略ちで充哈みが掐り、その面で ; iget_tid()がコ〖ルされたときに赖しくTSK_NONEを手すため ; には、悸乖觉轮のタスクがない箕に、runtskをNULLにして ; おく涩妥がある。∷ mov.l @_schedtsk, er0 ; er0 <- schedtsk mov.l er0, @_runtsk ; schedtsk があるか々 beq dispatcher_1 ; 痰ければジャンプ mov.l @(TCB_sp, er0), sp ; スタックポインタを牲傅 mov.l @(TCB_pc, er0), er0 ; 悸乖浩倡戎孟に尸呆 jmp @er0 ; ; 悸乖すべきタスクがない眷圭の充哈み略ち ; ; ここで润タスクコンテキストと票じ觉轮に磊り垂えるのは·ここ ; で券栏する充哈み借妄にどのスタックを蝗うかという啼玛の豺疯 ; と·充哈みハンドラ柒でのタスクディスパッチの松贿という企つ ; の罢蹋があるˉdispatcher_1: mov.l #STACKTOP, sp ; スタックを充哈みスタックに磊仑え mov.b #1, r0l ; 充哈みネストカウンタを1にする mov.b r0l, @_intnest ; CPUロックフラグをクリア mov.w #0, r3 mov.w r3, @_iscpulockeddispatcher_2_enable_interrupt: ; 充哈み钓材 .AIFDEF SUPPORT_CHG_IPM ; ldc.w @dips, exr炭吾は、メモリから2バイト粕み叫し、布疤 ; 1バイトは嘉てられる。.wを烧けないと"307 (E) ILLEGAL ; ADDRESSING MODE OR OBJECT CODE SIZE"になる。 ldc.w @_task_intmask, exr .AELSE ; SUPPORT_CHG_IPM ldc.b #EXR_ENAINT_ALL, exr .AENDI ; SUPPORT_CHG_IPM ; ldc炭吾木稿は充哈み敦贿であり、充哈み妥滇があっても ; 肌の炭吾が悸乖される。 ; ∈充哈みから提ってきてsleepするケ〖スはない∷ sleep ; 充哈み略ち DISINT ; 充り哈み敦贿 mov.w @_reqflg, r0 ; reqflgのチェック ; reqflgはBOOL房 -> int房(16bits) beq dispatcher_2_enable_interrupt mov.w #0,r0 mov.w r0, @_reqflg ; reqflgのクリア mov.b r0l, @_intnest ; 充哈みネストカウンタをクリア bra dispatcher;; タスクスイッチの冯蔡ここから悸乖が浩倡される;dispatch_r: pop.l er6 ; er2×6を牲傅 pop.l er5 pop.l er4 pop.l er3 pop.l er2 ; タスク毋嘲钓材觉轮のチェック mov.l @_runtsk, er0 ; er0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -