Chinaunix首页 | 论坛 | 博客
  • 博客访问: 498733
  • 博文数量: 187
  • 博客积分: 3011
  • 博客等级: 中校
  • 技术积分: 2092
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-28 17:08
文章分类

全部博文(187)

文章存档

2011年(1)

2010年(8)

2009年(178)

我的朋友

分类: C/C++

2009-12-01 21:28:55

嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。
对这个问题有三种基本的反应
•; 不知道如何下手。该被面者从没做过任何嵌入式系统的工作。
•; 用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我最近不幸看到 Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,因为我的编译器用其它的方式来实现bit fields的。从道德讲:永远不要让一个非嵌入式的家伙粘实际硬件的边。
•; 用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下:
 
#include
#include
 
 
#define BIT3 (0x1<<3)
static int a;
 
int set_bit3(void){
 a|=BIT3;
 return a;
}
 
int clear_bit3(void){
 a&=~BIT3;
 return a;
}
 
int main()
{
  printf("set_bit3=%d\n",set_bit3());
  printf("clear_bit3=%d\n",clear_bit3());
 
}
阅读(1685) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~