/***************************************** |
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) 回复
??
回复评论