📄 cpu_config.h
字号:
/* * 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-2004 by Dep. of Computer Science and Engineering * Tomakomai National College of Technology, JAPAN * Copyright (C) 2001-2004 by Industrial Technology Institute, * Miyagi Prefectural Government, JAPAN * * 惧淡螟侯涪荚は·笆布の (1)×(4) の掘凤か·Free Software Foundation * によって给山されている GNU General Public License の Version 2 に淡 * 揭されている掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェア * を猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを·ライブラリ妨及など·戮のソフトウェア倡券に蝗 * 脱できる妨で浩芹邵する眷圭には·浩芹邵に燃うドキュメント∈网脱 * 荚マニュアルなど∷に·惧淡の螟侯涪山绩·この网脱掘凤および布淡 * の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを·怠达に寥み哈むなど·戮のソフトウェア倡券に蝗 * 脱できない妨で浩芹邵する眷圭には·肌のいずれかの掘凤を塔たすこ * とˉ * (a) 浩芹邵に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟 * 侯涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 浩芹邵の妨轮を·侍に年める数恕によって·TOPPERSプロジェクトに * 鼠桂することˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚およびTOPPERSプロジェクトを倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚お * よびTOPPERSプロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ *//* * プロセッサ巴赂モジュ〖ル(H8S脱) * * このインクル〖ドファイルは·t_config.h のみからインクル〖ドされるˉ * 戮のファイルから木儡インクル〖ドしてはならないˉ */#ifndef _CPU_CONFIG_H_#define _CPU_CONFIG_H_/* * カ〖ネルの柒婶急侍叹のリネ〖ム */#include <cpu_rename.h>/* * プロセッサ簇息の年盗 */#include <h8s.h>#include <h8s_sil.h>/* * 肋年材墙なカ〖ネル瓷妄布の呵光钓材充哈みビットパタ〖ン * (エクステンドレジスタへ肋年;cpu_insn.h 柒で网脱するので、黎に年盗する。) */#ifndef GDB_STUB#define MAX_IPM 7 /* = EXR_I2|EXR_I1|EXR_I0 (呵光レベル) */#else /* GDB_STUB */#define MAX_IPM 6 /* レベル7の充り哈みは、GDB_STUB が网脱する */#endif /* GDB_STUB */#define str_MAX_IPM TO_STRING(MAX_IPM) /* 充哈み掐庚借妄INTHDR_ENTRYマクロ脱 (cpu_config.h) *//* * プロセッサの泼检炭吾のインライン簇眶年盗 * 柒婶で、MAX_IPMを网脱しているので、年盗稿に粕み哈む */#include <cpu_insn.h>/* * chg_ipm/get_ipm をサポ〖トするかどうかの年盗 */#define SUPPORT_CHG_IPM/* * タスクコンテキストブロックの年盗 */#ifndef _MACRO_ONLYtypedef struct task_context_block { VP sp; /* スタックポインタ */ FP pc; /* プログラムカウンタ */} CTXB;#endif /* _MACRO_ONLY *//* * システム觉轮徊救 */#ifndef _MACRO_ONLY/* * 充哈みネストカウンタ * ネストカウンタの猛でコンテキストの冉们を乖うので、コンテキスト徊救箕に * 网脱する。 */extern UW intnest;/* * コンテキスト徊救 * 充哈みネストカウンタを粕み叫した木稿に充哈みが券栏しても、提ったときには * コンテキストも傅に提っている */Inline BOOLsense_context(void){ return( intnest > 0 );}Inline BOOLsense_lock(void){ return( current_intmask() == MAX_IPM );}#endif /* _MACRO_ONLY */#define t_sense_lock sense_lock#define i_sense_lock sense_lock#ifndef _MACRO_ONLY/* * CPUロックとその豺近∈タスクコンテキスト脱∷ * * task_intmask は、chg_ipm をサポ〖トするための恃眶。chg_ipm をサポ〖ト * しない眷圭には、t_unlock_cpu 面の task_intmask は 0 に弥き垂えてよい。 */#ifdef SUPPORT_CHG_IPMextern IPM task_intmask; /* タスクコンテキストでの充哈みマスク */#endif /* SUPPORT_CHG_IPM */Inline voidt_lock_cpu(void){ disint(); /* cpu_insn.h */}Inline voidt_unlock_cpu(void){#ifdef SUPPORT_CHG_IPM /* * t_unlock_cpu が钙び叫されるのは CPUロック觉轮のみであるため。 * 借妄の庞面で task_intmask が今き垂わることはない。 */ set_intmask(task_intmask);#else /* SUPPORT_CHG_IPM */ enaint(); /* cpu_insn.h */#endif /* SUPPORT_CHG_IPM */}/* * CPUロックとその豺近∈润タスクコンテキスト脱∷ */extern IPM int_intmask; /* 润タスクコンテキストでの充哈みマスク */Inline voidi_lock_cpu(void){ IPM intmask; /* * 办箕恃眶 intmask を蝗っているのは、current_intmask()を钙んだ木稿に * 充哈みが券栏し、弹瓢された充哈みハンドラ柒で int_intmask が恃构 * される材墙拉があるためである。 */ intmask = current_intmask(); disint(); /* cpu_insn.h */ int_intmask = intmask;}Inline voidi_unlock_cpu(void){ set_intmask(int_intmask);}/* * タスクディスパッチャ *//* * 呵光庭黎界疤タスクへのディスパッチ∈cpu_support.S∷ * dispatch は·タスクコンテキストから钙び叫されたサ〖ビスコ〖ル借妄柒で、 * CPUロック觉轮で钙び叫さなければならない。 */extern void dispatch(void);/* * 附哼のコンテキストを嘉ててディスパッチ∈cpu_support.S∷ * exit_and_dispatch は·CPUロック觉轮で钙び叫さなければならない。 */extern void exit_and_dispatch(void);/* * 充哈みハンドラの肋年 * H8Sでは、充哈みハンドラテ〖ブルの肋年はROMに木儡乖うため蝗脱しない。 */Inline void define_inh(INHNO inhno, FP inthdr) {}/* * CPU毋嘲ハンドラの肋年 * H8Sでは、充哈みハンドラテ〖ブルの肋年はROMに木儡乖うため蝗脱しない。 */Inline void define_exc(EXCNO excno, FP exchdr) {}#endif /* _MACRO_ONLY *//* * 充哈みハンドラの叫掐庚借妄 *//* * 充哈みハンドラの掐庚借妄 * この借妄に丸るまでに、ハ〖ドウェアにて、碰澈充哈みレベルまでの充哈みを * 敦贿する借妄が乖われている。 * entry¨掐庚借妄のラベル * inthdr¨C咐胳ル〖チンの黎片アドレス */#define _INTHDR_ENTRY(entry, inthdr) \asm(" .text \n" \" .align 2 \n" \" .global _"#entry" \n" \" \n" \"_"#entry": \n" \" push.l er0 \n" \ /* CPUロックに涩妥なレジスタをタスクスタックに略闰 */ \" stc.b exr, r0l \n" \ /* exr を r0l (er0) にコピ〖 \" (_kernel_ret_main 柒で、充哈み敦贿钓材扩告に蝗う) */ \" \n" \" ldc.b #"str_MAX_IPM", exr \n" \ /* lock_cpu 陵碰 (充哈み敦贿) */ \" \n" \" push.l er1 \n" \ /* er1 をタスクスタックに略闰 */ \" mov.l #_"#inthdr", er1 \n" \ /* er1 = 充哈みハンドラのアドレス */ \" jmp _kernel_ret_main \n" \ /* 充哈み掐庚借妄へジャンプ */ \)/* * 充哈みハンドラの叫掐庚借妄の栏喇マクロ */#define INTHDR_ENTRY(inthdr) \ extern void inthdr##_entry(void); \ _INTHDR_ENTRY(inthdr##_entry, inthdr) /* この借妄は惧淡マクロで年盗 */#define INT_ENTRY(inthdr) inthdr##_entry/* ベクタテ〖ブル(sys_support.S)淡揭脱ラベル艰评マクロ */#define __INT_ENTRY(inthdr) _##inthdr##_entry#define _INT_ENTRY(inthdr) __INT_ENTRY(inthdr)/* * CPU毋嘲ハンドラの叫掐庚借妄の栏喇マクロ */#define EXCHDR_ENTRY(exchdr) INTHDR_ENTRY(exchdr)#define EXC_ENTRY(exchdr) exchdr##_entry/* ベクタテ〖ブル(sys_support.S)淡揭脱ラベル艰评マクロ */#define __EXC_ENTRY(exchdr) _##exchdr##_entry#define _EXC_ENTRY(exchdr) __EXC_ENTRY(exchdr)/* * CPU毋嘲の券栏した箕のシステム觉轮の徊救 */#ifndef _MACRO_ONLY/* * CPU毋嘲の券栏した箕のコンテキスト冉年 */Inline BOOLexc_sense_context(VP p_excinf){ return(intnest > 1); /* 1と孺秤するのは、附哼悸乖面のCPU毋嘲の尸充哈みネスト カウンタがインクリメントされているため */}/* * CPU毋嘲の券栏した箕のCPUロック觉轮の徊救 * H8S惹では、钙ばれることは痰いが、ソ〖スを孺秤する眷圭羹けに肋年する。 */Inline BOOLexc_sense_lock(VP p_excinf){ return(TRUE);}/* * プロセッサ巴赂の介袋步 */extern void cpu_initialize(void);/* * プロセッサ巴赂の姜位箕借妄 */extern void cpu_terminate(void);#endif /* _MACRO_ONLY_ *//*============================================================================*//* 鼎奶ドキュメントにはない、迫极の婶尸 *//* * 充哈みレベル肋年脱マクロ∈もしくは、インライン簇眶∷ * ˇx : インタラプトプライオリティレジスタ ( IPRA - IPRK ) * ˇy : IPR肋年脱マスク∈惧疤か布疤の联买∷ ( IPR_UPR, IPR_LOW ) * ˇz : 充哈みレベル ( 0 - 7 ) */#ifndef _MACRO_ONLYInline void icu_set_ilv( VP ipr, BOOL mask, INT level ) { if( mask == IPR_UPR ) { h8s_wrb_mem( ipr, ( h8s_reb_mem( ipr ) & ~IPR_UPR_MASK ) | TO_HI4((UB) level) ); } else if( mask == IPR_LOW ) { h8s_wrb_mem( ipr, ( h8s_reb_mem( ipr ) & ~IPR_LOW_MASK ) | TO_LO4((UB) level) ); }}#endif /* _MACRO_ONLY_ */#ifndef _MACRO_ONLY/* * 踏年盗充哈み券栏箕のエラ〖叫蜗 (cpu_config.c, cpu_support.S) * 菇陇挛 EXCSTACK は、h8s.h で年盗 */extern void cpu_experr(EXCSTACK *sp);#endif /* _MACRO_ONLY_ */#endif /* _CPU_CONFIG_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -