第一章进程线程的基本概念

1、什么是进程,线程,有什么区别

2、多进程、多线程的优缺点

3、什么时候用进程,什么时候用线程

4、多进程、多线程同步(通讯)的方法

5、进程线程的状态转换图 。什么时候阻塞,什么时候就绪

6、父进程、子进程的关系以及区别

7、什么是进程上下文、中断上下文

8、一个进程可以创建多少线程,和什么有关

9、进程间通讯:

(1)管道/无名管道(2)信号(3)共享内存(4)消息队列(5)信号量(6)socket

10、线程通讯(锁):

(1)信号量(2)读写锁(3)条件变量(4)互斥锁(5)自旋锁

第二章C/C++面试题

1、new和malloc的区别

2、 malloc的底层实现

3、在1G内存的计算机中能否malloc(1.2G)?为什么?

4、指针与引用的相同和区别;如何相互转换?

5、C语言检索内存情况,内存分配的方式

6 、extern”C” 的作用

7、头文件声明时加extern定义时不要加,因为extern可以多次声明,但只有一个定义

8、重写memcpy()函数需要注意哪些问题,(strcat    strncat    strcmp   strcpy)哪些函数会导致内存溢出

9、 char和int之间的转换;

10 、static的用法(定义和用途)static静态变量,只初始化一次

11 、const的用法(定义和用途)

12、const常量和#define的区别(编译阶段、安全性、内存占用等)

13 、volatile作用和用法

14、有常量指针 指针常量 常量引用 没有 引用常量

15、变量的作用域(全局变量和局部变量)

16、sizeof 与strlen (字符串,数组)

17、经典的sizeof(struct)和内存对齐(一字节对齐)

18、const  *  char  与 const    char    *

19、inline函数

20、内存四区,什么变量分别存储在什么区域,堆上还是栈上。

第三章网络编程

1 、TCP、UDP的区别

2 、TCP、UDP的优缺点

3 、TCP UDP适用场景

4、 TCP为什么是可靠连接

5、OSI典型网络模型,简单说说有哪些;

6、三次握手、四次挥手

第四章常见算法

1、各种排序算法的时间空间复杂度、稳定性

2、各种排序算法什么时候有最好情况、最坏情况(尤其是快排)

3、冒泡排序

4、选择排序

5、插入排序

6、希尔排序

7、归并排序

8、快速排序

9、二分法查找的原理

第五章Linux操作系统常见面试题

1、 Linux内核的组成部分

2、用户空间与内核通信方式有哪些?

3、系统调用read()/write(),内核具体做了哪些事情

4、系统调用与普通函数调用的区别

5、内核态,用户态的区别

6、 bootloader内核 、根文件的关系

7 、Bootloader启动过程:

8、 linux下检查内存状态的命令

1、大小端的区别以及各自的优点,哪种时候用。(判断大小端的三种方式)

2 、一个程序从开始运行到结束的完整过程(四个过程)

3、什么是堆,栈,内存泄漏和内存溢出?

4、堆和栈的区别

5、死锁的原因、条件

6、硬链接与软链接的区别;

7、虚拟内存,虚拟地址与物理地址的转换

8、计算机中,32bit与64bit有什么区别

9、中断和异常的区别

10、中断怎么发生,中断处理流程

11、 Linux 操作系统挂起、休眠、关机相关命令

12、编译优化选项    -o

13、在有数据cache情况下,DMA数据链路为:外设-DMA-DDR-cache-CPU,CPU需要对cache做什么操作,才可以得到数据

14、linux中改变文件属性的命令:chmod

15、linux中查找文件中匹配字符串的命令:grep

第六章 单片机常见面试题

1、ROM与RAM

2、 IO口工作方式:上拉输入 下拉输入 推挽输出 开漏输出

3、请说明总线接口USRT、I2C、USB的异同点(串/并、速度、全/半双工、总线拓扑等)

4、I2C协议时序图

5、单片机的SP指针始终指向:栈顶

6、I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

7、FIQ中断向量入口地址

8、全双工总线类型

9、SPI四种模式,简述其中一种模式,画出时序图

 第七章 其他面试题

1、讲一讲冯诺依曼和哈佛体系的区别

2、讲一讲二叉树和红黑树

3、http默认端口号:80

4、面向对象编程的三大特性,以及重载的意思。重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

5、linux中mysql数据库默认的端口是:3306

6、反转链表的代码补全

7、判断回文(首尾相同)

输入abcba      返回true

输入abc          返回flase

8、C语言编程中,单片机平台,一般有.c和.h文件,如果一个人在.h文件中定义了一个变量,会有什么后果。(讨论编程习惯的问题,我一般是只在.h文件中声明函数,不会做变量定义;另外,编程中每一个模块都会有对应的.c和.h文件,最终的总程序自己定义一个comm.c和comm.h去调用各个模块,这样的习惯我觉得还行)

9、if语句中如果是或运算( | ),第一个条件满足时,第二个条件还会判断吗。或运算的话,当然不会,因为 0|1=1,中断了

10、IIC、SPI、UART通信协议的作用和区别,以及为什么用这个不用另外一个进行通信

三、经典面试题

1.嵌入式系统中经常要用到无限循环,如何用C编写死循环?

while(1){}或者for(;;)

2.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里?

程序的局部变量存在于栈区;全局变量存在于静态区;动态申请数据存在于堆区

3.关键字const有什么含义?

1)只读。

2)使用关键字const也许能产生更紧凑的代码。

3)使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改

4.请问以下代码有什么问题?

int main() {

char a;

char *str=&a;

strcpy(str,"hello");

printf(str);

return 0;

}

没有为str分配内存空间,将会发生异常,问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃

5.已知一个数组table,用一个宏定义,求出数据的元素个数?

#define NTBL (sizeof(table)/sizeof(table[0]))

6.写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个?

#define MIN(A,B) ((A) <= (B) ? (A) : (B))

考点:

1) 标识#define在宏中应用的基本知识。这是很重要的。因为在 嵌入(inline)操作符 变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。

2) 三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优的代码,了解这个用法是很重要的。

3) 懂得在宏中小心地把参数用括号括起来

7.do……while和while有什么区别?

前一个循环一遍再判断,后一个判断以后再循环

8.什么是预编译,何时需要预编译?

1、总是使用不经常改动的大型代码体。

2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。

预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置

9.一个32位的机器,该机器的指针是多少位?

指针是多少位只要看地址总线的位数就行了。80386以后的机子都是32的数据总线。所以指针的位数就是4个字节了

10.局部变量能否和全局变量重名?

能,局部会屏蔽全局。

局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内

11.引用与指针有什么区别?

1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引用,但是存在指向空值的指针

12.关键字static的作用是什么?

在C语言中,关键字static有三个明显的作用:

1) 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

13.static全局变量与普通的全局变量有什么区别?static函数与普通函数有什么区别?

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。

这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。

对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

14.进程之间通信的途径有哪些?

进程间通信主要通过管道、消息、信号等途径进行。

1、无名管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。

2、高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式我们成为高级管道方式。

3、有名管道 (named pipe) :有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。

4、消息队列( message queue ) :消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5、信号量( semophore ) :信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

6、信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

7、共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。

8、套接字( socket ) :套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

15.产生死锁的原因是什么?

多个并发进程因争夺系统资源而产生相互等待的现象。即:一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。

产生死锁的本质原因为:

1)、系统资源有限。

2)、进程推进顺序不合理。

16.死锁的4个必要条件?

1、互斥:某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。

2、占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。

3、不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来。

4、循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。

当以上四个条件均满足,必然会造成死锁,发生死锁的进程无法进行下去,它们所持有的资源也无法释放。这样会导致CPU的吞吐量下降。所以死锁情况是会浪费系统资源和影响计算机的使用性能的。那么,解决死锁问题就是相当有必要的了。

17.死锁的处理方式有哪些?

死锁的处理方式主要从预防死锁、避免死锁、检测与解除死锁这四个方面来进行处理。

预防死锁:

1、资源一次性分配:(破坏请求和保持条件)

2、可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)

3、资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

避免死锁:

预防死锁的几种策略,会严重地损害系统性能。因此在避免死锁时,要施加较弱的限制,从而获得 较满意的系统性能。由于在避免死锁的策略中,允许进程动态地申请资源。因而,系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。

检测死锁:

首先为每个进程和每个资源指定一个唯一的号码;

然后建立资源分配表和进程等待表

解除死锁:

当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:

1、剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;

2、撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。

18.进程和线程有什么区别?

进程是并发执行的程序在执行过程中分配和管理资源的基本单位。线程是进程的一个执行单元,是比进程还要小的独立运行的基本单位。一个程序至少有一个进程,一个进程至少有一个线程。两者的区别主要有以下几个方面:

1. 进程是资源分配的最小单位。

2. 线程是程序执行的最小单位,也是处理器调度的基本单位,但进程不是,两者均可并发执行。

3. 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据,使用相同的地址空间,因此,CPU切换一个线程的花费远比进程小很多,同时创建一个线程的开销也比进程小很多。

4. 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也跟着死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

5. 进程切换时,消耗的资源大,效率低。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

6. 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

优缺点:

线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。

进程执行开销大,但是能够很好的进行资源管理和保护,可以跨机器迁移。

何时使用多进程,何时使用多线程?

对资源的管理和保护要求高,不限制开销和效率时,使用多进程。

要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。

19. 线程是否具有相同的堆栈?

真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。

每个线程有自己的堆栈。

20.TCP与UDP有啥区别?

TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于广播和细节控制交给应用的通信传输,两者主要的不同体现在一下几个方面:

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。它通过校验和,丢包时的重传控制,序号标识,滑动窗口、确认应答,次序乱掉的分包进行顺序控制实现可靠传输。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达; UDP尽最大努力交付,即不保证可靠交付。

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高要求的通信或广播通信场景。

4、每一条TCP连接只能是点到点的; UDP支持一对一,一对多,多对一和多对多的交互通信方式。

5、TCP对系统资源要求较多,UDP对系统资源要求较少。

UDP有时比TCP更有优势:

UDP以其简单、传输快的优势,在越来越多场景下取代了TCP, 如实时游戏。

(1)网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。

(2)TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP在内置的系统协议栈中,极难对其进行改进。

采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大。

基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题造成的影响。

部分非标准答案。。。仅供参考

1. 讲⼀下stm32的时钟系统

时钟在MCU中的作⽤,就好⽐于⼈类的⼼脏⼀样不可或缺。STM32有多个时钟源可以使⽤。因为STM32拥有丰富的外设资源,不同外设使⽤的时钟也会不⼀样,同时我们要知道时钟越快,功耗就越⼤,抗电磁⼲扰的能⼒就会减弱,因此,⽐较复杂的MCU 都会采⽤多时钟来解决这些问题。

STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。

①、HSI是⾼速内部时钟,RC振荡器,频率为16MHz,精度不⾼。可以直接作为系统时钟或者⽤作PLL时钟输⼊。

②、HSE是⾼速外部时钟,可接⽯英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。

③、LSI是低速内部时钟,RC振荡器,频率为32kHz,提供低功耗时钟。主要供独⽴看门狗和⾃动唤醒单元使⽤。

④、LSE是低速外部时钟,接频率为32.768kHz的⽯英晶体。作为RTC时钟;

⑤、PLL为锁相环倍频输出。提供2-16倍的倍频输出。

2. C语⾔中堆和栈的区别;推挽输出是什么?

C语⾔中堆和栈的区别:

1. 申请⽅式

栈(satck):由系统⾃动分配。

堆(heap):需程序员⾃⼰申请和释放。

// 待补充

32单⽚机IO⼝8种状态的理解

1、浮空输⼊,据我的理解,就是不接上拉,也不接下拉,外部电路是什么状态,就是什么状态,具有不确定性。

2、上拉输⼊,就是配置好IO⼝后,默认与VDD相连的开关闭合,读状态默认⾼电平,外部有低电平才拉低。

3、下拉输⼊,与上拉输⼊⼀个意思。

4、模拟输⼊,这个我没⽤到,也不太理解,套⽤⼀下前辈的话:模拟输⼊是指传统⽅式的输⼊,数字输⼊是输⼊PCM数字信号,即0,1的⼆进制数字信号,通过数模转换,转换成模拟信号,经前级放⼤进⼊功率放⼤器,功率放⼤器还是模拟的。

5、开漏输出:据我的理解就是要加上拉电阻,才能拿到低电平,(nmos管为0时,才接通),外部的上拉电阻的⾼电平拉到了Gnd,默认输出⾼电平。

6、推挽输出:配置后,输出1,PMOS管接通,外输出⾼点平,输出0,NMOS管接通,外输出低电平,输出1.

7、推挽复⽤输出

8、开漏复⽤输出

复⽤功能就是外设的配置。

引⽤CSDN博主「持续学习中」的原创⽂章:

3. 假如⼀个单⽚机上电之后不运⾏?这是为什么?

1、检查供电:直接⽤万⽤表测量VCC和GND的电平,是否符合要求。如果VCC偏离5V或3.3V过多,检查7805或其他稳压、滤波电路的输出。

2、检查晶振:⼀般是多换⼏个晶振上电试试。

3、检查RESET引脚电平逻辑,注意所⽤机型是⾼电平复位还是低电平复位的,防⽌MCU⼀直处于反复被复位状态。

4、如果设计时,程序是从扩展的外部ROM开始运⾏的,还需检查EA脚。

5、检查MCU是否损坏或flash⽆法下载,最好换块新的芯⽚试试。

6、如果测试程序运⾏正常。那就基本确定是控制程序的问题了。

个⼈经验:⾸先检查MCU供电是否正常,再判断擦除和烧录是否正常,再判断控制程序是否正常,⼀般情况下3、4不会出现,对于

STM32来说可以换内部晶振来排除2。

4. 举你⽤过的单⽚机的型号和它的⼀些主要参数

STM32F103VCT6

内核

-ARM 32位 Cortex - M 3处理器

-⾼达72 MHz

内存

-256 KB 的 Flash

-48 KB 的 SRAM

3个12位AD,外部通道16个,内部通道2个

7个通道DMA

8个定时器

12个通信接⼝

-2个 I 2 C 接⼝

-5 个 UART

-3 个 SPI

-1 个 USB

-1 个 CAN

内置 CRC 计算单元,和96位唯⼀的 ID 号

具体请参考数据⼿册。

5. ⼀个温度传感器模块,按照正确的使⽤⽅式和参数指标,对⼈体⽪肤测量之后,得到的温度⼀直都是35摄⽒度,这是为什么?

猜⼀个:因为该温度传感模块测出的温度为表⾯温度,⽽实际上表⾯温度和实际体温是有差距的。

6.考⼀些结构体、联合体、sizeof⽅⾯的知识

10.485有⼏根线

RS485总线通信的⼀般是两根线,多出的⼀根是公共线,也就是地线G【长距离电缆中的屏蔽层】抑制⼲扰⽤的必需接!总共要接三根,⼀般测试时可以不⽤接。

11.串⼝和并⼝有什么区别

并⾏接⼝是指数据的各位同时进⾏传送,其特点是传输速度快,但当传输距离较远、位数⼜多时,导致了通信线路复杂且成本提⾼;

串⾏接⼝是指数据⼀位位地顺序传送,其特点是通信线路简单,只要⼀对传输线就可以实现双向通信,并可以利⽤电话线,从⽽⼤⼤降低了成本,特别适⽤于远距离通信,但传送速度较慢;

14.局部变量和全局变量分别存放在哪⾥?

C语⾔中局部变量存在栈⾥,全局变量存静态存储区。

15.c语⾔头⽂件的⼯作原理

引⽤头⽂件相当于复制头⽂件的内容,但是我们不会直接在源⽂件中复制头⽂件的内容,因为这么做很容易出错,特别在程序是由多个源⽂件组成的时候。

16.精度和分辨率有什么区别

1、精度是接近真实值的程度, 即绝对误差或相对误差的⼤⼩.精度做到0.01%极其难

2、分辩率是量化刻度的细度⼤⼩。

分辩率⾼是精度⾼的必要条件,不是充分条件;分辩率⾼不等于精度⾼. 认定精度才是王道。

嵌入式软件工程师面试题目整理(一)

Arm有多少32位寄存器?

Arm2440和6410有什么区别

CPU,MPU,MCU,SOC,SOPC联系与差别

上拉&下拉&高阻态

串口协议讲一讲

RS232和RS485通讯接口有什么区别

IIC时序图画一下,IIC有哪些状态,给一个字节,将它发送出去。IIC有什么注意事项?有没有用I/O模拟IIC,如果有需要注意什么?

为什么2440的内存起始地址是3后面7个0呢?为什么6410的内存起始地址是5后面7个0呢?

内存管理有什么看法?(MMU)

锁有哪些?有什么注意事项

信号量和自旋锁区别

中断能不能睡眠,为什么?下半部能不能睡眠?

上下文有哪些?怎么理解?

死锁产生的原因及四个必要条件

触摸屏中断做了什么,LCD中断做了什么?

什么是交叉编译?为什么需要交叉编译?为什么还要主机编译

简述linux系统启动过程

Linux设备中字符设备和块设备有什么主要区别?分别举例。

同步通信和异步通信

Uart和IIC和SPI的区别(提示:关于异步和同步,电子器件上的)?

用串口发送十个字节就丢失一个两个你会怎样检查;发送的时候对方设备不响应你该怎么办

内核链表为什么具有通用性?

分配内存哪些函数?kmalloc有两个参数,各个作用是什么?

有哪些锁,各自的效率问题?自选锁怎样实现的?

Linux内核硬中断 / 软中断的原理和实现

8、请问你对c语言的指针熟悉吗?

19、const 这个东西 你来解释一下

20、讲一下can

21、什么是spi?

22、iic熟悉吗?

23、你会用Linux吗?

24、你有没有写过状态机?

25、你来说一下中断的处理流程是什么样子的?

  1. 你用过什么传感器

1、PPT介绍

2、项目负责哪些软件工作

3、32单片机用过哪些外设

4、IIC通信协议

5、IIC开始通信是由谁发起的

6、IIC协议主设备可以挂载多少个从设备

7、IIC主设备发起通信,如何知道哪个从设备需要通信

8、应答信号是哪个地方发送的

9、IIC驱动是否自己写的

10、编译器用的什么

11、代码量

12、调试器用的什么

13、烧写器用的什么

14、烧录的是什么类型的文件

15、程序编译步骤

16、MCU的中断了解吗

17、看门狗了解吗

18、程序是如何组织的

19、ADC用的多少位的,如何计算采集的真实电压值,基准电压是多少?

20、参加的组织性活动还是技术性活动多

21、竞赛过程,自己的意见和其他人不同时,如何处理

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐