📄 cpu_config.h
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * Copyright (C) 2000-2003 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プロジェクトは·塑ソフトウェアに簇して·その努脱材墙拉も * 崔めて·いかなる瘦沮も乖わないˉまた·塑ソフトウェアの网脱により木 * 儡弄または粗儡弄に栏じたいかなる禄巢に簇しても·その勒扦を砷わないˉ */#ifndef _CPU_CONFIG_H_#define _CPU_CONFIG_H_/* * カ〖ネルの柒婶急侍叹のリネ〖ム */#include <cpu_rename.h>/* * プロセッサの泼检炭吾のインライン簇眶年盗 */#include <cpu_insn.h>/* * chg_ipm/get_ipm をサポ〖トするかどうかの年盗 */#define SUPPORT_CHG_IPM/* * TCB 簇息の年盗 * * cpu_context.h に掐れる数がエレガントだが·徊救の巴赂拉の簇犯で· * cpu_context.h には掐れられないˉ */#ifndef _MACRO_ONLY/* タスクコンテキストブロックの年盗 */typedef struct task_context_block { VP sp; /* スタックポインタ */ FP pc; /* プログラムカウンタ */} CTXB;#endif /* _MACRO_ONLY *//* TCB 面のフィ〖ルドのビット升の年盗 */#define TBIT_TCB_TSTAT 8 /* tstat フィ〖ルドのビット升 */#define TBIT_TCB_PRIORITY 8 /* priority フィ〖ルドのビット升 *//* * システム觉轮徊救 */#ifndef _MACRO_ONLY/* * コンテキスト徊救 * 充哈みネストカウンタを粕み叫した木稿に充哈みが券栏しても、提ったときには * コンテキストも傅に提っている。 */Inline BOOL sense_context() { UW intnest; Asm("move %0, "str_k0 :"=r"(intnest)); return(intnest > 0);}Inline BOOL sense_lock() { return(!(current_sr() & SR_IE));}#endif /* _MACRO_ONLY */#define t_sense_lock sense_lock#define i_sense_lock sense_lock/* * CPUロックとその豺近∈タスクコンテキスト脱∷ * CPUロック觉轮の冉们は、ステ〖タスレジスタのIEビットを脱いて冉们している。 */#ifndef _MACRO_ONLYInline void t_lock_cpu() { disint(); /* cpu_insn.h */}Inline void t_unlock_cpu() { enaint(); /* cpu_insn.h */}#endif /* _MACRO_ONLY *//* * CPUロックとその豺近∈润タスクコンテキスト脱∷ */#define i_lock_cpu t_lock_cpu#define i_unlock_cpu t_unlock_cpu/* * タスクディスパッチャ */#ifndef _MACRO_ONLY/* * 呵光庭黎界疤タスクへのディスパッチ∈cpu_support.S∷ * dispatch は、タスクコンテキストから钙び叫されたサ〖ビスコ〖ル借妄柒で、 * CPUロック觉轮で钙び叫さなければならない。 */extern void dispatch(void);/* * 附哼のコンテキストを嘉ててディスパッチ∈cpu_support.S∷ * exit_and_dispatch は、CPUロック觉轮で钙び叫さなければならない。 */extern void exit_and_dispatch(void);/* * 充哈みハンドラ】CPU毋嘲ハンドラの肋年 *//* 充哈みハンドラ】充哈みマスク导击テ〖ブル */extern INT_TABLE int_table[ TMAX_ALL_INTNO ];/* 毋嘲ハンドラ导击テ〖ブル */extern FP exc_table[ TMAX_CORE_EXCNO ];/* * 充哈みハンドラの肋年 * * ベクトル戎规(充哈み妥傍戎规)intno の充哈みハンドラの弹瓢戎孟をinthdrに肋年。 */Inline void define_inh(INTNO intno, FP inthdr) { int_table[intno].inthdr = inthdr;}/* * CPU毋嘲ハンドラの肋年 */Inline void define_exc(EXCNO excno, FP exchdr) { exc_table[excno] = exchdr;}#endif /* _MACRO_ONLY *//* * 充哈みハンドラの叫掐庚借妄の栏喇マクロ */#define INTHDR_ENTRY(inthdr) extern void inthdr(void)#define INT_ENTRY(inthdr) inthdr/* * CPU毋嘲ハンドラの叫掐庚借妄の栏喇マクロ * */#define EXCHDR_ENTRY(exchdr) extern void exchdr(VP sp)#define EXC_ENTRY(exchdr) exchdr/* * CPU毋嘲の券栏した箕のシステム觉轮の徊救 */#ifndef _MACRO_ONLY/* * CPU毋嘲の券栏した箕のコンテキスト冉侍 */Inline BOOL exc_sense_context(VP p_excinf) { UW nest; Asm( "move %0, "str_k0 : "=r"(nest) ); return( nest > 1 ); /* 1と孺秤するのは、附哼悸乖面のCPU毋嘲の尸だけ充哈みネスト カウンタがインクリメントされているため */}/* * CPU毋嘲の券栏した箕のCPUロック觉轮の徊救 */Inline BOOL exc_sense_lock(VP p_excinf) { /* Statusレジスタは、スタックに22戎誊に姥まれている。 exc_stack(mips3.h), cpu_support.S 徊救 */ return( !( *((UW *)p_excinf + 21) & SR_IE) );}/* * プロセッサ巴赂の介袋步 */extern void cpu_initialize(void);/* * プロセッサ巴赂の姜位箕借妄 */extern void cpu_terminate(void);#endif /* _MACRO_ONLY *//*============================================================================*//* 鼎奶ドキュメントにはない、迫极の婶尸 *//* プロセッサコア≤充哈みコントロ〖ラに肋年する充哈みマスクのチェック */#define CHECK_IPM(ipm) CHECK_CORE_IPM( (ipm.core >> 8) & 0xff ); \ CHECK_ICU_IPM( ipm.icu )#ifndef _MACRO_ONLY/* * 充り哈みレベルの肋年∈鼎奶婶からは钙び叫されない∷ */Inline void all_set_ilv(INTNO intno, IPM *ipm) { /* MIPSコアの intmask テ〖ブルの肋年 */ int_table[intno].intmask = SR_BEV | (ipm->core) | SR_IE; /* 充哈みベクタを、kseg1に积ってくるため、BEV=1 */ /* 充哈みコントロ〖ラの充哈みマスクテ〖ブルの肋年 */ /* ∈充哈みレベルの肋年∷ */ icu_set_ilv( intno, &(ipm->icu) );}#endif /* _MACRO_ONLY *//* * ログ叫蜗脱の簇眶 */#ifndef _MACRO_ONLY/* 判峡されていない充哈みˇ毋嘲券栏箕のログ叫蜗 (cpu_config.c, cpu_support.S) */extern void cpu_experr( EXCSTACK *sp, UW SR, UW CR );#endif /* _MACRO_ONLY */#endif /* _CPU_CONFIG_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -