📄 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
*
* 忋婰挊嶌尃幰偼丆埲壓偺 (1)乣(4) 偺忦審偐丆Free Software Foundation
* 偵傛偭偰岞昞偝傟偰偄傞 GNU General Public License 偺 Version 2 偵婰
* 弎偝傟偰偄傞忦審傪枮偨偡応崌偵尷傝丆杮僜僼僩僂僃傾乮杮僜僼僩僂僃傾
* 傪夵曄偟偨傕偺傪娷傓丏埲壓摨偠乯傪巊梡丒暋惢丒夵曄丒嵞攝晍乮埲壓丆
* 棙梡偲屇傇乯偡傞偙偲傪柍彏偱嫋戻偡傞丏
* (1) 杮僜僼僩僂僃傾傪僜乕僗僐乕僪偺宍偱棙梡偡傞応崌偵偼丆忋婰偺挊嶌
* 尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕偑丆偦偺傑傑偺宍偱僜乕
* 僗僐乕僪拞偵娷傑傟偰偄傞偙偲丏
* (2) 杮僜僼僩僂僃傾傪丆儔僀僽儔儕宍幃側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
* 梡偱偒傞宍偱嵞攝晍偡傞応崌偵偼丆嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡
* 幰儅僯儏傾儖側偳乯偵丆忋婰偺挊嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰
* 偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
* (3) 杮僜僼僩僂僃傾傪丆婡婍偵慻傒崬傓側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
* 梡偱偒側偄宍偱嵞攝晍偡傞応崌偵偼丆師偺偄偢傟偐偺忦審傪枮偨偡偙
* 偲丏
* (a) 嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡幰儅僯儏傾儖側偳乯偵丆忋婰偺挊
* 嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
* (b) 嵞攝晍偺宍懺傪丆暿偵掕傔傞曽朄偵傛偭偰丆TOPPERS僾儘僕僃僋僩偵
* 曬崘偡傞偙偲丏
* (4) 杮僜僼僩僂僃傾偺棙梡偵傛傝捈愙揑傑偨偼娫愙揑偵惗偠傞偄偐側傞懝
* 奞偐傜傕丆忋婰挊嶌尃幰偍傛傃TOPPERS僾儘僕僃僋僩傪柶愑偡傞偙偲丏
*
* 杮僜僼僩僂僃傾偼丆柍曐徹偱採嫙偝傟偰偄傞傕偺偱偁傞丏忋婰挊嶌尃幰偍
* 傛傃TOPPERS僾儘僕僃僋僩偼丆杮僜僼僩僂僃傾偵娭偟偰丆偦偺揔梡壜擻惈傕
* 娷傔偰丆偄偐側傞曐徹傕峴傢側偄丏傑偨丆杮僜僼僩僂僃傾偺棙梡偵傛傝捈
* 愙揑傑偨偼娫愙揑偵惗偠偨偄偐側傞懝奞偵娭偟偰傕丆偦偺愑擟傪晧傢側偄丏
*
* @(#) $Id: cpu_config.h,v 1.12 2003/07/04 05:34:18 takayuki Exp $
*/
/*
* 僾儘僙僢僒埶懚儌僕儏乕儖乮Windows梡乯
*/
#ifndef _CPU_CONFIG_H_
#define _CPU_CONFIG_H_
#include "cpu_rename.h"
/*
* Windows-HAL撈帺偺僀儞僋儖乕僪僼傽僀儖
*/
/*
* chg_ims/ref_ims 傪僒億乕僩偡傞偐偳偆偐偺掕媊
*/
#define SUPPORT_CHG_IMS
/*
* TCB 娭楢偺掕媊
*
* cpu_context.h 偵擖傟傞曽偑僄儗僈儞僩偩偑丆嶲徠偺埶懚惈偺娭學偱丆
* cpu_context.h 偵偼擖傟傜傟側偄丏
*/
/*
* TCB 拞偺僼傿乕儖僪偺價僢僩暆偺掕媊
*/
#define TBIT_TCB_PRIORITY 8 /* priority 僼傿乕儖僪偺價僢僩暆 */
#define TBIT_TCB_TSTAT 8 /* tstat 僼傿乕儖僪偺價僢僩暆 */
#ifndef _MACRO_ONLY
#include "cpu_defs.h"
#include "hal_msg.h"
#include "vwindows.h"
/*
* 僞僗僋僐儞僥僉僗僩僽儘僢僋偺掕媊
*/
typedef struct task_context_block {
HANDLE ThreadHandle; //僞僗僋偵妱傝摉偰傜傟偨僗儗僢僪偺僴儞僪儖
DWORD ThreadID; //僞僗僋偵妱傝摉偰傜傟偨僗儗僢僪偺ID
unsigned long InterruptLevel; //偙偺僞僗僋偑摦偄偰偄傞偲偒偺妱崬傒儅僗僋儗儀儖
} CTXB;
/*
* CPU忬懺僼儔僌
*/
#define CPU_STAT_LOCK 0x01 //CPU儘僢僋忬懺偱偡
#define CPU_STAT_EXC 0x02 //椺奜張棟拞偱偡
#define CPU_STAT_DOUBLEFAULT 0x04 //僟僽儖僼僅儖僩偑婲偙偭偰傑偡
extern volatile char CPUStatus;
/*
* CPU椺奜僴儞僪儔
*/
/*#define EXCHNO_ZDIV EXCEPTION_INT_DIVIDE_BY_ZERO */
/*
* 僔僗僥儉忬懺嶲徠
*/
Inline BOOL
sense_context()
{
/* 妱崬傒慡嫋壜偱側偗傟偽旕僞僗僋僐儞僥僉僗僩偱偡 */
return (CurrentInterruptLevel != 0) ? TRUE : FALSE;
}
Inline BOOL
sense_lock()
{
/* 椺奜張棟拞 or 儘僢僋忬懺僼儔僌偑棫偭偰偄傟偽 CPU儘僢僋忬懺偱偡 */
return (CPUStatus & (CPU_STAT_LOCK|CPU_STAT_EXC)) != 0 ? TRUE : FALSE;
}
#define t_sense_lock sense_lock
#define i_sense_lock sense_lock
/*
* CPU儘僢僋偲偦偺夝彍乮僞僗僋僐儞僥僉僗僩梡乯
*
* task_intmask 偼丆chg_ipm 傪僒億乕僩偡傞偨傔偺曄悢丏chg_ipm 傪僒億乕
* 僩偟側偄応崌偵偼丆task_intmask 偑忢偵 0 偵側偭偰偄傞偲峫偊傟偽傛偄丏
*/
#include "debugout.h"
#include "device.h"
unsigned long task_intmask;
Inline void
i_lock_cpu()
{ dis_int(0); }
Inline void
i_unlock_cpu()
{ ena_int(0); }
#define t_lock_cpu i_lock_cpu
#define t_unlock_cpu i_unlock_cpu
/*
* 僞僗僋僨傿僗僷僢僠儍
*/
/*
* 嵟崅桪愭弴埵僞僗僋傊偺僨傿僗僷僢僠
*
* dispatch 偼丆僞僗僋僐儞僥僉僗僩偐傜屇傃弌偝傟偨僒乕價僗僐乕儖張棟
* 撪偱丆CPU儘僢僋忬懺偱屇傃弌偝側偗傟偽側傜側偄丏
*/
extern void dispatch();
extern void idispatch();
/*
* 尰嵼偺僐儞僥僉僗僩傪幪偰偰僨傿僗僷僢僠
*
* exit_and_dispatch 偼丆CPU儘僢僋忬懺偱屇傃弌偝側偗傟偽側傜側偄丏
*/
extern void exit_and_dispatch(void);
/*
* 妱崬傒僴儞僪儔乛CPU椺奜僴儞僪儔偺愝掕
*/
/*
* 妱崬傒僴儞僪儔偺愝掕
*
* 儀僋僩儖斣崋 inhno 偺妱崬傒僴儞僪儔偺婲摦斣抧傪 inthdr 偵愝掕偡傞丏
*/
Inline void
define_inh(INHNO inhno, FP inthdr)
{ def_int((unsigned int)inhno,(void *)inthdr); }
/*
* CPU椺奜僴儞僪儔偺愝掕
*
* 儀僋僩儖斣崋 excno 偺CPU椺奜僴儞僪儔偺婲摦斣抧傪 exchdr 偵愝掕偡傞丏
*/
Inline void
define_exc(EXCNO excno, FP exchdr)
{ def_exc( (DWORD)excno, (void *)exchdr); }
/*
* 妱崬傒僴儞僪儔乛CPU椺奜僴儞僪儔偺弌擖岥張棟
*/
/*
* 妱崬傒僴儞僪儔偺弌擖岥張棟偺惗惉儅僋儘
*
* 慡偰偺妱傝崬傒僴儞僪儔偼僨傿僗僷僢僠儍傪婲摦偡傞SIGUSR1傪儅僗僋偟偰
* 摦嶌偡傞丅
* reqflg 傪僠僃僢僋偡傞慜偵妱崬傒傪嬛巭偟側偄偲丆reqflg 傪僠僃僢僋屻
* 偵婲摦偝傟偨妱崬傒僴儞僪儔撪偱僨傿僗僷僢僠偑梫媮偝傟偨応崌偵丆僨傿
* 僗僷僢僠偝傟側偄丏
*/
/* Windows-HAL偵偍偄偰偙偺張棟偼妱崬傒僄儈儏儗乕僞偵堦擟偟偰偄傞 */
#define INT_ENTRY(hdr) hdr
#define INTHDR_ENTRY(inthdr) extern void inthdr(void)
/*
* CPU椺奜僴儞僪儔偺弌擖岥張棟偺惗惉儅僋儘
*
* CPU椺奜僴儞僪儔偼丆旕僞僗僋僐儞僥僉僗僩偱幚峴偡傞丏偦偺偨傔丆CPU椺
* 奜僴儞僪儔傪屇傃弌偡慜偵妱崬傒儌乕僪偵堏峴偟丆儕僞乕儞偟偰偒偨屻偵
* 尦偺儌乕僪偵栠偡丏尦偺儌乕僪偵栠偡偨傔偵丆妱崬傒儌乕僪偵堏峴偡傞慜
* 偺 SR 傪妱崬傒僗僞僢僋忋偵曐懚偡傞丏CPU椺奜偑僞僗僋僐儞僥僉僗僩偱
* 敪惗偟丆reqflg 偑 TRUE 偵側偭偨帪偵丆ret_exc 傊暘婒偡傞丏
* reqflg 傪僠僃僢僋偡傞慜偵妱崬傒傪嬛巭偟側偄偲丆reqflg 傪僠僃僢僋屻
* 偵婲摦偝傟偨妱崬傒僴儞僪儔撪偱僨傿僗僷僢僠偑梫媮偝傟偨応崌偵丆僨傿
* 僗僷僢僠偝傟側偄丏
*/
#define EXC_ENTRY(hdr) hdr
#define EXCHDR_ENTRY(inthdr) extern void inthdr(void)
/*
* CPU椺奜偺敪惗偟偨帪偺僔僗僥儉忬懺偺嶲徠
*/
/*
* CPU椺奜偺敪惗偟偨帪偺僨傿僗僷僢僠
*
* WindowsHAL偼愱梡僼儔僌傪帩偭偰偄傞傫偱丄妱崬傒慜偺忣曬偼偦偺傑傑
* 奿擺偝傟偰偄傞丅
*/
#define exc_sense_context sense_context
/*
* CPU椺奜偺敪惗偟偨帪偺CPU儘僢僋忬懺偺嶲徠
*/
#define exc_sense_lock sense_lock
/*
* 僾儘僙僢僒埶懚偺弶婜壔
*/
extern void cpu_initialize(void);
/*
* 僾儘僙僢僒埶懚偺廔椆帪張棟
*/
extern void cpu_terminate(void);
/*
* atexit偱搊榐偝傟偨娭悢偺撉弌偟 (Windows偼壗傕偟側偄 -> CRT偵擟偣傞)
*/
extern void call_atexit(void);
/*
* Windows Dedicated Routines
*/
extern LONG WINAPI HALExceptionHandler( EXCEPTION_POINTERS * exc );
/*
* 抳柦揑側幐攕偵懳偡傞懳張儖乕僠儞
*/
extern void FatalAssertion(int exp, LPCSTR format, ... );
/*
* 儘僌偺弌椡惂屼儖乕僠儞
*/
extern void set_logcontrol(BOOL enable);
#endif /* _MACRO_ONLY */
#endif /* _CPU_CONFIG_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -