📄 n3rarm.h
字号:
/******************************************************************************
* NORTi3/ARM Definitions *
* *
* Copyright (c) 1995-2000, MiSPO Co., Ltd. *
* All rights reserved. *
* *
* 04/Aug/1999 *
* 19/Jan/2000 GreenHills C 偵懳墳 *
* 09/Mar/2000 僗僞僢僋梡儊儌儕偺僒僀僘掕媊偺楻傟傪廋惓 *
* 30/Oct/2001 The semicolon of extern "C" { ... }; is deleted. *
* ARM/Thumb 偄偢傟偺僞僗僋傕惗惉壜擻偵廋惓 *
******************************************************************************/
#ifndef N3RARM_H
#define N3RARM_H
#ifdef __cplusplus
extern "C" {
#endif
/* Context structuer */
#ifdef __ghs /* Green Hills ARM-C */
typedef struct t_ctx
{
int ercd; /* arg1 & return */
int stacd;/* arg2 */
UINT ptn; /* arg3 */
VP ptr; /* arg4 */
int r4; /* variable */
int r5; /* variable */
int r6; /* variable */
int r7; /* variable */
int r8; /* variable */
int r9; /* variable */
int r10; /* variable */
int r11; /* variable */
FP lr; /* link address */
int psr; /* Program Status Register */
int r12; /* scratch / new sb when linkage call*/
FP pc; /* program counter */
} T_CTX;
#else /* armcc */
typedef struct t_ctx
{
int ercd; /* arg1 & return */
int stacd;/* arg2 */
UINT ptn; /* arg3 */
VP ptr; /* arg4 */
int v1; /* variable */
int v2; /* variable */
int v3; /* variable */
int v4; /* variable */
int v5; /* variable */
int v6; /* variable */
int v7; /* variable */
int v8; /* variable */
FP lr; /* link address */
int psr; /* Program Status Register */
int ip; /* scratch / new sb when linkage call*/
FP pc; /* program counter */
} T_CTX;
#endif /* defined(compiler) */
/* memory pool & stack area definitions */
#ifdef MPLMSZ
#if ((MPLMSZ)/SIZEOF_INT!=0)
#ifdef __ghs
#pragma ghs section data=".MPLMEM"
int cdecl MPLMEM[(MPLMSZ)/SIZEOF_INT] = {0};
#pragma ghs section data=default
#else
int cdecl MPLMEM[(MPLMSZ)/SIZEOF_INT];
#endif
#endif
#endif
#ifdef STKMSZ
#if ((STKMSZ)/SIZEOF_INT!=0)
#ifdef __ghs
#pragma ghs section data=".STKMEM"
int cdecl STKMEM[(STKMSZ)/SIZEOF_INT] = {0};
#pragma ghs section data=default
#else
int cdecl STKMEM[(STKMSZ)/SIZEOF_INT];
#endif
#endif
#endif
ER _dispatch(void);
ER _dispatch1(void);
ER _dispatch2(void);
void _dispatch3(void);
void _dis_ims(void);
ER _ret_ims(void);
void _ret_ims2(void);
void _ope_ims(void);
UINT _vdis_psw(void);
void _vset_psw(UINT);
void _ret_int(void);
#ifdef __ghs /* Green Hills ARM-C */
asm ER swi_call(ER (*func)(void))
{
%reg func
mov r0,func
swi 0x00
%mem func
ldr r0,func
swi 0x00
%error
}
asm void swi_callv(void (*func)(void))
{
%reg func
mov r0,func
swi 0x00
%mem func
ldr r0,func
swi 0x00
%error
}
asm UINT swi_call_a1(UINT (*func)(void))
{
%reg func
mov r0,func
swi 0x00
%mem func
ldr r0,func
swi 0x00
%error
}
asm void swi_call_a1v(void (*func)(UINT),UINT p1)
{
%reg func %reg p1
mov r0,func
mov r1,p1
swi 0x00
%reg func %mem p1
mov r0,func
ldr r1,p1
swi 0x00
%reg func %con p1
mov r0,func
mov r1,p1
swi 0x00
%mem func %reg p1
ldr r0,func
mov r1,p1
swi 0x00
%mem func %mem p1
ldr r0,func
ldr r1,p1
swi 0x00
%mem func %con p1
ldr r0,func
mov r1,p1
swi 0x00
%error
}
#else /* armcc */
ER __swi(0x00) swi_call(ER (*routine)(void));
ER __swi(0x00) swi_callv(void (*routine)(void));
ER __swi(0x00) swi_call_a1(UINT (*routine)(void));
ER __swi(0x00) swi_call_a1v(void (*routine)(UINT),UINT);
#endif
#define dispatch() swi_call(_dispatch)
#define dispatch1() swi_call(_dispatch1)
#define dispatch2() swi_call(_dispatch2)
#define dispatch3() swi_callv(_dispatch3)
#define dis_ims() swi_callv(_dis_ims)
#define ret_ims() swi_call(_ret_ims)
#define ret_ims2() swi_callv(_ret_ims2)
#define ope_ims() swi_callv(_ope_ims)
#define ret_int() swi_callv(_ret_int)
#define vdis_psw() swi_call_a1(_vdis_psw)
#define vset_psw(PSW) swi_call_a1v(_vset_psw,(PSW));
#define ret_wup(id) { wup_tsk(id); ret_int(); }
#define syssta_sub() IMASK &= ~0x80
#define unl_cpu_sub() IMASK &= ~0xc0
#define chg_ims_sub(imask) \
if (imask) IMASK |= 0x80; \
else IMASK &= ~0x80;
#define ref_sys_sub(imask) ((imask & 0x80) != 0)
#define ref_ims_sub(ims) ((ims & 0x80) != 0)
#define cre_tsk_sub() stksz -= sizeof(T_CTX)
#define sta_tsk_sub() \
ctx->ercd = stacd; \
ctx->psr = (((UW)tcb->ctsk->task & 1)?0x00000030:0x00000010);
#ifdef __ghs
extern signed char *init_ISP;
#define c_sysini_sub() \
ISP = init_ISP - CFG.tstksz; \
if (pSTKMEM != NULL) \
{ stktop = (B *)pSTKMEM; \
sp = stktop + CFG.stkmsz; \
} \
else \
{ sp = ISP - CFG.istksz; \
}
#else
#define c_sysini_sub() \
if (pSTKMEM != NULL) \
{ stktop = (B *)pSTKMEM; \
sp = stktop + CFG.stkmsz; \
} \
else \
{ sp = ISP - CFG.istksz; \
}
#endif
extern const UH KNL_SR;
#ifdef __cplusplus
}
#endif
#endif /* N3RARM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -