Gorgon_Meducer 发表于 2008-1-26 03:01:29

[共享]傻孩子常用基础库文件同步贴 (for OLD Style)

由于Snail C Coding Style 的修正,该贴中提到的基础库文件仅仅用作对2009年之前
的工程进行向前兼容,2009年4月以后,Snail Studio将全面执行新的编码规范,规范草案和对应的基础
库函数将陆续更新。


RD_MacroAndConst.h
-----------------------------------------------------------------

#ifndef _USE_MACRO_AND_CONST_H_
#define _USE_MACRO_AND_CONST_H_
/***********************************************************
*   声明库说明:系统常用宏定义声明库                     *
*   版本:      v0.14                                    *
*   作者:      傻孩子                                     *
*   创建日期:2006年5月4日                               *
* -------------------------------------------------------- *
*[支 持 库]                                              *
*   支持库名称:                                           *
*   需要版本:                                             *
*   支持库说明:                                           *
* -------------------------------------------------------- *
*[版本更新]                                              *
*   修改:      王卓然                                     *
*   修改日期:2007年1月31日                              *
*   版本:      v0.05                                    *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:2007年2月20日                              *
*   版本:      v0.06                                    *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:2007年2月27日                              *
*   版本:      v0.07                                    *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:2007年5月14日                              *
*   版本:      v0.09                                    *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:2007年8月15日                              *
*   版本:      v0.11                                    *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:2008年1月02日                              *
*   版本:      v0.12                                    *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:2008年1月19日                              *
*   版本:      v0.13                                    *
*                                                          *
*   修改:      王卓然                                     *
*   修改日期:2008年2月27日                              *
*   版本:      v0.14                                    *
* -------------------------------------------------------- *
*[版本历史]                                              *
*       v0.04修改了NULL的定义,增加了MAX()和MIN两个宏;*
*            修改了关于char的符号定义。                  *
*       v0.05针对新规范进行了宏的扩充,删除了一些无效的*
*            非规范的宏定义和类型声明。                  *
*       v0.06增加了对新的位操作方式的支持。            *
*       v0.07增加了一个SAFE_CODE_PERFORMANCE()宏,用来保 *
*            正原子操作的正确运行。                      *
*       v0.09增加了一个强制类型转换宏TYPE_CONVERSION(), *
*            和一个绝对值宏ABS()                         *
*       v0.11增加了一个用于从任意整数中提取16进制数字的*
*            宏SELECT_HEX()。和一个将任意整数进行等效的*
*            正数求模。也就是说,即便是负数,也会映射到*
*            等效的正数上。                              *
*       v0.12增加了一个宏相加结构。                      *
*       v0.13更新了原子操作,使其对环境的影响减小。      *
*       v0.14再次更新原子操作。                        *
* -------------------------------------------------------- *
*[使用说明]                                              *
*         1、该库文件属于基础库文件。                  *
***********************************************************/

/********************
*   系 统 宏 定 义*
********************/
#ifndef _USE_NON_ICC_IDE
    # include <macros.h>
#endif

/*------------------*
*   常 数 宏 定 义*
*------------------*/
#ifndef FALSE
    # define FALSE   0x00
#endif

#ifndef TRUE
    # define TRUE    (!FALSE)
#endif

#ifndef HIGH
    # define HIGH    0x01
#endif
#ifndef LOW
    # define LOW   0x00
#endif
#ifndef PI
    # define PI      3.1415926535897932f
#endif
# define K_D2R   (PI/180.0)
# define K_R2D   (180.0/PI)         

/*------------------*
*   动 作 宏 定 义*
*------------------*/
# define SIN(x)sin((float)x * K_D2R)
# define COS(x)cos((float)x * K_D2R)
# define TAN(x)tan((float)x * K_D2R)
# define ATAN(x) (K_R2D*atan(x))
# define ASIN(x) (K_R2D*asin(x))
# define ACOS(x) (K_R2D*acos(x))

#ifndef NULL
    # define NULL    0
#endif

# define SET(Reg,n)    Reg |= BIT(n);
# define CLR(Reg,n)    Reg &= ~BIT(n);

#define MAX(a,b)(((a) > (b)) ? (a) : (b))
#define MIN(a,b)(((a) < (b)) ? (a) : (b))

#define UBOUND(a) (sizeof(a)/sizeof(a))

# define SAFE_CODE_PERFORMANCE(Code)   {\
                                          UINT8 cFlags = (SREG & BIT(7));\
                                          CLI();\
                                          Code;\
                                          SREG |= cFlags;\
                                       }
# define EXIT_SAFE_CODE                  SREG |= cflags;

# define TYPE_CONVERSION(Addr,Type)   (*((Type *)(Addr)))

# define ABS(Number)    (((Number) < 0)?(-(Number)):(Number))

# define SELECT_HEX(Value,n,Type)       ((Value << (n) * 4) >> ((sizeof(Type) * 8) - 4))

# define ABS_MOD(x,y)                   ((((x) % (y)) + (y)) % (y))

# define _ADD_STR(a,b)      a##b
# define ADD_STR(a,b)       _ADD_STR(a,b)


/********************
*用户变量类型定义 *
********************/
typedef unsigned int uint16;
typedef unsigned int UINT;
typedef unsigned int uint;
typedef unsigned int UINT16;
typedef unsigned int WORD;
typedef unsigned int word;
typedef int          int16;
typedef int          INT16;

typedef unsigned long uint32;
typedef unsigned long UINT32;
typedef unsigned long DWORD;
typedef unsigned long dword;
typedef long          int32;
typedef long          INT32;

typedef signed   char int8;
typedef signed   char INT8;
typedef unsigned char byte;
typedef unsigned char BYTE;
typedef unsigned char UINT8;
typedef unsigned char uint8;
typedef unsigned char BOOL;

#endif

Gorgon_Meducer 发表于 2008-1-26 03:03:16

RD_UseBits.h
--------------------------------------------------------------------

#ifndef _USE_BITS_H_
#define _USE_BITS_H_
/***********************************************************
*   声明库说明:系统位段操作函数库                         *
*   版本:      v1.01                                    *
*   作者:      傻孩子                                     *
*   创建时间:2006年5月4日                               *
* -------------------------------------------------------- *
*[支 持 库]                                              *
*   支持库名称:                                           *
*   需要版本:                                             *
*   支持库说明:                                           *
* -------------------------------------------------------- *
*[版本更新]                                              *
*   修改:      傻孩子                                     *
*   修改日期:2007年9月3日                               *
*   版本:      v1.01                                    *
* -------------------------------------------------------- *
*[版本历史]                                              *
*      v1.00   包含了从32位到8位对16位8位4位1位的各种映射*
*            允许通过功能宏定义中定义的宏拆分任意的地址*
*      v1.01   修改了一处BUG                               *
* -------------------------------------------------------- *
*[使用说明]                                              *
*          1、该头文件属于基层头文件。                     *
*          2、兼容32位16位8位单片机系统。                  *
*          3、饱含该头文件以后,可以通过功能宏定义中定义的 *
*             宏拆分任意地址,也可以直接使用后面自定义的位 *
*             段类型定义新的位段变量或者指针。             *
*          4、需要注意的是,使用功能宏定义中的宏只是将指定 *
*             变量的地址强行邦定为指定类型的位段,并不真正 *
*             分配一个地址空间,如果指定类型的位段长度和地 *
*             址实际长度不相同将会导致不可预期的后果。   *
***********************************************************/

/********************
*   系 统 宏 定 义*
********************/

/*------------------*
*   常 数 宏 定 义*
*------------------*/
   
/*------------------*
*   功 能 宏 定 义*
*------------------*/
# define SET_BIT8_FORMAT(Addr)   (*((volatile BYTEBIT *)&Addr))
# define SET_BYTE_DIV_2(Addr)      (*((volatile BYTE2HBYTE *)&Addr))

# define SET_BIT16_FORMAT(Addr)    (*((volatile WORDBIT *)&Addr))
# define SET_WORD_DIV_2(Addr)      (*((volatile WORD2BYTE *)&Addr))
# define SET_WORD_DIV_4(Addr)      (*((volatile WORD2HBYTE *)&Addr))

# define SET_BIT32_FORMAT(Addr)    (*((volatile DWORDBIT *)&Addr))
# define SET_DWORD_DIV_2(Addr)   (*((volatile DWORD2WORD *)&Addr))
# define SET_DWORD_DIV_4(Addr)   (*((volatile DWORD2BYTE *)&Addr))
# define SET_DWORD_DIV_8(Addr)   (*((volatile DWORD2HBYTE *)&Addr))

/********************
* 结 构 体 定 义 区 *
********************/

/*------------------*
*   8位变量位映射   *
*------------------*/
typedef struct BYTE_BIT
{
    unsigned BIT0:1;
    unsigned BIT1:1;
    unsigned BIT2:1;
    unsigned BIT3:1;
    unsigned BIT4:1;
    unsigned BIT5:1;
    unsigned BIT6:1;
    unsigned BIT7:1;
}BYTEBIT;

/*------------------*
*   16位变量位映射*
*------------------*/
typedef struct WORD_BIT
{
    unsigned BIT0:1;
    unsigned BIT1:1;
    unsigned BIT2:1;
    unsigned BIT3:1;
    unsigned BIT4:1;
    unsigned BIT5:1;
    unsigned BIT6:1;
    unsigned BIT7:1;
   
    unsigned BIT8:1;
    unsigned BIT9:1;
    unsigned BIT10:1;
    unsigned BIT11:1;
    unsigned BIT12:1;
    unsigned BIT13:1;
    unsigned BIT14:1;
    unsigned BIT15:1;
}WORDBIT;

/*------------------*
*32位变量位映射   *
*------------------*/
typedef struct DWORD_BIT
{
    unsigned BIT0:1;
    unsigned BIT1:1;
    unsigned BIT2:1;
    unsigned BIT3:1;
    unsigned BIT4:1;
    unsigned BIT5:1;
    unsigned BIT6:1;
    unsigned BIT7:1;
   
    unsigned BIT8:1;
    unsigned BIT9:1;
    unsigned BIT10:1;
    unsigned BIT11:1;
    unsigned BIT12:1;
    unsigned BIT13:1;
    unsigned BIT14:1;
    unsigned BIT15:1;
   
    unsigned BIT16:1;
    unsigned BIT17:1;
    unsigned BIT18:1;
    unsigned BIT19:1;
    unsigned BIT20:1;
    unsigned BIT21:1;
    unsigned BIT22:1;
    unsigned BIT23:1;
   
    unsigned BIT24:1;
    unsigned BIT25:1;
    unsigned BIT26:1;
    unsigned BIT27:1;
    unsigned BIT28:1;
    unsigned BIT29:1;
    unsigned BIT30:1;
    unsigned BIT31:1;
}DWORDBIT;

/*------------------*
*32位变量4分映射*
*------------------*/
typedef struct DWORD_BYTE
{
    unsigned BYTEA:8;
    unsigned BYTEB:8;
    unsigned BYTEC:8;
    unsigned BYTED:8;
}DWORD2BYTE;

/*------------------*
*32位变量2分映射*
*------------------*/
typedef struct DWORD_WORD
{
    unsigned WORDA:16;
    unsigned WORDB:16;
}DWORD2WORD;

/*------------------*
*32位变量16分映射 *
*------------------*/
typedef struct DWORD_HBYTE
{
    unsigned BYTEAL:4;
    unsigned BYTEAH:4;
               
    unsigned BYTEBL:4;
    unsigned BYTEBH:4;
               
    unsigned BYTECL:4;
    unsigned BYTECH:4;
               
    unsigned BYTEDL:4;
    unsigned BYTEDH:4;
               
}DWORD2HBYTE;

/*------------------*
* 16位变量2分映射   *
*------------------*/
typedef struct WORD_BYTE
{
    unsigned BYTEA:8;
    unsigned BYTEB:8;
}WORD2BYTE;

/*------------------*
*16位变量4分映射*
*------------------*/
typedef struct WORD_HBYTE
{
    unsigned BYTEAL:4;
    unsigned BYTEAH:4;
               
    unsigned BYTEBL:4;
    unsigned BYTEBH:4;
}WORD2HBYTE;

/*------------------*
*8位变量2分映射   *
*------------------*/
typedef struct BYTE_DIV2
{
    unsigned BYTEAL:4;
    unsigned BYTEAH:4;
}BYTE2HBYTE;

#endif

Gorgon_Meducer 发表于 2008-1-26 03:05:10

RD_UseAVRPORTBit.h AVR通用位操作支持库
--------------------------------------------------------------------

#ifndef _USE_AVR_PORT_BIT_H_
#define _USE_AVR_PORT_BIT_H_
/***********************************************************
*   声明库说明:AVR位操作通用支持库                        *
*   版本:      v1.10                                    *
*   作者:      傻孩子                                     *
*   创建日期:2006年4月25日                              *
* -------------------------------------------------------- *
*[支 持 库]                                              *
*   库名称:    RD_UseBITs.h                               *
*   需要版本:v1.00 &abv                                 *
*   支持库说明:系统位段操作函数库                         *
*                                                          *
*   库名称:    RD_MacroAndConst.h                         *
*   需要版本:v0.01 &abv                                 *
*   支持库说明:系统常用宏定义库                           *
* -------------------------------------------------------- *
*[版本更新]                                              *
*   修改:      傻孩子                                     *
*   修改日期:2006年5月4日                               *
*   版本:      v1.01                                    *
*                                                          *
*   修改:      傻孩子                                     *
*   修改日期:2007年7月17日                              *
*   版本:      v1.10                                    *
* -------------------------------------------------------- *
*[版本历史]                                              *
*   前身版本在该版本最终生成之前,经历过针对各种芯片的 *
*               专用版本,这些版本提供了针对PORT的位操作和 *
*               部分PIN、DDR的位操作。                     *
*      v1.00该版本支持几乎所有的芯片,具有完善的宏定义 *
*               系统,相对前身版本最小的资源占用。增加了对 *
*               各种常用变量用户类型的定义。               *
*      v1.01增加了关于布尔型变量类型的宏定义。         *
*               修改了头文件的位段映射模式。通过统一的头文 *
*               件RD_UseBITs.h来实现位段类型的定义和声明。 *
*      v1.10规范了宏的名称DDR_PXn PIN_PXn            *
* -------------------------------------------------------- *
*[使用说明]                                              *
*            1、在使用该头文件之前先包含您需要使用的芯片   *
*               的官方头文件,例如:# include <iom8v.h>    *
*            2、如果你不是ICC的用户,请在使用该头文件之前*
*               先绑定各个端口的地址到相应的宏定义上,例如 *
*               # define PORTA (*((volatile char *)0x3b))*
*            3、如果你使用的是非ICC系统,请在调用文件之前*
*               定义宏 _USE_NON_ICC_IDE。                  *
*            4、可以使用SET_BITS_FORMAT(变量)把任意变量拆*
*               成位定义的模式。                           *
***********************************************************/

/********************
* 头 文 件 配 置 区 *
********************/
# include "RD_UseBITs.h"

/********************
*   系 统 宏 定 义*
********************/

/*------------------*
*   常 数 宏 定 义*
*------------------*/
#ifndef PDIR_OUT
    # define PDIR_OUT            0x01
#endif
#ifndef PDIR_IN            
    # define PDIR_IN             0x00
#endif

/*------------------*
* 硬 件 连 接 定 义 *
*------------------*/

/*---------------- PORT口绑定 ---------------*/
#ifdef PORTA
    # define PORTA_BIT   SET_BIT8_FORMAT(PORTA)
#endif
#ifdef PORTB
    # define PORTB_BIT   SET_BIT8_FORMAT(PORTB)
#endif
#ifdef PORTC
    # define PORTC_BIT   SET_BIT8_FORMAT(PORTC)
#endif
#ifdef PORTD
    # define PORTD_BIT   SET_BIT8_FORMAT(PORTD)
#endif
#ifdef PORTE
    # define PORTE_BIT   SET_BIT8_FORMAT(PORTE)
#endif
#ifdef PORTF
    # define PORTF_BIT   SET_BIT8_FORMAT(PORTF)
#endif
#ifdef PORTG
    # define PORTG_BIT   SET_BIT8_FORMAT(PORTG)
#endif


/*---------------- DDR 口绑定 ---------------*/
#ifdef DDRA
    # define DDRA_BIT   SET_BIT8_FORMAT(DDRA)
#endif
#ifdef DDRB
    # define DDRB_BIT   SET_BIT8_FORMAT(DDRB)
#endif
#ifdef DDRC
    # define DDRC_BIT   SET_BIT8_FORMAT(DDRC)
#endif
#ifdef DDRD
    # define DDRD_BIT   SET_BIT8_FORMAT(DDRD)
#endif
#ifdef DDRE
    # define DDRE_BIT   SET_BIT8_FORMAT(DDRE)
#endif
#ifdef DDRF
    # define DDRF_BIT   SET_BIT8_FORMAT(DDRF)
#endif
#ifdef DDRG
    # define DDRG_BIT   SET_BIT8_FORMAT(DDRG)
#endif

/*---------------- PIN 口绑定 ---------------*/
#ifdef PINA
    # define PINA_BIT   SET_BIT8_FORMAT(PINA)
#endif
#ifdef PINB
    # define PINB_BIT   SET_BIT8_FORMAT(PINB)
#endif
#ifdef PINC
    # define PINC_BIT   SET_BIT8_FORMAT(PINC)
#endif
#ifdef PIND
    # define PIND_BIT   SET_BIT8_FORMAT(PIND)
#endif
#ifdef PINE
    # define PINE_BIT   SET_BIT8_FORMAT(PINE)
#endif
#ifdef PINF
    # define PINF_BIT   SET_BIT8_FORMAT(PINF)
#endif
#ifdef PING
    # define PING_BIT   SET_BIT8_FORMAT(PING)
#endif

/*------------------*
*   端 口 宏 定 义*
*------------------*/

/*-------------PORT位操作定义--------------*/
#ifdef PORTA
    # define _PA0      PORTA_BIT.BIT0
    # define _PA1      PORTA_BIT.BIT1
    # define _PA2      PORTA_BIT.BIT2
    # define _PA3      PORTA_BIT.BIT3
    # define _PA4      PORTA_BIT.BIT4
    # define _PA5      PORTA_BIT.BIT5
    # define _PA6      PORTA_BIT.BIT6
    # define _PA7      PORTA_BIT.BIT7
#endif
#ifdef PORTB
    # define _PB0      PORTB_BIT.BIT0
    # define _PB1      PORTB_BIT.BIT1
    # define _PB2      PORTB_BIT.BIT2
    # define _PB3      PORTB_BIT.BIT3
    # define _PB4      PORTB_BIT.BIT4
    # define _PB5      PORTB_BIT.BIT5
    # define _PB6      PORTB_BIT.BIT6
    # define _PB7      PORTB_BIT.BIT7
#endif
#ifdef PORTC
    # define _PC0      PORTC_BIT.BIT0
    # define _PC1      PORTC_BIT.BIT1
    # define _PC2      PORTC_BIT.BIT2
    # define _PC3      PORTC_BIT.BIT3
    # define _PC4      PORTC_BIT.BIT4
    # define _PC5      PORTC_BIT.BIT5
    # define _PC6      PORTC_BIT.BIT6
    # define _PC7      PORTC_BIT.BIT7
#endif
#ifdef PORTD
    # define _PD0      PORTD_BIT.BIT0
    # define _PD1      PORTD_BIT.BIT1
    # define _PD2      PORTD_BIT.BIT2
    # define _PD3      PORTD_BIT.BIT3
    # define _PD4      PORTD_BIT.BIT4
    # define _PD5      PORTD_BIT.BIT5
    # define _PD6      PORTD_BIT.BIT6
    # define _PD7      PORTD_BIT.BIT7
#endif
#ifdef PORTE
    # define _PE0      PORTE_BIT.BIT0
    # define _PE1      PORTE_BIT.BIT1
    # define _PE2      PORTE_BIT.BIT2
    # define _PE3      PORTE_BIT.BIT3
    # define _PE4      PORTE_BIT.BIT4
    # define _PE5      PORTE_BIT.BIT5
    # define _PE6      PORTE_BIT.BIT6
    # define _PE7      PORTE_BIT.BIT7
#endif
#ifdef PORTF
    # define _PF0      PORTF_BIT.BIT0
    # define _PF1      PORTF_BIT.BIT1
    # define _PF2      PORTF_BIT.BIT2
    # define _PF3      PORTF_BIT.BIT3
    # define _PF4      PORTF_BIT.BIT4
    # define _PF5      PORTF_BIT.BIT5
    # define _PF6      PORTF_BIT.BIT6
    # define _PF7      PORTF_BIT.BIT7
#endif
#ifdef PORTG
    # define _PG0      PORTG_BIT.BIT0
    # define _PG1      PORTG_BIT.BIT1
    # define _PG2      PORTG_BIT.BIT2
    # define _PG3      PORTG_BIT.BIT3
    # define _PG4      PORTG_BIT.BIT4
    # define _PG5      PORTG_BIT.BIT5
    # define _PG6      PORTG_BIT.BIT6
    # define _PG7      PORTG_BIT.BIT7
#endif


/*------------- DDR 位操作定义 -------------*/
#ifdef DDRA
    # define DDR_PA0   DDRA_BIT.BIT0
    # define DDR_PA1   DDRA_BIT.BIT1
    # define DDR_PA2   DDRA_BIT.BIT2
    # define DDR_PA3   DDRA_BIT.BIT3
    # define DDR_PA4   DDRA_BIT.BIT4
    # define DDR_PA5   DDRA_BIT.BIT5
    # define DDR_PA6   DDRA_BIT.BIT6
    # define DDR_PA7   DDRA_BIT.BIT7
#endif
#ifdef DDRB
    # define DDR_PB0   DDRB_BIT.BIT0
    # define DDR_PB1   DDRB_BIT.BIT1
    # define DDR_PB2   DDRB_BIT.BIT2
    # define DDR_PB3   DDRB_BIT.BIT3
    # define DDR_PB4   DDRB_BIT.BIT4
    # define DDR_PB5   DDRB_BIT.BIT5
    # define DDR_PB6   DDRB_BIT.BIT6
    # define DDR_PB7   DDRB_BIT.BIT7
#endif
#ifdef DDRC
    # define DDR_PC0   DDRC_BIT.BIT0
    # define DDR_PC1   DDRC_BIT.BIT1
    # define DDR_PC2   DDRC_BIT.BIT2
    # define DDR_PC3   DDRC_BIT.BIT3
    # define DDR_PC4   DDRC_BIT.BIT4
    # define DDR_PC5   DDRC_BIT.BIT5
    # define DDR_PC6   DDRC_BIT.BIT6
    # define DDR_PC7   DDRC_BIT.BIT7
#endif
#ifdef DDRD
    # define DDR_PD0   DDRD_BIT.BIT0
    # define DDR_PD1   DDRD_BIT.BIT1
    # define DDR_PD2   DDRD_BIT.BIT2
    # define DDR_PD3   DDRD_BIT.BIT3
    # define DDR_PD4   DDRD_BIT.BIT4
    # define DDR_PD5   DDRD_BIT.BIT5
    # define DDR_PD6   DDRD_BIT.BIT6
    # define DDR_PD7   DDRD_BIT.BIT7
#endif
#ifdef DDRE
    # define DDR_PE0   DDRE_BIT.BIT0
    # define DDR_PE1   DDRE_BIT.BIT1
    # define DDR_PE2   DDRE_BIT.BIT2
    # define DDR_PE3   DDRE_BIT.BIT3
    # define DDR_PE4   DDRE_BIT.BIT4
    # define DDR_PE5   DDRE_BIT.BIT5
    # define DDR_PE6   DDRE_BIT.BIT6
    # define DDR_PE7   DDRE_BIT.BIT7
#endif
#ifdef DDRF
    # define DDR_PF0   DDRF_BIT.BIT0
    # define DDR_PF1   DDRF_BIT.BIT1
    # define DDR_PF2   DDRF_BIT.BIT2
    # define DDR_PF3   DDRF_BIT.BIT3
    # define DDR_PF4   DDRF_BIT.BIT4
    # define DDR_PF5   DDRF_BIT.BIT5
    # define DDR_PF6   DDRF_BIT.BIT6
    # define DDR_PF7   DDRF_BIT.BIT7
#endif
#ifdef DDRG
    # define DDR_PG0   DDRG_BIT.BIT0
    # define DDR_PG1   DDRG_BIT.BIT1
    # define DDR_PG2   DDRG_BIT.BIT2
    # define DDR_PG3   DDRG_BIT.BIT3
    # define DDR_PG4   DDRG_BIT.BIT4
    # define DDR_PG5   DDRG_BIT.BIT5
    # define DDR_PG6   DDRG_BIT.BIT6
    # define DDR_PG7   DDRG_BIT.BIT7
#endif

/*------------- PIN 位操作定义 -------------*/
#ifdef PINA
    # define READ_PA0   PINA_BIT.BIT0
    # define READ_PA1   PINA_BIT.BIT1
    # define READ_PA2   PINA_BIT.BIT2
    # define READ_PA3   PINA_BIT.BIT3
    # define READ_PA4   PINA_BIT.BIT4
    # define READ_PA5   PINA_BIT.BIT5
    # define READ_PA6   PINA_BIT.BIT6
    # define READ_PA7   PINA_BIT.BIT7
   
    # define PIN_PA0      PINA_BIT.BIT0
    # define PIN_PA1      PINA_BIT.BIT1
    # define PIN_PA2      PINA_BIT.BIT2
    # define PIN_PA3      PINA_BIT.BIT3
    # define PIN_PA4      PINA_BIT.BIT4
    # define PIN_PA5      PINA_BIT.BIT5
    # define PIN_PA6      PINA_BIT.BIT6
    # define PIN_PA7      PINA_BIT.BIT7
#endif
#ifdef PINB
    # define READ_PB0   PINB_BIT.BIT0
    # define READ_PB1   PINB_BIT.BIT1
    # define READ_PB2   PINB_BIT.BIT2
    # define READ_PB3   PINB_BIT.BIT3
    # define READ_PB4   PINB_BIT.BIT4
    # define READ_PB5   PINB_BIT.BIT5
    # define READ_PB6   PINB_BIT.BIT6
    # define READ_PB7   PINB_BIT.BIT7
   
    # define PIN_PB0      PINB_BIT.BIT0
    # define PIN_PB1      PINB_BIT.BIT1
    # define PIN_PB2      PINB_BIT.BIT2
    # define PIN_PB3      PINB_BIT.BIT3
    # define PIN_PB4      PINB_BIT.BIT4
    # define PIN_PB5      PINB_BIT.BIT5
    # define PIN_PB6      PINB_BIT.BIT6
    # define PIN_PB7      PINB_BIT.BIT7
#endif
#ifdef PINC
    # define READ_PC0   PINC_BIT.BIT0
    # define READ_PC1   PINC_BIT.BIT1
    # define READ_PC2   PINC_BIT.BIT2
    # define READ_PC3   PINC_BIT.BIT3
    # define READ_PC4   PINC_BIT.BIT4
    # define READ_PC5   PINC_BIT.BIT5
    # define READ_PC6   PINC_BIT.BIT6
    # define READ_PC7   PINC_BIT.BIT7
   
    # define PIN_PC0      PINC_BIT.BIT0
    # define PIN_PC1      PINC_BIT.BIT1
    # define PIN_PC2      PINC_BIT.BIT2
    # define PIN_PC3      PINC_BIT.BIT3
    # define PIN_PC4      PINC_BIT.BIT4
    # define PIN_PC5      PINC_BIT.BIT5
    # define PIN_PC6      PINC_BIT.BIT6
    # define PIN_PC7      PINC_BIT.BIT7
#endif
#ifdef PIND
    # define READ_PD0   PIND_BIT.BIT0
    # define READ_PD1   PIND_BIT.BIT1
    # define READ_PD2   PIND_BIT.BIT2
    # define READ_PD3   PIND_BIT.BIT3
    # define READ_PD4   PIND_BIT.BIT4
    # define READ_PD5   PIND_BIT.BIT5
    # define READ_PD6   PIND_BIT.BIT6
    # define READ_PD7   PIND_BIT.BIT7
   
    # define PIN_PD0      PIND_BIT.BIT0
    # define PIN_PD1      PIND_BIT.BIT1
    # define PIN_PD2      PIND_BIT.BIT2
    # define PIN_PD3      PIND_BIT.BIT3
    # define PIN_PD4      PIND_BIT.BIT4
    # define PIN_PD5      PIND_BIT.BIT5
    # define PIN_PD6      PIND_BIT.BIT6
    # define PIN_PD7      PIND_BIT.BIT7
#endif
#ifdef PINE
    # define READ_PE0   PINE_BIT.BIT0
    # define READ_PE1   PINE_BIT.BIT1
    # define READ_PE2   PINE_BIT.BIT2
    # define READ_PE3   PINE_BIT.BIT3
    # define READ_PE4   PINE_BIT.BIT4
    # define READ_PE5   PINE_BIT.BIT5
    # define READ_PE6   PINE_BIT.BIT6
    # define READ_PE7   PINE_BIT.BIT7
   
    # define PIN_PE0      PINE_BIT.BIT0
    # define PIN_PE1      PINE_BIT.BIT1
    # define PIN_PE2      PINE_BIT.BIT2
    # define PIN_PE3      PINE_BIT.BIT3
    # define PIN_PE4      PINE_BIT.BIT4
    # define PIN_PE5      PINE_BIT.BIT5
    # define PIN_PE6      PINE_BIT.BIT6
    # define PIN_PE7      PINE_BIT.BIT7
#endif
#ifdef PINF
    # define READ_PF0   PINF_BIT.BIT0
    # define READ_PF1   PINF_BIT.BIT1
    # define READ_PF2   PINF_BIT.BIT2
    # define READ_PF3   PINF_BIT.BIT3
    # define READ_PF4   PINF_BIT.BIT4
    # define READ_PF5   PINF_BIT.BIT5
    # define READ_PF6   PINF_BIT.BIT6
    # define READ_PF7   PINF_BIT.BIT7
   
    # define PIN_PF0      PINF_BIT.BIT0
    # define PIN_PF1      PINF_BIT.BIT1
    # define PIN_PF2      PINF_BIT.BIT2
    # define PIN_PF3      PINF_BIT.BIT3
    # define PIN_PF4      PINF_BIT.BIT4
    # define PIN_PF5      PINF_BIT.BIT5
    # define PIN_PF6      PINF_BIT.BIT6
    # define PIN_PF7      PINF_BIT.BIT7
#endif
#ifdef PING
    # define READ_PG0   PING_BIT.BIT0
    # define READ_PG1   PING_BIT.BIT1
    # define READ_PG2   PING_BIT.BIT2
    # define READ_PG3   PING_BIT.BIT3
    # define READ_PG4   PING_BIT.BIT4
    # define READ_PG5   PING_BIT.BIT5
    # define READ_PG6   PING_BIT.BIT6
    # define READ_PG7   PING_BIT.BIT7
   
    # define PIN_PG0      PING_BIT.BIT0
    # define PIN_PG1      PING_BIT.BIT1
    # define PIN_PG2      PING_BIT.BIT2
    # define PIN_PG3      PING_BIT.BIT3
    # define PIN_PG4      PING_BIT.BIT4
    # define PIN_PG5      PING_BIT.BIT5
    # define PIN_PG6      PING_BIT.BIT6
    # define PIN_PG7      PING_BIT.BIT7
#endif

#endif

maskiss 发表于 2008-1-26 08:35:44

我先占个位子,好东西

MicroMCU 发表于 2008-1-26 11:35:39

的却是好东东,佩服

lrzxc 发表于 2008-1-26 12:10:46

3楼的好强

Gorgon_Meducer 发表于 2008-1-26 14:26:09

我记得明明把帖子锁定了阿……
- -b
我才 - -b 呢!

zhuzi1441 发表于 2008-1-26 14:40:39

好东西,收了

3jamesbond 发表于 2008-1-26 16:13:18

# define SET_DWORD_DIV_8(Addr)   (*((volatile DWORD2HBYTE *)&Addr))
看不明白?能解释一下吗?
傻孩子:你可以下载我书的DEMO,里面有非常详细的解释!

stevenlu 发表于 2008-1-29 15:46:16

mark

liqu 发表于 2008-3-6 09:22:11

能解释#define不带参数的用法吗?是空格吗?
#ifndef _USE_MACRO_AND_CONST_H_
#define _USE_MACRO_AND_CONST_H_
傻孩子:不带参数就是 替换为 空字符,什么是空字符呢,就是什么都没有……

aysyjgw 发表于 2008-3-6 11:12:46

你牛啊

stephon1 发表于 2008-3-6 14:29:53

记号

xielihong 发表于 2008-3-6 17:15:45

to 【10楼】 liqu
这个是包含警卫,是为了防止此文件被包含多次的。
(如果此文件被包含多次,又没有警卫的话,编译器会有多次define的错误的)
完整的应该是

#ifndef _USE_MACRO_AND_CONST_H_
#define _USE_MACRO_AND_CONST_H_

...

#endif

classv 发表于 2008-3-17 16:18:42

请教楼主一个问题,我看瑞萨的头文件是这样定义的,先定义一个结构体,然后给顶地址,这样就可以既可以按位操作又可以按字节操作,十分的方便.我曾在GCC下试过一次这中方式定义AVR的,结果高低位刚好相反,有没有什么方法解决呀.
下面是瑞萨的定义:
struct st_p1 {                                          /* struct P1    */
             unsigned char      DDR;                  /* P1DDR      */
             char               wk1;               /*            */
             union {                                    /* P1PORT       */
                   unsigned char BYTE;                  /*Byte Access */
                   struct {                           /*BitAccess */
                        unsigned char B7:1;         /*    Bit 7   */
                        unsigned char B6:1;         /*    Bit 6   */
                        unsigned char B5:1;         /*    Bit 5   */
                        unsigned char B4:1;         /*    Bit 4   */
                        unsigned char B3:1;         /*    Bit 3   */
                        unsigned char B2:1;         /*    Bit 2   */
                        unsigned char B1:1;         /*    Bit 1   */
                        unsigned char B0:1;         /*    Bit 0   */
                        }      BIT;                   /*            */
                   }            PORT;                   /*            */
             char               wk2;                /*            */
             union {                                    /* P1DR         */
                   unsigned char BYTE;                  /*Byte Access */
                   struct {                           /*BitAccess */
                        unsigned char B7:1;         /*    Bit 7   */
                        unsigned char B6:1;         /*    Bit 6   */
                        unsigned char B5:1;         /*    Bit 5   */
                        unsigned char B4:1;         /*    Bit 4   */
                        unsigned char B3:1;         /*    Bit 3   */
                        unsigned char B2:1;         /*    Bit 2   */
                        unsigned char B1:1;         /*    Bit 1   */
                        unsigned char B0:1;         /*    Bit 0   */
                        }      BIT;                   /*            */
                   }            DR;                     /*            */
};
#define P1      (*(volatile struct st_p1    *)0xFFFEB0) /* P1    Address*/

Gorgon_Meducer 发表于 2008-3-17 17:46:32

这种方法是通过union的方式实现与我的头文件相同的功能。至于相反,那是大端对齐与小端对齐的不同导致的。可以通过一个预编译宏来设定。具体请查阅gcc手册。我不使用GCC,所以无法一下给您明确的大案。

liuyuema09 发表于 2008-3-19 16:47:30

先占个位子

zlutian 发表于 2008-3-19 21:49:49

谢谢,mark

525133174 发表于 2008-6-11 15:07:55

仔细研究一下,谢谢了

bigboy 发表于 2008-6-19 08:26:50

看看

yutianyiren 发表于 2008-6-25 14:06:43

能不能说一下,怎么定义一个标志位么,只有真与假两种情况的也变量

Gorgon_Meducer 发表于 2008-6-25 16:08:47

to 【20楼】 yutianyiren
    比方说我有16个以内但是大于8个的BOOL型变量想合并在一起,以节省空间。
我们可以首先声明一个占用了两个字节的变量:
    UINT16 g_wBoolFlag = NULL;
    然后就是利用BIT宏了

    # define BOOL_BIT_FLAG             SET_BIT16_FORMAT(g_wBoolFlag)
    /* 下面我们开始逐个定义这些BOOL型变量 */
    # define BOOL_FLAT_A               BOOL_BIT_FLAG.BIT0
    # define BOOL_FLAG_B               BOOL_BIT_FLAG.BIT1
    ……
    对于我们定义的BOOL_FLAGA、BOOL_FLAG_B这样的布尔型变量,只有0个1两个
值,其中0表示FALSE,1表示TRUE。

taishandadi 发表于 2008-7-6 09:22:34

mark。以后就用上了。

lonely88 发表于 2008-7-12 10:44:31

About H

Mark!

bjj9217 发表于 2008-7-12 11:56:19

好贴!

steven 发表于 2008-7-12 12:17:25

不MARK一下对不起楼主!

maskchen 发表于 2008-7-14 16:26:11

做个记号,以后研究

lisn3188 发表于 2008-7-17 21:14:05

水平太低了,看不出有什么用。。。。

lucky_000 发表于 2008-7-19 11:09:25

不错,挺规范的.
# define SET(Reg,n)    Reg |= BIT(n);
# define CLR(Reg,n)    Reg &= ~BIT(n);

这个BIT是哪个编译器的,而且#和define之间居然可以有空格,真神奇.

我喜欢用如下的关于位操作的宏,通用性比较好.
#define SET_BIT(a,b)                (a |= (1<<b))
#define CLR_BIT(a,b)                (a &= ~(1<<b))
#define TST_BIT(a,b)                (a & (1<<b))

superyongzhe 发表于 2008-9-10 20:14:37

很繁琐

lanfeng007 发表于 2008-9-11 10:16:08

好东西啊,收藏一下。谢谢楼主无私奉献。

pally2004 发表于 2008-9-11 12:12:49

mark~~~

xyarm 发表于 2008-9-11 13:00:05

先记着,回头有空再看

boawen 发表于 2008-12-17 20:37:55

怎么我看里面的很复杂啊。看不懂

xyz2008 发表于 2008-12-25 13:50:42

牛,就一个字

bbi3014 发表于 2009-1-28 15:26:12

学习

cmh7978 发表于 2009-4-9 16:07:08

Gorgon_Meducer 发表于 2009-4-9 16:12:28

由于Snail C Coding Style 的修正,该贴中提到的基础库文件仅仅用作对2009年之前
的工程进行向前兼容,2009年4月以后,Snail Studio将全面执行新的编码规范,规范草案和对应的基础
库函数将陆续更新。

ddaitt999 发表于 2009-4-17 23:08:49

Snail Studio将全面执行新的编码规范??
什么意思??
请斑竹点一下~!!

wahaha 发表于 2009-4-17 23:44:36

有时间好好看看~~

xxsailing 发表于 2009-4-22 16:06:11

标记

ba1731 发表于 2009-4-22 16:46:24

mark.偶滴鼠标滚轮哇。。。

darlin 发表于 2009-6-12 17:34:16

这贴必需顶……

c007106333 发表于 2009-6-22 00:41:46

mark

qilin3 发表于 2010-1-10 22:09:07

good ~~

ggyyll8683 发表于 2010-1-10 22:33:15

mark

alaulong 发表于 2010-3-22 10:12:11

好东西啊

linhai 发表于 2010-3-27 19:32:24

whym1987 发表于 2010-4-9 18:48:47

mark!

rube 发表于 2010-4-9 20:53:37

可以引用一些的,谢谢

oimcu 发表于 2010-4-13 16:57:54

好东西

zqd311107 发表于 2010-4-13 21:47:22

租个女友回家过年

imxiangzi 发表于 2010-5-4 12:44:32

mark

huchengxtu 发表于 2010-5-4 13:09:17

MARK的

ZZL520 发表于 2010-5-6 14:27:23

正在看你的深入浅出!   写的不错!

tangwei039 发表于 2010-5-6 20:45:33

mark

yzlyear 发表于 2010-7-2 16:10:46

mark

xuyqhd 发表于 2010-7-10 16:35:10

仔细研究下得。

dianzifanfan 发表于 2010-7-24 13:06:35

膜拜中 哎 自己太差

laodaok 发表于 2010-7-26 16:16:41

谢谢了

wukaka 发表于 2010-8-18 16:06:26

拜拜傻孩子!
又上了一课。

guxingganyue 发表于 2010-9-4 08:31:54

多谢了

whhityang 发表于 2010-10-11 13:35:30

正好用到位操作,真是省事多了

flor 发表于 2010-10-14 10:42:21

union 方法与傻孩子的方法那种更好?

bondxie3 发表于 2010-11-17 20:02:10

标记学习

bmagui 发表于 2010-11-17 20:57:18

mark

wpnx 发表于 2010-12-15 22:21:36

mark

du722 发表于 2010-12-25 10:13:18

mark

xuezubo 发表于 2010-12-25 11:00:07

收获不小啊

andrew_dj 发表于 2010-12-25 12:36:35

学习一下哈

dugutianma 发表于 2011-1-16 18:37:05

mark

a77585 发表于 2011-3-13 23:53:34

需要学习的东西好多啊,头好晕

zdajun1988 发表于 2011-3-24 15:34:43

不错

ww1228 发表于 2011-3-28 16:24:37

# define TYPE_CONVERSION(Addr,Type)   (*((Type *)(Addr)))
这个怎么使用?
是对变量进行类型转换还是对指针进行类型转换?
我考虑了一种情况:
有变量u8 a = 0x03;
假设a的地址是0x0000 0000,且0x0000 0001单元内是0x01;
那么TYPE_CONVERSION(&a,u16)读出来的值应该是0x0103(具体是0x0103还是0x0301,我也不清楚)吧。

Gorgon_Meducer 发表于 2011-3-29 13:58:22

to 【73楼】 ww1228
    你的理解没有错……但是别这么用……

ww1228 发表于 2011-3-29 14:23:11

回复【74楼】Gorgon Meducer傻孩子
to 【73楼】 ww1228
    你的理解没有错……但是别这么用……
-----------------------------------------------------------------------
这么用会什么陷阱吗?
取模软件输出的数据一般都是8位的,在RGB数据是16位时采用这种方法就很方便哎~

bigfatfish 发表于 2011-3-29 14:32:04

mark

wpnx 发表于 2011-4-12 13:43:18

mark

myyule 发表于 2011-6-10 09:30:47

mark

jesse123 发表于 2011-6-10 14:49:49

记号

lanjingjing 发表于 2011-6-10 23:09:49

大智啊

quweisy 发表于 2011-6-29 00:55:38

xooogo 发表于 2011-8-7 16:44:59

榜样

lostmj 发表于 2011-8-7 17:10:11

mark

DAIHAI 发表于 2011-8-22 21:48:49

mark

skyxjh 发表于 2011-8-28 11:48:25

mark

lqian889 发表于 2011-12-19 16:39:32

mark

cumtcmeeczm 发表于 2012-4-4 11:03:05

# define SELECT_HEX(Value,n,Type)       ((Value << (n) * 4) >> ((sizeof(Type) * 8) - 4))
这个宏是怎么用的?

cos 发表于 2012-6-6 12:42:22

馬克帕克。

kcity2008 发表于 2012-8-7 20:58:47

终于找到你的基础头文件了
哇哈哈!!!!

sixue163 发表于 2012-10-9 10:09:55

各位大侠 小弟有个很菜的问题 楼主上面的库文件 要添加到ICC文件的哪个文件夹 才能在编程时很方便地直接用位操作,不胜感谢!
页: [1]
查看完整版本: [共享]傻孩子常用基础库文件同步贴 (for OLD Style)