📄 sil.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) 2005 by Embedded and Real-Time Systems Laboratory
* Graduate School of Information Science, Nagoya Univ., JAPAN
*
* 忋婰挊嶌尃幰偼丆埲壓偺 (1)乣(4) 偺忦審偐丆Free Software Foundation
* 偵傛偭偰岞昞偝傟偰偄傞 GNU General Public License 偺 Version 2 偵婰
* 弎偝傟偰偄傞忦審傪枮偨偡応崌偵尷傝丆杮僜僼僩僂僃傾乮杮僜僼僩僂僃傾
* 傪夵曄偟偨傕偺傪娷傓丏埲壓摨偠乯傪巊梡丒暋惢丒夵曄丒嵞攝晍乮埲壓丆
* 棙梡偲屇傇乯偡傞偙偲傪柍彏偱嫋戻偡傞丏
* (1) 杮僜僼僩僂僃傾傪僜乕僗僐乕僪偺宍偱棙梡偡傞応崌偵偼丆忋婰偺挊嶌
* 尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕偑丆偦偺傑傑偺宍偱僜乕
* 僗僐乕僪拞偵娷傑傟偰偄傞偙偲丏
* (2) 杮僜僼僩僂僃傾傪丆儔僀僽儔儕宍幃側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
* 梡偱偒傞宍偱嵞攝晍偡傞応崌偵偼丆嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡
* 幰儅僯儏傾儖側偳乯偵丆忋婰偺挊嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰
* 偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
* (3) 杮僜僼僩僂僃傾傪丆婡婍偵慻傒崬傓側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
* 梡偱偒側偄宍偱嵞攝晍偡傞応崌偵偼丆師偺偄偢傟偐偺忦審傪枮偨偡偙
* 偲丏
* (a) 嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡幰儅僯儏傾儖側偳乯偵丆忋婰偺挊
* 嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
* (b) 嵞攝晍偺宍懺傪丆暿偵掕傔傞曽朄偵傛偭偰丆TOPPERS僾儘僕僃僋僩偵
* 曬崘偡傞偙偲丏
* (4) 杮僜僼僩僂僃傾偺棙梡偵傛傝捈愙揑傑偨偼娫愙揑偵惗偠傞偄偐側傞懝
* 奞偐傜傕丆忋婰挊嶌尃幰偍傛傃TOPPERS僾儘僕僃僋僩傪柶愑偡傞偙偲丏
*
* 杮僜僼僩僂僃傾偼丆柍曐徹偱採嫙偝傟偰偄傞傕偺偱偁傞丏忋婰挊嶌尃幰偍
* 傛傃TOPPERS僾儘僕僃僋僩偼丆杮僜僼僩僂僃傾偵娭偟偰丆偦偺揔梡壜擻惈傕
* 娷傔偰丆偄偐側傞曐徹傕峴傢側偄丏傑偨丆杮僜僼僩僂僃傾偺棙梡偵傛傝捈
* 愙揑傑偨偼娫愙揑偵惗偠偨偄偐側傞懝奞偵娭偟偰傕丆偦偺愑擟傪晧傢側偄丏
*
* @(#) $Id: sil.h,v 1.8 2005/11/12 15:01:15 hiro Exp $
*/
/*
* 僔僗僥儉僀儞僞僼僃乕僗儗僀儎乮僞乕僎僢僩嫟捠晹乯
*
* 傾僙儞僽儕尵岅偺僜乕僗僼傽僀儖傗僔僗僥儉僐儞僼傿僊儏儗乕僔儑儞僼傽
* 僀儖偐傜偙偺僼傽僀儖傪僀儞僋儖乕僪偡傞帪偼丆_MACRO_ONLY 傪掕媊偟偰
* 偍偔偙偲偱丆儅僋儘掕媊埲奜偺婰弎傪彍偔偙偲偑偱偒傞丏
*
* 偙偺僀儞僋儖乕僪僼傽僀儖偼丆昗弨僀儞僋儖乕僪僼傽僀儖乮s_services.h乯
* 偱僀儞僋儖乕僪偝傟傞丏傑偨丆僇乕僱儖偐傜屇偽傟傞僨僶僀僗僪儔僀僶偺
* 僀儞僋儖乕僪僼傽僀儖偱丆僀儞儔僀儞娭悢側偳偱僔僗僥儉僀儞僞僼僃乕僗
* 儗僀儎傪梡偄偰偄傞応崌偵傕丆偙偺僼傽僀儖偑僀儞僋儖乕僪偝傟傞丏偙偺
* 椺奜傪彍偄偰丆懠偺僼傽僀儖偐傜捈愙僀儞僋儖乕僪偝傟傞偙偲偼側偄丏
*
* 偙偺拞偱僀儞僋儖乕僪偟偰偄傞僼傽僀儖傪彍偄偰丆懠偺僀儞僋儖乕僪僼傽
* 僀儖偵埶懚偟偰偄側偄丏
*/
#ifndef _SIL_H_
#define _SIL_H_
#ifdef __cplusplus
extern "C" {
#endif
/*
* 僇乕僱儖丒傾僾儕働乕僔儑儞 嫟捠僀儞僋儖乕僪僼傽僀儖
*/
#include <t_stddef.h>
/*
* ITRON巇條嫟捠婯掕偺僨乕僞宆丒掕悢丒儅僋儘
*/
#include <itron.h>
/*
* 僔僗僥儉傗僾儘僙僢僒偵埶懚偡傞掕媊
*/
#include <sys_defs.h>
#include <cpu_defs.h>
/*
* 僔僗僥儉儘僌僒乕價僗偺偨傔偺掕媊
*/
#include <t_syslog.h>
/*
* 僄儞僨傿傾儞掕悢偺掕媊
*/
#define SIL_ENDIAN_LITTLE 0 /* 儕僩儖僄儞僨傿傾儞 */
#define SIL_ENDIAN_BIG 1 /* 價僢僌僄儞僨傿傾儞 */
#ifndef _MACRO_ONLY
/*
* 妱崬傒儘僢僋忬懺偺惂屼
*/
#ifndef SIL_PRE_LOC
#include <kernel.h>
#define SIL_PRE_LOC BOOL _sil_loc_ = sns_loc()
#define SIL_LOC_INT() ((void)(!(_sil_loc_) \
&& (sns_ctx() ? iloc_cpu() : loc_cpu())))
#define SIL_UNL_INT() ((void)(!(_sil_loc_) \
&& (sns_ctx() ? iunl_cpu() : unl_cpu())))
#endif /* SIL_PRE_LOC */
/*
* 旝彮帪娫懸偪
*/
extern void sil_dly_nse(UINT dlytim) throw();
/*
* 僄儞僨傿傾儞偺斀揮
*/
#ifndef SIL_REV_ENDIAN_H
#define SIL_REV_ENDIAN_H(data) \
((VH)((((UH)(data) & 0xff) << 8) | (((UH)(data) >> 8) & 0xff)))
#endif /* SIL_REV_ENDIAN_H */
#ifndef SIL_REV_ENDIAN_W
#define SIL_REV_ENDIAN_W(data) \
((VW)((((UW)(data) & 0xff) << 24) | (((UW)(data) & 0xff00) << 8) \
| (((UW)(data)>> 8) & 0xff00) | (((UW)(data) >> 24) & 0xff)))
#endif /* SIL_REV_ENDIAN_H */
/*
* 儊儌儕嬻娫傾僋僙僗娭悢
*/
#ifndef OMIT_SIL_ACCESS
/*
* 8價僢僩扨埵偺撉弌偟乛彂崬傒
*/
#ifdef _int8_
Inline VB
sil_reb_mem(VP mem)
{
return(*((volatile VB *) mem));
}
Inline void
sil_wrb_mem(VP mem, VB data)
{
*((volatile VB *) mem) = data;
}
#endif /* _int8_ */
/*
* 16價僢僩扨埵偺撉弌偟乛彂崬傒
*/
#ifdef _int16_
Inline VH
sil_reh_mem(VP mem)
{
return(*((volatile VH *) mem));
}
Inline void
sil_wrh_mem(VP mem, VH data)
{
*((volatile VH *) mem) = data;
}
#if SIL_ENDIAN == SIL_ENDIAN_BIG /* 價僢僌僄儞僨傿傾儞僾儘僙僢僒 */
#define sil_reh_bem(mem) sil_reh_mem(mem)
#define sil_wrh_bem(mem, data) sil_wrh_mem(mem, data)
#ifndef OMIT_SIL_REH_LEM
Inline VH
sil_reh_lem(VP mem)
{
VH data;
data = *((volatile VH *) mem);
return(SIL_REV_ENDIAN_H(data));
}
#endif /* OMIT_SIL_REH_LEM */
#ifndef OMIT_SIL_WRH_LEM
Inline void
sil_wrh_lem(VP mem, VH data)
{
*((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
}
#endif /* OMIT_SIL_WRH_LEM */
#else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* 儕僩儖僄儞僨傿傾儞僾儘僙僢僒 */
#define sil_reh_lem(mem) sil_reh_mem(mem)
#define sil_wrh_lem(mem, data) sil_wrh_mem(mem, data)
#ifndef OMIT_SIL_REH_BEM
Inline VH
sil_reh_bem(VP mem)
{
VH data;
data = *((volatile VH *) mem);
return(SIL_REV_ENDIAN_H(data));
}
#endif /* OMIT_SIL_REH_BEM */
#ifndef OMIT_SIL_WRH_BEM
Inline void
sil_wrh_bem(VP mem, VH data)
{
*((volatile VH *) mem) = SIL_REV_ENDIAN_H(data);
}
#endif /* OMIT_SIL_WRH_BEM */
#endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
#endif /* _int16_ */
/*
* 32價僢僩扨埵偺撉弌偟乛彂崬傒
*/
Inline VW
sil_rew_mem(VP mem)
{
return(*((volatile VW *) mem));
}
Inline void
sil_wrw_mem(VP mem, VW data)
{
*((volatile VW *) mem) = data;
}
#if SIL_ENDIAN == SIL_ENDIAN_BIG /* 價僢僌僄儞僨傿傾儞僾儘僙僢僒 */
#define sil_rew_bem(mem) sil_rew_mem(mem)
#define sil_wrw_bem(mem, data) sil_wrw_mem(mem, data)
#ifndef OMIT_SIL_REW_LEM
Inline VW
sil_rew_lem(VP mem)
{
VW data;
data = *((volatile VW *) mem);
return(SIL_REV_ENDIAN_W(data));
}
#endif /* OMIT_SIL_REW_LEM */
#ifndef OMIT_SIL_WRW_LEM
Inline void
sil_wrw_lem(VP mem, VW data)
{
*((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
}
#endif /* OMIT_SIL_WRW_LEM */
#else /* SIL_ENDIAN == SIL_ENDIAN_BIG *//* 儕僩儖僄儞僨傿傾儞僾儘僙僢僒 */
#define sil_rew_lem(mem) sil_rew_mem(mem)
#define sil_wrw_lem(mem, data) sil_wrw_mem(mem, data)
#ifndef OMIT_SIL_REW_BEM
Inline VW
sil_rew_bem(VP mem)
{
VW data;
data = *((volatile VW *) mem);
return(SIL_REV_ENDIAN_W(data));
}
#endif /* OMIT_SIL_REW_BEM */
#ifndef OMIT_SIL_WRW_BEM
Inline void
sil_wrw_bem(VP mem, VW data)
{
*((volatile VW *) mem) = SIL_REV_ENDIAN_W(data);
}
#endif /* OMIT_SIL_WRW_BEM */
#endif /* SIL_ENDIAN == SIL_ENDIAN_BIG */
#endif /* OMIT_SIL_ACCESS */
#endif /* _MACRO_ONLY */
#ifdef __cplusplus
}
#endif
#endif /* _SIL_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -