📄 avtarm.h
字号:
/*---------------------------------------------------------------------------*/
/* */
/* avtintl.h */
/* */
/* ARM-specific definitions. */
/* */
/*---------------------------------------------------------------------------*/
/* */
/* Copyright (C) 2006 YuKanghua, All rights reserved. */
/* */
/*---------------------------------------------------------------------------*/
#ifndef __AVTARM_H__
#define __AVTARM_H__
#define HZ 100
#define INIT_CONTEXT(_sp_, _pc_, _arg_) \
do { \
uint *s = _sp_; \
\
*--s = (uint)Xcontinue; /*pc*/ \
*--s = 0; /*r11*/ \
*--s = 0; /*r10*/ \
*--s = 0; /*r9*/ \
*--s = 0; /*r8*/ \
*--s = 0; /*r7*/ \
*--s = 0; /*r6*/ \
*--s = (uint)_pc_; /*r5*/ \
*--s = (uint)_arg_; /*r4*/ \
_sp_ = s; \
}while(0)
#ifdef __cplusplus
extern "C" {
#endif
void ldctx(uint **);
void swctx(uint **, uint **);
void Xcontinue(void);
void
atominc(uint *ptr);
void
atomdec(uint *ptr);
int
interrupts_disable(void);
#ifdef __GNUC__
__inline static void
interrupts_enable(int xyz) {
__asm("MSR CPSR_c, %0" ::"ir"(xyz));
}
__inline static uint
xchg(uint newval, uint *ptr) {
uint oldval;
__asm("swp %0, %1, %2"
:"=r"(oldval)
:"r"(newval), "m"(ptr));
return oldval;
}
__inline static uint
xchgb(uint newval, uchar *ptr) {
uchar oldval;
__asm("swpb %0, %1, [%2]"
:"=r"(oldval)
:"r"(newval), "r"(ptr));
return oldval;
}
#else /*!__GNUC__*/
#ifndef _INTR
#define _INTR
__inline static void
interrupts_enable(int xyz) {
__asm {
MSR CPSR_c, xyz
}
}
#endif
__inline static uint
xchg(uint newval, uint *ptr) {
uint oldval;
__asm {
swp oldval, newval, [ptr]
}
return oldval;
}
__inline static uchar
xchgb(uchar newval, uchar *ptr) {
uchar oldval;
__asm {
swpb oldval, newval, [ptr]
}
return oldval;
}
#endif /*!__GNUC__*/
#ifdef __cplusplus
}
#endif
#endif /*__AVTARM_H__*/
/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -