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.
*****************************************/




本文地址:
本文转自:http://yuncode.net/code/c_507381210085972

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值