[c]代码库
/*****************************************
1.不用临时变量交换变量值
设交换a、b两个变量的值
*****************************************/
//方法一:
a = a ^ b;
b = a ^ b;
a = a ^ b;
//原理 :
//New_b = a ^ b ^ b = a ^ 0 = a;
//New_a = a ^ b ^ a = a ^ a ^ b = 0 ^ b = b;
//方法二 :
a = a + b;
b = a - b;
a = a - b;
/*****************************************
2.使用位域定义位变量
优点: 按位定义全局标志变量,减少空间占用率
*****************************************/
typedef union
{
unsigned char BYTE; //可以按字节寻址
struct
{
unsigned char bit0 :1;
unsigned char bit1 :1;
unsigned char bit2 :1;
unsigned char bit3 :1;
unsigned char bit4 :1;
unsigned char bit5 :1;
unsigned char bit6 :1;
unsigned char bit7 :1;
}BIT;
}BITFIELD;
#define GET_FIELD(v) ( *((volatile BITFIELD *) (&v)) ) //强制转换
#define BIT(v,b) ( GET_FIELD(v).BIT.bit##b )
//例:
unsigned char flag0;
#define A_Flag BIT(flag0,0) //flag0的第0位
#define B_Flag BIT(flag0,1) //flag0的第1位
#define C_Flag BIT(flag0,2) //flag0的第2位
#define D_Flag BIT(flag0,3) //flag0的第3位
#define E_Flag BIT(flag0,4) //flag0的第4位
#define F_Flag BIT(flag0,5) //flag0的第5位
#define G_Flag BIT(flag0,6) //flag0的第6位
#define H_Flag BIT(flag0,7) //flag0的第7位
/*****************************************
3.STM8 EERPOM存储变量的定义
优点: 不用每次定义新变量时都需要写地址
*****************************************/
/* 建立头文件"eeprom.h"如下 */
#define SIZE_OF_EEPROM 128 //EEPROM大小
#define EEP_ADDR 0x004000ul //EEPROM数据存储的首地址
#pragma pack(1)
typedef volatile struct
{
vu8 eep_calibration; //校准,0x5A:表示LUX已校对过,产品第一次开机时校对。
vu8 eep_Init_Vol; //起始电压
vu8 eep_Vol_Slope; //电压倍率
vu16 eep_onlux;
//...
} EEP_Data_TypeDef;
#pragma pack()
//防止数据定义出错
#if sizeof(EEP_Data_TypeDef) > SIZE_OF_EEPROM
#error "EEP_Data_Type的大小已超过该芯片的EEPROM大小!"
#endif
//声明
extern EEP_Data_TypeDef *EEP_Data;
/* 建立源文件"eeprom.C"如下 */
EEP_Data_TypeDef *EEP_Data = ((EEP_Data_TypeDef *) (EEP_ADDR));
/*****************************************
4.
*****************************************/
by: 发表于:2017-08-10 09:24:35 顶(0) | 踩(0) 回复
??
回复评论