原创 继续关于C++在WINAVR上的位控及优化问题

2006-12-28 22:48 5457 7 7 分类: MCU/ 嵌入式
/*-------------------------------------------------------------------
优化示例:
  DDRB &= ~((1 << SCL) | (1 << SDA)); //SCL设置为输入方式,SCL信号由主机提供
上句将比下两句代码多编译2个字节
  DDRB &= ~(1 << SCL); //SCL设置为输入方式,SCL信号由主机提供
  DDRB &= ~(1 << SDA); //SDA设置为输入方式
--------------------------------------------------------------------*/
在MCU中,对'位'的控制都格外关心,都担心C的效率问题.但gccavr在这方面解决的很出色.

 

有时可能需要位的同时控制,则必须像:


DDRB |= ((1 << SCL) | (1 << SDA));

DDRB &= ~((1 << SCL) | (1 << SDA));
PORTB |= ((1 << SCL) | (1 << SDA));

PORTB &= ~((1 << SCL) | (1 << SDA));

 

但在小容量的芯片或和次序无关时,采用 :

DDRB &= ~(1 << SCL);

DDRB &= ~(1 << SDA);

PORTB |= (1 << SCL);

PORTB |= (1 << SDA));

可能效率更高,也符合"位控"的目的.

 

好些人一直纠缠51的"位控"方式: P1_0 = 1;P0_0 = 0;

认为是真正的"位控"方式.

 

实际是习惯问题. 因为在更多的环境下,C的通用"位控"方式则更具有普遍性.

即|=;&=~;^=的这几种常用书写方式.

 

说实话,MCU与PC的最大不同就是对硬件的操作,MCU实际最后和最直接的目的

就是用位控来达到控制的目的.

可以说几乎见不到没有位控的MCU系统.
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条