用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

C实用小笔记

2016-06-25 作者: stopshooting举报

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









网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...