嵌入式软件工程师面试题(八)

简介: 嵌入式软件工程师面试题(八)

a31747bfbad64df58203c6c448b1ae7f.png

1、在FreeRTOS中,任务通知的运行机制是怎么样的?


点击查看 原题更多的解析与讨论

任务通知的数据结构包含在任务控制块中,只要任务存在,任务通知数据结构就已经创建完毕,可以直接使用。

任务通知可以在任务中向指定任务发送通知,也可以在中断中向指定任务发送通知,FreeRTOS 的每个任务都有一个 32 位的通知值,任务控制块中的成员变量 ulNotifiedValue就是这个通知值。

只有在任务中可以等待通知,而不允许在中断中等待通知。

如果任务在等待的通知暂时无效,任务会根据用户指定的阻塞超时时间进入阻塞状态,我们可以将等待通知的任务看作是消费者;其它任务和中断可以向等待通知的任务发送通知,发送通知的任务和中断服务函数可以看作是生产者,当其他任务或者中断向这个任务发送任务通知,任务获得通知以后,该任务就会从阻塞态中解除。


2、什么情况下会栈溢出?如何避免?


点击查看 原题更多的解析与讨论

1.局部数组过大。当函数内部的数组过大时,有可能导致堆栈溢出。

2.递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,也会导致堆栈溢出。

3.指针或数组越界。这种情况最常见,例如进行字符串拷贝,或处理用户输入等等。 解决这类问题的办法有两个, 一是增大栈空间,二是改用动态分配,使用堆(heap)而不是栈(stack)。


3、深复制和浅复制的区别?


点击查看 原题更多的解析与讨论

浅复制:被复制对象的所有变量都含有与原来对象相同的值,而所有其他对象的引用仍然指向原来的对象。

深复制:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制的新对象,而不再是原有的那些被引用的对象。


4、从一个源文件到可执行文件的过程?


点击查看 原题更多的解析与讨论

主要包括4个过程:


预处理;

2.编译(产生.s文件,-s);

3.汇编(产生.o或者.obj文件,-c);

链接


5、简述一下快速排序的步骤


点击查看 原题更多的解析与讨论

1.从数列中挑出一个元素,称为 “基准”;

2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置;

3.递归地把小于基准值元素的子数列和大于基准值元素的子数列排序;


6、头文件的两种包含方式的区别,<>与""区别


点击查看 原题更多的解析与讨论

< >引用的是编译器的类库路径里面的头文件,#include <> 的查找位置是标准库头文件所在目录;

" "引用的是你程序目录的相对路径中的头文件, #include “” 的查找位置是当前源文件所在目录。


7、CAN通信介绍;CAN通信报文的标识符有几位?


点击查看 原题更多的解析与讨论

CAN 是ISO国际标准化的串行通信协议。

CAN 控制器根据两根线上的电位差来判断总线电平。

总线电平分为显性电平和隐性电平,二者必居其一。

发送方通过使总线电平发生变化,将消息发送给接收方。

通信报文标识符有标准格式和扩展格式两种格式。

标准格式有11 个位的标识符(ID),扩展格式有29 个位的ID。


8、C语言结构体怎么定义节省内存


点击查看 原题更多的解析与讨论

1.在保证值域足够的情况下,用小字节变量代替大字节变量,如用short替代int

2.将各成员按其所占字节数从小到大声明,以尽量减少中间的填补空间(字节对齐)。

3.可以取消字节对齐,#pragma pack(1),当然这会牺牲效率,谨慎采用。



相关文章
|
2月前
|
程序员
嵌入式软件工程师如何快速成长
嵌入式软件工程师如何快速成长
21 2
|
8月前
|
JavaScript 芯片
聊聊身边的嵌入式,2年质保期刚过就翘辫子,这是什么骚设计?
聊聊身边的嵌入式,2年质保期刚过就翘辫子,这是什么骚设计?
|
5月前
|
安全 Java 编译器
嵌入式c++软件开发第四讲笔记
嵌入式c++软件开发第四讲笔记
18 0
|
5月前
|
编译器 C语言 C++
嵌入式c++软件开发第二讲笔记
嵌入式c++软件开发第二讲笔记
26 0
|
5月前
|
安全 C++ 容器
嵌入式c++软件开发笔记第三讲
嵌入式c++软件开发笔记第三讲
28 0
|
5月前
|
C语言 C++ iOS开发
嵌入式c++软件开发笔记 第六讲
嵌入式c++软件开发笔记 第六讲
17 0
|
5月前
|
算法 编译器 C++
嵌入式c++软件开发笔记第五讲
嵌入式c++软件开发笔记第五讲
17 0
|
10月前
|
算法 前端开发 机器人
|
存储 网络协议 调度
嵌入式软件工程师笔试题-1(含答案讲解)
预编译又可以叫做预处理,是进行一些代码文本的替代工作
|
敏捷开发 存储 缓存
嵌入式软件工程师面试题(三)
嵌入式软件工程师面试题(三)
221 0
嵌入式软件工程师面试题(三)