[C] C实用小笔记 →→→→→进入此内容的聊天室

来自 , 2019-04-23, 写在 C, 查看 111 次.
URL http://www.code666.cn/view/5314b967
  1. /*****************************************
  2. 1.不用临时变量交换变量值
  3.    设交换a、b两个变量的值
  4. *****************************************/
  5. //方法一:
  6. a = a ^ b;
  7. b = a ^ b;
  8. a = a ^ b;
  9. //原理 :
  10. //New_b = a ^ b ^ b = a ^ 0 = a;
  11. //New_a = a ^ b ^ a = a ^ a ^ b = 0 ^ b = b;
  12.  
  13. //方法二 :
  14. a = a + b;
  15. b = a - b;
  16. a = a - b;
  17.  
  18. /*****************************************
  19. 2.使用位域定义位变量
  20.   优点: 按位定义全局标志变量,减少空间占用率
  21. *****************************************/
  22. typedef union
  23. {
  24.     unsigned char BYTE;  //可以按字节寻址
  25.     struct
  26.     {
  27.         unsigned char bit0 :1;
  28.         unsigned char bit1 :1;
  29.         unsigned char bit2 :1;
  30.         unsigned char bit3 :1;
  31.         unsigned char bit4 :1;
  32.         unsigned char bit5 :1;
  33.         unsigned char bit6 :1;
  34.         unsigned char bit7 :1;
  35.     }BIT;    
  36. }BITFIELD;
  37.  
  38. #define GET_FIELD(v)   ( *((volatile  BITFIELD *) (&v)) )    //强制转换
  39. #define BIT(v,b)        ( GET_FIELD(v).BIT.bit##b )
  40.  
  41. //例:
  42. unsigned char flag0;
  43.  
  44. #define A_Flag        BIT(flag0,0)    //flag0的第0位
  45. #define B_Flag        BIT(flag0,1)    //flag0的第1位
  46. #define C_Flag        BIT(flag0,2)    //flag0的第2位
  47. #define D_Flag        BIT(flag0,3)    //flag0的第3位
  48. #define E_Flag        BIT(flag0,4)    //flag0的第4位
  49. #define F_Flag        BIT(flag0,5)    //flag0的第5位
  50. #define G_Flag        BIT(flag0,6)    //flag0的第6位
  51. #define H_Flag        BIT(flag0,7)    //flag0的第7位
  52.  
  53. /*****************************************
  54. 3.STM8 EERPOM存储变量的定义
  55.   优点: 不用每次定义新变量时都需要写地址
  56. *****************************************/
  57. /*  建立头文件"eeprom.h"如下 */
  58. #define  SIZE_OF_EEPROM   128           //EEPROM大小
  59. #define  EEP_ADDR         0x004000ul    //EEPROM数据存储的首地址
  60.  
  61. #pragma pack(1)
  62. typedef volatile struct
  63. {
  64.     vu8    eep_calibration;    //校准,0x5A:表示LUX已校对过,产品第一次开机时校对。
  65.     vu8    eep_Init_Vol;       //起始电压
  66.     vu8    eep_Vol_Slope;      //电压倍率
  67.     vu16   eep_onlux;
  68.     //...
  69. } EEP_Data_TypeDef;
  70. #pragma pack()
  71.  
  72. //防止数据定义出错
  73.     #if sizeof(EEP_Data_TypeDef) > SIZE_OF_EEPROM
  74.         #error "EEP_Data_Type的大小已超过该芯片的EEPROM大小!"
  75.     #endif
  76.  
  77. //声明
  78. extern EEP_Data_TypeDef *EEP_Data;
  79.  
  80. /*  建立源文件"eeprom.C"如下 */
  81. EEP_Data_TypeDef *EEP_Data = ((EEP_Data_TypeDef *) (EEP_ADDR));
  82.  
  83. /*****************************************
  84. 4.
  85. *****************************************/
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  

回复 "C实用小笔记"

这儿你可以回复上面这条便签

captcha