#嵌入式笔面经分享#科大讯飞公司嵌入式硬件面经(第1面)

#嵌入式笔面经分享#科大讯飞公司嵌入式硬件面经(第1面)

时间:7月1日-7月1日

时长:30分钟

面试内容

嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a 的bit 3。在以上两个操作中,要保持其它位不变。对这个问题有三种基本的反应1)不知道如何下手。该被面者从没做过任何嵌入式系统的工作。2)  用bit fields。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我最近不幸看到 Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,因为我的编译器用其它的方式来实现bit fields的。从道德讲:永远不要让一个非嵌入式的家伙粘实际硬件的边。3) 用 #defines 和 bit masks 操作。这是一个有极高可移植性的方法,是应该被用到的方法。最佳的解决方案如下:

#define BIT3 (0x1 << 3)

static int a;

void set_bit3(void){    

a |= BIT3;}

void clear_bit3(void){    

a &= ~BIT3;}

一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作。

访问固定的内存位置(Accessing fixed memory locations)

面试总结:重视基础

#嵌入式笔面经分享#

#嵌入式笔面经分享#
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务