微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 程序调试心得分享

程序调试心得分享

时间:10-02 整理:3721RD 点击:

  1. /***********************************************************
  2. ****程序全称:数据高低位转换
  3. ****程序功能:1001010101011100=0011101010101001
  4. ****输    入: 要转换位数  要转换数据
  5. ****返    回:转换后的数据
  6. ***********************************************************/
  7. int data_to_data(unsigned char num,unsigned int data)
  8. {        //高低位..互换.
  9.         unsigned char i;
  10.         unsigned int m = 0;
  11.         
  12.         for(i = 0;i<num;i++){
  13.              m= (m<<1)+(data&1);
  14.              data >>=1;
  15.         }
  16.         return(m);
  17. }

复制代码

  1. /***********************************************************
  2. ****程序全称:数据高低位转换
  3. ****程序功能:10010101=10101001
  4. ****输    入: 要转换数据
  5. ****返    回:转换后的数据
  6. ***********************************************************/
  7. uchar reverse_bit(uchar data)
  8. {        //高低位..互换.
  9.         data=(data<<4)|(data>>4);
  10.         data=((data&0x33)<<2)|((data&0xCC)>>2);
  11.         data=((data&0x55)<<1)|((data&0xAA)>>1);
  12.         return data;
  13. }

复制代码


3,得到指定地址上的一个字节或字

  1. #define  MEM_B( x )  ( *( (byte *) (x) ) )

  2. #define  MEM_W( x )  ( *( (word *) (x) ) )

复制代码

4,求最大值和最小值

  1. #define  MAX( x, y ) ( ((x) > (y)) ? (x) : (y) )

  2. #define  MIN( x, y ) ( ((x) < (y)) ? (x) : (y) )

复制代码

5,得到一个field在结构体(struct)中的偏移量

  1. #define FPOS( type, field ) \

  2. /*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */

复制代码

6,得到一个结构体中field所占用的字节数

  1. #define FSIZ( type, field ) sizeof( ((type *) 0)->field

复制代码


7,按照LSB格式把两个字节转化为一个Word

  1. #define  FLIPW( ray ) ( (((word) (ray)[0]) * 256) + (ray)[1] )

复制代码

8,按照LSB格式把一个Word转化为两个字节

  1. #define  FLOPW( ray, val ) \

  2.   (ray)[0] = ((val) / 256); \

  3.   (ray)[1] = ((val) & 0xFF)

复制代码

9,得到一个变量的地址(word宽度)

  1. #define  B_PTR( var )  ( (byte *) (void *) &(var) )

  2. #define  W_PTR( var )  ( (word *) (void *) &(var) )

复制代码

10,得到一个字的高位和低位字节

  1. #define  WORD_LO(xxx)  ((byte) ((word)(xxx) & 255))

  2. #define  WORD_HI(xxx)  ((byte) ((word)(xxx) >> 8))

复制代码

11,返回一个比X大的最接近的8的倍数

  1. #define RND8( x )       ((((x) + 7) / 8 ) * 8 )

复制代码

12,将一个字母转换为大写

  1. #define  UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

复制代码

13,判断字符是不是10进值的数字

  1. #define  DECCHK( c ) ((c) >= '0' && (c) <= '9')

复制代码

14,判断字符是不是16进值的数字

  1. #define  HEXCHK( c ) ( ((c) >= '0' && (c) <= '9') ||\

  2.                        ((c) >= 'A' && (c) <= 'F') ||\

  3. ((c) >= 'a' && (c) <= 'f') )

复制代码

15,防止溢出的一个方法

  1. #define  INC_SAT( val )  (val = ((val)+1 > (val)) ? (val)+1 : (val))

复制代码

16,返回数组元素的个数

  1. #define  ARR_SIZE( a )  ( sizeof( (a) ) / sizeof( (a[0]) ) )

复制代码

17,返回一个无符号数n尾的值MOD_BY_POWER_OF_TWO(X,n)=X%(2^n)

  1. #define MOD_BY_POWER_OF_TWO( val, mod_by ) \

  2.            ( (dword)(val) & (dword)((mod_by)-1) )

  3. /*****************************************************************************
  4. ****        Byte2BCD
  5. ****
  6. ****
  7. *****************************************************************************/
  8. uchar Byte2BCD(uchar Data)
  9. {
  10.         uchar Rslt=0;
  11.                   
  12.         if (Data>=99) return 0x99;
  13.         while(Data>9)
  14.         {
  15.           Data-=10;
  16.           Rslt+=0x10;
  17.         }                  
  18.         return(Rslt+Data);
  19. }

  20. /*****************************************************************************
  21. ****        BCD2Byte
  22. ****
  23. ****
  24. *****************************************************************************/
  25. uchar BCD2Byte(uchar Data)
  26. {
  27.         return(((Data>>4)&0x0f)*10+(Data&0x0f));
  28. }

复制代码


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top