电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章嵌入式系统嵌入式系统C语言位操作的移植与优化

嵌入式系统C语言位操作的移植与优化

11-20 17:12:37 | http://www.5idzw.com | 嵌入式系统 | 人气:879
标签:嵌入式系统开发,嵌入式开发,http://www.5idzw.com 嵌入式系统C语言位操作的移植与优化,http://www.5idzw.com
  typedef INT8U bdata ;
  #define ACC ACCImg
  #define GET_CARD_SDA() if(P6IN & 0x01) ACC |=0x01;
#endif

  汇编的结果与用逻辑运算的方法进行位操作竟完全一样。

结语

  对引脚的位操作有3种: 直接置位或清零,从端口输入数据和从端口输出数据。前两种上文已介绍过了。从端口输出数据的C程序如下:

do{
  OUT_SIO_DA();
  CLK_H();
  ACC <<= 1;//移位可扩展时钟脉冲宽度
  CLK_L();
}while

其中: 第一句OUT_SIO_DA(),51系列可定义成位操作SIO_SDA = ACC_7;196/296和430系列可如上文定义成一个if语句。

  位段操作程序中采用了ACC这个名字作为一个局部变量。在C51中这刚好是主累加器,对于2401、IC卡等半双工器件的程序很实用,但当SPI总线输入/输出同时操作时,就没这么方便了。

  用逻辑运算实现位操作不存在任何移植的障碍。μC/OS-II中的位操作就是全用逻辑运算实现的。位段定义可能存在不同编译器分配顺序不同的问题,但考虑到32位高速CPU不会用软件模拟这种串口的操作,这样的程序只会用在51、196/296、MSP430等无片内Cache的中低速单片机中,所以用位段操作引脚的方法仍有意义。具体是使用逻辑运算还是使用位段进行位操作,完全看个人喜好。本文程序采用的编译器是Keil C51 V7.03、IAR C430 V2.10A和 Tasking C96 V5.0。

上一页  [1] [2] 

,嵌入式系统C语言位操作的移植与优化