完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
记录下一些自己最近去应聘嵌入式软件工程师遇到的一些笔试题,都是一些关于C/C++方面的问题和单片机方面的问题,留个纪念。
{ double area = PI * radius * radius; printf(" Area = %f", area); return area; } 当时第一反应就写了返回值和参数。 标准答案: 这个函数有太多的错误了,以至让人不知从何说起了: 1). ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。 2). ISR 不能传递参数。如果你没有看到这一点,你被雇用的机会等同第一项。 3). 在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。 4). 与第三点一脉相承,printf()经常有重入和性能上的问题。如果你丢掉了第三和第四点,我不会太为难你的。不用说,如果你能得到后两点,那么你的被雇用前景越来越光明了。 5.I2C接口里面的SDA和SCK的全称好像,是两个英文名词,当时就没写,后来面试问我不懂这个吗,有点尴尬,他跟我说了中文才知道,I2C学的时候只知道怎么用,没深入。 还遇到过一个叫我写UART、I2C、SPI、CAN总线等详细的讲解,还要画其中一个的时序图,当场去世。 6.关于单片机中常见的位运算的题目,即 |= &=~ 这两个的一些操作,有让你置位的,也有让你算一个八位数里面有多少个位是1的。 例题 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量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; } 一些人喜欢为设置和清除值而定义一个掩码同时定义一些说明常数,这也是可以接受的。我希望看到几个要点:说明常数、|=和&=~操作。 7.有一个题目是关于面向对象的四大特性的,就自己百度吧,就是抽象、封装、继承、多态。 编程题: 1、单向链表取反的; 2、在一个字符串中找到第一个只出现一次的字符 3、51单片机流水灯 …… 好好总结,希望自己早日找到理想的工作,目前只有一个offer,是新公司,工资待遇也不高,不是很心动,太难了,加油吧。 |
|
|
|
只有小组成员才能发言,加入小组>>
682 浏览 0 评论
1099 浏览 1 评论
2464 浏览 5 评论
2798 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2634 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
645浏览 9评论
641浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
772浏览 6评论
618浏览 5评论
660浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-18 06:20 , Processed in 0.947416 second(s), Total 50, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号