/*lint -estring(961, "'#/##' operator used") , MISRA 19.3 ADV, '#' is used in HLI as an operator - see pragma NO_STRING_CONSTR above */
#define HALT_AND_QUIT HALTX(#32)
#define EnableInterrupts {__asm CLI;}
#define DisableInterrupts {__asm SEI;}
#define __XGFUN_MANG2(name) __X_ ## name /* indirection, necessary if name is a macro. */
#define __XGFUN_MANG(name) __XGFUN_MANG2(name) /* XGATE function names are mangled with a __X_ for the HC12 (so the XGATE can use its own ANSI library functions) */
/*lint +estring(961, "'#/##' operator used") */
#elif defined(__XGATE__)
/*lint -estring(961, "'#/##' operator used") , MISRA 19.3 ADV, '#' is used in HLI as an operator - see pragma NO_STRING_CONSTR above */
#define HALT { __asm SWI;}
#define HALTX(x) {/*lint -e522 */ __asm ldl r5, #0x0F; __asm tfr ccr, r5; __asm ldl r5, x; __asm BRK; /*lint +e522 */}
#define HALT_AND_QUIT HALTX(#32)
#define EnableInterrupts {} /* XGATE thread cannot be interrupted */
#define DisableInterrupts {} /* XGATE thread cannot be interrupted */
/*lint +estring(961, "'#/##' operator used") */
/*lint -estring(960, "use of '#undef' is discouraged") , MISRA 19.6 REQ, pointer qualifiers 'far' and 'near' are not supported on XGATE */
#undef FAR /* */
#undef NEAR /* */
#undef _FAR /* */
#undef _NEAR /* */
#define FAR /* */
#define NEAR /* */
#define _FAR /* */
#define _NEAR /* */
/*lint +estring(960, "use of '#undef' is discouraged") */
#define __XGFUN_MANG(name) name
/* The XGATE can allocate constants/code either in RAM or in FLASH. Access to the flash are considerably slower than accesses to the RAM. */
/* In a mixed HCS12X/XGATE application, the HCS12X is responsible to copy all the XGATE constants, XGATE strings and the XGATE code into RAM. */
/* For the default projects this is handled by the normal HCS12X startup code by placing all XGATE code/constants/strings into the sections */
/* XGATE_CODE, XGATE_CONST and XGATE_STRING. Then these sections are allocated in the PRM file into a READ_WRITE segment. */
/* Note: if you are using other code/const/string sections in XGATE code, make sure they are copied into RAM as well. */
#pragma CODE_SEG XGATE_CODE /* for the HCS12X/XGATE shared setup, the XGATE code must be in special sections. */
#pragma CONST_SEG XGATE_CONST
#pragma STRING_SEG XGATE_STRING
#pragma DATA_SEG XGATE_DATA /* also place XGATE data in a special section */
#define __GPAGE_SEG /* nothing: This is to share segment pragmas between the HCS12X and the XGATE. Use #pragma CONST_SEG __GPAGE_SEG XGATE_CONST */
/* if the HCS12X should access such objects with far accesses. This define avoids that the XGATE issues warnings about inconsitent section qualifiers. */
#else
/* Note COPCTL is write once. */
#define _ENABLE_COP(period) ((*(volatile unsigned char*)_COPCTL_ADR)= (period)) /* Note: 7 longest possible COP duration. 0 == COP disabled. */
#define _ENABLE_COP_X() _ENABLE_COP(7) /* as long as possible */
#define _DISABLE_COP() _ENABLE_COP(0x00) /* COP is disabled if period is 0 */
#define _FEED_COP() ((*(volatile unsigned char*)_COP_RST_ADR)= 0x55,(*(volatile unsigned char*)_COP_RST_ADR)= 0xAA)
#if __STDC__ && 0
/* with strict ANSI, the far/near keywords are not allowed */
#define far
#define near
#endif
#ifndef __XGATE__
/* assumes a linker version of at least V5.0.10 */
extern char __SEG_END_SSTACK[];
/*lint -estring(961, "'#/##' operator used") , MISRA 19.3 ADV, '#' is used in HLI as an operator - see pragma NO_STRING_CONSTR above */
#define INIT_SP_FROM_STARTUP_DESC() __asm LDS #__SEG_END_SSTACK;
/*lint +estring(961, "'#/##' operator used") */
/*-------------------- tabled functions used with options -ot -oilib=g ----------------*/
/* 1 << char */
extern const unsigned char _PowOfTwo_8[8];
/* 1 << int */
extern const unsigned short _PowOfTwo_16[16];
/* 1L << long */
extern const unsigned long _PowOfTwo_32[32];
/* PIC support for runtime library. Generate all calls PIC, if option is present */
#ifdef __PIC__
#define __PIC_JSR(dest) JSR dest,pcr
#define __PIC_JMP(dest) JMP dest,pcr
#else
#define __PIC_JSR(dest) JSR dest
#define __PIC_JMP(dest) JMP dest
#endif