2021-6-7 嵌入式学习笔记4:嵌入式面试

买了块板子不到两个月,匆匆忙忙做了一些教学项目就跑去面试了,准备从魔都滚蛋了,地方虽好,穷逼留不下。写个博文记录一下面试题。

C语言

怎么将二进制数据解析成float

这个题当时我理解错了,之前看CSAPP时看到过,要通过什么IEEE制定的协议,将存储的数据按照、符号位、阶码、尾数、长度进行解析,当时我人傻了,这么深么???然后没说出来。后面又仔细回顾了一下面试官的问题,他描述的应该是某个地址中存着一个float型的数据,怎么对它进行解析。只要做过数据传输方面的小伙伴都应该熟悉这个问题,简直就是送分题。

最常用和简单的就是union,由于char数组和float的起始地址是一样的,用char数组接受读取的数据,直接输出成float型即可,在传输的时候还注意大小端的问题。

vloatile const inline

初学者的高频面试题,对于这个不熟的基本可以认为没怎么做过实际项目。因为常问的几个问题就是:

以下区别是啥?
const int a;    a是只读int变量
int const a;    a是只读int变量
const int *a;    a是指针,指向一个只读int变量,指向可以变
int * const a;    a是只读指针,指向int变量,指向不能变

一个参数既可以是const还可以是volatile吗?
可以,只读的状态寄存器

内敛函数的声明与定义。
C语言中,如果一些函数被频繁的调用,不断地用函数入栈,即函数栈,则会造成栈空间或者栈内存的大量消耗,为了解决这个问题,特别的引入了inline关键字,表示为内联函数。
关键字inline必须与函数的定义体放在一起,才能使函数成为内联函数,仅仅将inline放在函数声明前面不起作用。
inline的展开与否是由编译器决定,inline只是告诉编译器,这个函数可以被展开。

对于const,写作常量,读作只读。建议将其理解为只允许程序去读,说白了就是不能变。

而volatile是说这变量可能会被意想不到地改变,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

linux

这块问的就很杂了,基本把基础知识过了一个遍,我就把问题都记录一下。

  1. 内核空间与用户空间
  2. 自旋锁,互斥锁,信号量,顺序锁。自旋锁单CPU和多CPU有啥区别,交叉着中断方面的知识。
  3. platform总线
  4. 说一个你熟悉的硬件总线(i2c,usb等),并简述下在linux驱动中的相关模型。
  5. kmalloc,vmalloc。配合着高端内存、线性区的知识回答。
  6. 中断下半部的三种机制
  7. contain_of
  8. RCU
  9. 有没有遇见硬件问题导致死机?怎么解决?

还有其他的没记住,当时问的忒多了,怼了一个小时。其中涉及到临界区和临界资源方面的问题,都要配合中断和抢占(进程调度相关知识)进行理解。

进程的话我整理了一个框图,基于5.4内核,有兴趣的可以看看。基于陈华才的《用芯探核》写的读书笔记。

最后强力推荐两本书,一本就是提到的CSAPP,真的是干咱这行的枕边书。不求读透,能懂个80%就很牛逼了。之前听宋宝华讲进程调度时,提到过缺页异常的处理,在处理时要对数据复制两次,当时只是大概有个印象,原因是啥没理解。后来看了CSAPP中的异常控制流那一节,才恍然大悟,神书,真的是神书。还有一本是有关嵌入式开发的,之前看的是宋宝华的那本书,后面同事推荐了一本,读了之后相见恨晚,《深入Linux 设备驱动程序内核机制 陈学松著》。这本书相当相当不错,基础知识方面讲的很细,特别适合新人看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值