搜索
bottom↓
回复: 90

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

[复制链接]

出0入296汤圆

发表于 2008-1-26 03:01:29 | 显示全部楼层 |阅读模式
由于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[0]))

# 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

出0入296汤圆

 楼主| 发表于 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

出0入296汤圆

 楼主| 发表于 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

出0入0汤圆

发表于 2008-1-26 08:35:44 | 显示全部楼层
我先占个位子,好东西

出0入0汤圆

发表于 2008-1-26 11:35:39 | 显示全部楼层
的却是好东东,佩服

出0入0汤圆

发表于 2008-1-26 12:10:46 | 显示全部楼层
3楼的好强

出0入296汤圆

 楼主| 发表于 2008-1-26 14:26:09 | 显示全部楼层
我记得明明把帖子锁定了阿……

- -b

我才 - -b 呢!

出0入0汤圆

发表于 2008-1-26 14:40:39 | 显示全部楼层
好东西,收了

出0入0汤圆

发表于 2008-1-26 16:13:18 | 显示全部楼层
# define SET_DWORD_DIV_8(Addr)     (*((volatile DWORD2HBYTE *)&Addr))
看不明白?能解释一下吗?

傻孩子:你可以下载我书的DEMO,里面有非常详细的解释!

出0入0汤圆

发表于 2008-1-29 15:46:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-3-6 09:22:11 | 显示全部楼层
能解释#define不带参数的用法吗?是空格吗?
#ifndef _USE_MACRO_AND_CONST_H_
#define _USE_MACRO_AND_CONST_H_

傻孩子:不带参数就是 替换为 空字符,什么是空字符呢,就是什么都没有……

出0入0汤圆

发表于 2008-3-6 11:12:46 | 显示全部楼层
你牛啊

出0入0汤圆

发表于 2008-3-6 14:29:53 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-3-6 17:15:45 | 显示全部楼层
to 【10楼】 liqu
这个是包含警卫,是为了防止此文件被包含多次的。
(如果此文件被包含多次,又没有警卫的话,编译器会有多次define的错误的)
完整的应该是

#ifndef _USE_MACRO_AND_CONST_H_
#define _USE_MACRO_AND_CONST_H_

...

#endif

出0入0汤圆

发表于 2008-3-17 16:18:42 | 显示全部楼层
请教楼主一个问题,我看瑞萨的头文件是这样定义的,先定义一个结构体,然后给顶地址,这样就可以既可以按位操作又可以按字节操作,十分的方便.我曾在GCC下试过一次这中方式定义AVR的,结果高低位刚好相反,有没有什么方法解决呀.
下面是瑞萨的定义:
struct st_p1 {                                          /* struct P1    */
             unsigned char      DDR;                    /* P1DDR        */
             char               wk1[159];               /*              */
             union {                                    /* P1PORT       */
                   unsigned char BYTE;                  /*  Byte Access */
                   struct {                             /*  Bit  Access */
                          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[15];                /*              */
             union {                                    /* P1DR         */
                   unsigned char BYTE;                  /*  Byte Access */
                   struct {                             /*  Bit  Access */
                          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*/

出0入296汤圆

 楼主| 发表于 2008-3-17 17:46:32 | 显示全部楼层
这种方法是通过union的方式实现与我的头文件相同的功能。至于相反,那是大端对齐与小端对齐的不同导致的。可以通过一个预编译宏来设定。具体请查阅gcc手册。我不使用GCC,所以无法一下给您明确的大案。

出0入0汤圆

发表于 2008-3-19 16:47:30 | 显示全部楼层
先占个位子

出0入0汤圆

发表于 2008-3-19 21:49:49 | 显示全部楼层
谢谢,mark

出0入0汤圆

发表于 2008-6-11 15:07:55 | 显示全部楼层
仔细研究一下,谢谢了

出0入0汤圆

发表于 2008-6-19 08:26:50 | 显示全部楼层
看看

出0入0汤圆

发表于 2008-6-25 14:06:43 | 显示全部楼层
能不能说一下,怎么定义一个标志位么,只有真与假两种情况的也变量

出0入296汤圆

 楼主| 发表于 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。

出75入4汤圆

发表于 2008-7-6 09:22:34 | 显示全部楼层
mark。以后就用上了。

出0入0汤圆

发表于 2008-7-12 10:44:31 | 显示全部楼层
About H

Mark!

出0入46汤圆

发表于 2008-7-12 11:56:19 | 显示全部楼层
好贴!

出0入0汤圆

发表于 2008-7-12 12:17:25 | 显示全部楼层
不MARK一下对不起楼主!

出0入0汤圆

发表于 2008-7-14 16:26:11 | 显示全部楼层
做个记号,以后研究

出0入0汤圆

发表于 2008-7-17 21:14:05 | 显示全部楼层
水平太低了,看不出有什么用。。。。

出0入0汤圆

发表于 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))

出0入0汤圆

发表于 2008-9-10 20:14:37 | 显示全部楼层
很繁琐

出0入0汤圆

发表于 2008-9-11 10:16:08 | 显示全部楼层
好东西啊,收藏一下。谢谢楼主无私奉献。

出0入0汤圆

发表于 2008-9-11 12:12:49 | 显示全部楼层
mark~~~

出0入0汤圆

发表于 2008-9-11 13:00:05 | 显示全部楼层
先记着,回头有空再看

出0入0汤圆

发表于 2008-12-17 20:37:55 | 显示全部楼层
怎么我看里面的很复杂啊。看不懂

出0入0汤圆

发表于 2008-12-25 13:50:42 | 显示全部楼层
牛,就一个字

出0入0汤圆

发表于 2009-1-28 15:26:12 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-4-9 16:07:08 | 显示全部楼层

出0入296汤圆

 楼主| 发表于 2009-4-9 16:12:28 | 显示全部楼层
由于Snail C Coding Style 的修正,该贴中提到的基础库文件仅仅用作对2009年之前
的工程进行向前兼容,2009年4月以后,Snail Studio将全面执行新的编码规范,规范草案和对应的基础
库函数将陆续更新。

出0入0汤圆

发表于 2009-4-17 23:08:49 | 显示全部楼层
Snail Studio将全面执行新的编码规范??
什么意思??
请斑竹点一下~!!

出200入0汤圆

发表于 2009-4-17 23:44:36 | 显示全部楼层
有时间好好看看~~

出0入0汤圆

发表于 2009-4-22 16:06:11 | 显示全部楼层
标记

出0入0汤圆

发表于 2009-4-22 16:46:24 | 显示全部楼层
mark.偶滴鼠标滚轮哇。。。

出0入0汤圆

发表于 2009-6-12 17:34:16 | 显示全部楼层
这贴必需顶……

出0入0汤圆

发表于 2009-6-22 00:41:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-10 22:09:07 | 显示全部楼层
good ~~

出0入0汤圆

发表于 2010-1-10 22:33:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-22 10:12:11 | 显示全部楼层
好东西啊

出0入0汤圆

发表于 2010-3-27 19:32:24 | 显示全部楼层

出0入0汤圆

发表于 2010-4-9 18:48:47 | 显示全部楼层
mark!

出0入8汤圆

发表于 2010-4-9 20:53:37 | 显示全部楼层
可以引用一些的,谢谢

出0入0汤圆

发表于 2010-4-13 16:57:54 | 显示全部楼层
好东西

出0入0汤圆

发表于 2010-4-13 21:47:22 | 显示全部楼层
租个女友回家过年

出0入0汤圆

发表于 2010-5-4 12:44:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-4 13:09:17 | 显示全部楼层
MARK的

出0入0汤圆

发表于 2010-5-6 14:27:23 | 显示全部楼层
正在看你的  深入浅出!   写的不错!

出0入0汤圆

发表于 2010-5-6 20:45:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-2 16:10:46 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-10 16:35:10 | 显示全部楼层
仔细研究下得。

出0入0汤圆

发表于 2010-7-24 13:06:35 | 显示全部楼层
膜拜中 哎 自己太差

出0入0汤圆

发表于 2010-7-26 16:16:41 | 显示全部楼层
谢谢了

出0入0汤圆

发表于 2010-8-18 16:06:26 | 显示全部楼层
拜拜傻孩子!
又上了一课。

出0入0汤圆

发表于 2010-9-4 08:31:54 | 显示全部楼层
多谢了

出0入0汤圆

发表于 2010-10-11 13:35:30 | 显示全部楼层
正好用到位操作,真是省事多了

出0入0汤圆

发表于 2010-10-14 10:42:21 | 显示全部楼层
union 方法与傻孩子的方法那种更好?

出0入0汤圆

发表于 2010-11-17 20:02:10 | 显示全部楼层
标记学习

出350入8汤圆

发表于 2010-11-17 20:57:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-15 22:21:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-25 10:13:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-25 11:00:07 | 显示全部楼层
收获不小啊

出0入0汤圆

发表于 2010-12-25 12:36:35 | 显示全部楼层
学习一下哈

出0入0汤圆

发表于 2011-1-16 18:37:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-13 23:53:34 | 显示全部楼层
需要学习的东西好多啊,头好晕

出0入0汤圆

发表于 2011-3-24 15:34:43 | 显示全部楼层
不错

出0入0汤圆

发表于 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,我也不清楚)吧。

出0入296汤圆

 楼主| 发表于 2011-3-29 13:58:22 | 显示全部楼层
to 【73楼】 ww1228
    你的理解没有错……但是别这么用……

出0入0汤圆

发表于 2011-3-29 14:23:11 | 显示全部楼层
回复【74楼】Gorgon Meducer  傻孩子
to 【73楼】 ww1228
    你的理解没有错……但是别这么用……
-----------------------------------------------------------------------
这么用会什么陷阱吗?
取模软件输出的数据一般都是8位的,在RGB数据是16位时采用这种方法就很方便哎~

出0入0汤圆

发表于 2011-3-29 14:32:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-12 13:43:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-10 09:30:47 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-10 14:49:49 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-6-10 23:09:49 | 显示全部楼层
大智啊

出0入0汤圆

发表于 2011-6-29 00:55:38 | 显示全部楼层

出0入0汤圆

发表于 2011-8-7 16:44:59 | 显示全部楼层
榜样

出0入0汤圆

发表于 2011-8-7 17:10:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-22 21:48:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-28 11:48:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-19 16:39:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-4-4 11:03:05 | 显示全部楼层
# define SELECT_HEX(Value,n,Type)       ((Value << (n) * 4) >> ((sizeof(Type) * 8) - 4))
这个宏是怎么用的?

出0入0汤圆

发表于 2012-6-6 12:42:22 | 显示全部楼层
馬克帕克。

出0入0汤圆

发表于 2012-8-7 20:58:47 | 显示全部楼层
终于找到你的基础头文件了
哇哈哈!!!!

出0入0汤圆

发表于 2012-10-9 10:09:55 | 显示全部楼层
各位大侠 小弟有个很菜的问题 楼主上面的库文件 要添加到ICC文件的哪个文件夹 才能在编程时很方便地直接用位操作,不胜感谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 09:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表