hnhxk2983 发表于 2012-3-7 13:27:19

潜水很久了,一直忙着做项目,把项目中的一些好的应用与大家分享一下

/***********************************************************
****程序全称:数据高低位转换
****程序功能:1001010101011100=0011101010101001
****输    入: 要转换位数要转换数据
****返    回:转换后的数据
***********************************************************/
int data_to_data(unsigned char num,unsigned int data)
{        //高低位..互换.
        unsigned char i;
        unsigned int m = 0;
       
        for(i = 0;i<num;i++){
             m= (m<<1)+(data&1);
             data >>=1;
        }
        return(m);
}

/***********************************************************
****程序全称:数据高低位转换
****程序功能:10010101=10101001
****输    入: 要转换数据
****返    回:转换后的数据
***********************************************************/
uchar reverse_bit(uchar data)
{        //高低位..互换.
        data=(data<<4)|(data>>4);
        data=((data&0x33)<<2)|((data&0xCC)>>2);
        data=((data&0x55)<<1)|((data&0xAA)>>1);
        return data;
}
3,得到指定地址上的一个字节或字

#defineMEM_B( x )( *( (byte *) (x) ) )

#defineMEM_W( x )( *( (word *) (x) ) )

4,求最大值和最小值

   #defineMAX( x, y ) ( ((x) > (y)) ? (x) : (y) )

   #defineMIN( x, y ) ( ((x) < (y)) ? (x) : (y) )

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

#define FPOS( type, field ) \

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

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

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

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

#defineFLIPW( ray ) ( (((word) (ray)) * 256) + (ray) )

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

#defineFLOPW( ray, val ) \

(ray) = ((val) / 256); \

(ray) = ((val) & 0xFF)

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

#defineB_PTR( var )( (byte *) (void *) &(var) )

#defineW_PTR( var )( (word *) (void *) &(var) )

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

#defineWORD_LO(xxx)((byte) ((word)(xxx) & 255))

#defineWORD_HI(xxx)((byte) ((word)(xxx) >> 8))

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

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

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

#defineUPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )

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

#defineDECCHK( c ) ((c) >= '0' && (c) <= '9')

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

#defineHEXCHK( c ) ( ((c) >= '0' && (c) <= '9') ||\

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

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

15,防止溢出的一个方法

#defineINC_SAT( val )(val = ((val)+1 > (val)) ? (val)+1 : (val))

16,返回数组元素的个数

#defineARR_SIZE( a )( sizeof( (a) ) / sizeof( (a) ) )

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

#define MOD_BY_POWER_OF_TWO( val, mod_by ) \

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

/*****************************************************************************
****        Byte2BCD
****
****
*****************************************************************************/
uchar Byte2BCD(uchar Data)
{
        uchar Rslt=0;
                  
        if (Data>=99) return 0x99;
        while(Data>9)
        {
          Data-=10;
          Rslt+=0x10;
        }                  
        return(Rslt+Data);
}

/*****************************************************************************
****        BCD2Byte
****
****
*****************************************************************************/
uchar BCD2Byte(uchar Data)
{
        return(((Data>>4)&0x0f)*10+(Data&0x0f));
}

stanley.zhao 发表于 2012-3-7 13:33:03

谢谢分享

greatwall2 发表于 2012-3-7 13:37:19

thanks for sharing...

wwwdege 发表于 2012-3-7 13:39:42

谢谢 很实用

rclong 发表于 2012-3-7 13:39:56

谢谢楼主分享
请问楼主 这些函数一般都不调用库里的么?

xue_pic 发表于 2012-3-7 13:44:26

谢谢楼主分享

benladn911 发表于 2012-3-7 13:47:15

谢谢。参考参考。赞!

wuguoyan 发表于 2012-3-7 13:51:40

参考参考。赞!

lovelywwei 发表于 2012-3-7 13:57:29

MARK

li20030505 发表于 2012-3-7 14:23:32

谢谢

ljq19840420 发表于 2012-3-7 14:31:13

mark一下谢谢

823032003 发表于 2012-3-7 15:07:43

mark

lisingch 发表于 2012-3-7 15:27:18

不错,谢谢分享。

jordonwu 发表于 2012-3-7 15:28:35

学习

LSZD 发表于 2012-3-7 15:31:03

回复【11楼】823032003尼美根
mark
-----------------------------------------------------------------------

Gorgon_Meducer 发表于 2012-3-7 15:38:41

鼓励啊!

hnhxk2983 发表于 2012-3-8 15:58:21

回复【4楼】rclong
-----------------------------------------------------------------------
不需要调用库函数

riverblue2010 发表于 2012-3-8 16:02:08

马克

cdtlzhou 发表于 2012-3-8 16:08:08

留个脚印!

zhuhanliang 发表于 2012-3-8 16:20:09

赞,有用

leijiayou 发表于 2012-3-8 16:25:23

数据转换    mark

ycwjl728 发表于 2012-3-8 16:28:15

Mark!

anxiangbo 发表于 2012-3-10 08:35:17

标记

l09046162 发表于 2012-3-10 08:57:09

mark

steven 发表于 2012-3-10 09:25:03

very good.thanks a lot!

liumaojun_cn 发表于 2012-3-10 09:32:39

mark

ljmdzyx 发表于 2012-3-10 09:49:17

果断马克住

jyjmaster 发表于 2012-3-10 10:13:57

mark

yulongkui 发表于 2012-3-10 11:01:52

值得参考

zjn8888 发表于 2012-3-10 12:01:01

辛苦

zzz1367 发表于 2012-3-10 12:03:45

谢谢

鹤皇 发表于 2012-3-30 22:27:45

楼主大公无私啊!{:victory:}

newhz 发表于 2012-3-30 22:29:52

好资料

zhiyong1820 发表于 2012-7-13 01:52:39

{:smile:}谢谢分享!

yhyf_heart 发表于 2012-7-13 07:17:23

这个得顶!

pcwinner 发表于 2012-7-13 07:23:47

MARK.....            

8s209 发表于 2012-7-13 08:40:52

MARK......下

riptell2008 发表于 2012-7-13 10:03:49

look!!

kmyft 发表于 2012-10-13 23:25:35

谢谢分享谢谢

chenfzg 发表于 2012-10-14 02:06:55

好东西,谢谢分享         

liangbmw 发表于 2012-10-14 06:42:20

好,,,

32MCU 发表于 2012-10-14 07:25:32

收藏。方便查找。

shuiluo 发表于 2012-10-14 07:32:55

好东西,谢谢楼主分享

cyq001 发表于 2012-10-14 21:49:08

谢谢楼主

jack_yu 发表于 2012-10-14 22:28:20

谢谢分享.

康河水草xu 发表于 2012-10-14 22:55:02

好东西,谢谢分享

liangbmw 发表于 2012-10-15 07:47:19

gan2。。。

sweet_136 发表于 2012-10-15 10:05:22

mark 一下子.

fulitun 发表于 2012-10-15 10:46:34

谢谢分享         

苹果520 发表于 2012-10-15 16:11:05

谢谢分享,

shizhijian 发表于 2012-10-15 21:22:53

{:smile:}         

dujuan8693 发表于 2012-10-15 21:24:42

以前用到过

ylei12 发表于 2012-10-15 21:35:03

好东西,顶上去

linuxxulin 发表于 2012-10-15 22:06:31

谢谢LZ分享,很实用的应用,以后肯定用的到。

spely 发表于 2012-10-16 09:14:56

很实用,谢谢分享~

hongyancl 发表于 2013-1-19 15:49:05

很好用的define技巧

richards 发表于 2013-1-19 16:07:47

谢谢分享

Stargazer-1986 发表于 2013-1-20 00:37:24

谢谢楼主咯~希望一天用得上~

asong14437546 发表于 2013-1-20 09:22:23

谢谢楼主的分享{:handshake:}

32MCU 发表于 2013-1-20 10:13:32

收藏。正需要。

MINI2440 发表于 2013-1-20 19:11:22

mark---------------------

taocheng 发表于 2013-1-20 22:00:16

{:biggrin:}

zbf 发表于 2013-1-20 22:13:15

3x 4 share

GFM123 发表于 2013-4-25 06:53:59

很好的参考,谢谢分享。

司马朝阳 发表于 2013-4-29 16:45:02

谢谢分享

jcrorxp 发表于 2013-4-29 16:56:33

THX{:smile:}

aworker 发表于 2013-4-29 17:24:50

宏用的不错!

ascii_he 发表于 2013-5-1 23:45:45

多谢分享!

abszy 发表于 2013-5-4 08:56:36

谢谢分享哦很不错很实用{:smile:}

langbaiyue 发表于 2013-5-4 09:46:11

高地位互换采用了,谢谢!

jxcrg_t35 发表于 2013-5-4 10:16:48

很清晰,赞

linhua770880163 发表于 2013-5-4 10:27:54

for(j=1;j<9;j++)
{
        u=(((devecode<<j)&0x100)>>8);
        v|=(u<<(j-1)) ;

}

chenchaoting 发表于 2013-5-4 15:39:32

mark         

swenlyn 发表于 2013-5-5 12:41:51

mark 谢谢分享

farmerzhangdl 发表于 2013-5-5 15:45:01

Mark一下备用

jlian168 发表于 2013-5-6 16:52:28

mark,thanks.

riptell2008 发表于 2013-5-7 13:57:22

GOOD!{:smile:}{:smile:}

sync765 发表于 2013-5-7 14:00:17

进来刘明了

windboy 发表于 2013-5-7 14:12:09

你的第一个函数就有问题哟

unsigned int 返回值是 int

czhnja 发表于 2013-5-7 14:43:37

不错的总结

285885113 发表于 2013-5-18 13:42:04

{:3_48:}好东西

小黑鱼1148 发表于 2013-5-18 13:50:22

很好的资料{:lol:}

realife 发表于 2013-6-17 17:11:22

mark,不错

weitianhu613 发表于 2013-6-17 17:47:29

mark!!!!!!!!!!   

hyf88 发表于 2013-6-17 19:41:21

谢谢分享啊。。。。。。

kerby 发表于 2013-6-25 16:39:08

谢谢分享

say_佳 发表于 2013-9-3 09:16:01

赞 ,好东西,,,

zm2002 发表于 2013-9-3 09:50:49

本帖最后由 zm2002 于 2013-9-3 09:53 编辑

1001010101011100=0011101010101001难道不能直接取反???如果只要指定位数可以再移位之类的也许更高效吧??
有些除法和乘法可以通过移位实现.
总的来说 上述代码还有不少优化空间 建议各位可以参考修正!!!

sedulity11 发表于 2013-9-3 14:08:56

mark一下

brettlee 发表于 2013-9-15 15:34:16

{:smile:}谢谢分享

god 发表于 2013-9-15 16:06:30

好收藏了

szmini2006 发表于 2013-9-15 18:44:58

看上去好像面试题

zhilu 发表于 2013-9-21 19:43:06

谢谢分享。。

n0831 发表于 2013-9-21 20:27:37

好资料,备用

关于以后 发表于 2013-10-6 14:49:20

Mark一下。

msq-tc 发表于 2013-10-7 20:20:41

留名以后备用

pipi516 发表于 2013-10-8 08:53:47

mark一下!

seawind319 发表于 2013-10-8 16:29:16

谢谢很实用的东西

chengsong 发表于 2013-10-8 17:46:58

好东东,留名!

kenson 发表于 2013-10-8 18:14:02

好厉害啊 收藏了
页: [1] 2
查看完整版本: 潜水很久了,一直忙着做项目,把项目中的一些好的应用与大家分享一下