嵌入式软件开发工程师面试问题---2

1.多线程同步的方式

对于多线程程序来说,同步是指在一定的时间内只允许某一个线程来访问某个资源。而在此时间内,不允许其他的线程访问该资源。可以通过互斥锁(Mutex)、条件变量(condition variable)、读写锁(reader-writer lock)、信号量(semaphore)来同步资源。

参考博文:多线程同步的四种方式(史上最详细+用例) - Chilk - 博客园

2.TCP的连接过程

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

三次握手过程如下:client是发送端,sever是服务端。

发送端->接收端:发送标有SYN(建立连接)的数据包。 客户端进入发送状态 

接收端->发送端:发送标有SYN,ACK(应答)的数据包 。 服务端进入接收状态。

发送端->接收端:发送标有ACK的数据包。客户端和服务端进入通信状态ESTABLISHED。

3.结构体和联合体的区别

//example
#include<stdio.h>
union var{
        long int l;
        int i;
};
main(){
        union var v;
        v.l = 5;
        printf("v.l is %d\n",v.i);
        v.i = 6;
        printf("now v.l is %ld! the address is %p\n",v.l,&v.l);
        printf("now v.i is %d! the address is %p\n",v.i,&v.i);
}
结果:
v.l is 5
now v.l is 6! the address is 0xbfad1e2c
now v.i is 6! the address is 0xbfad1e2c
4.字节对齐 #pragma pack(1)

struct stc
{
    char one;
    short two;
    char three;
    int four;
} cc;
#pragma pack (1)
struct stcd
{
    char one;
    short two;
    char three;
    int four;
} dd;
sizeof(cc) = 12
sizeof(dd) = 8
5.中断的运行方式?

6.中断向量表存储的位置

7.单片机的启动方式

8.IIC上拉电阻的作用

主要原因就是IIC芯片的SDA和SCL的引脚是开漏输出,就是只有一个NMOS管, 芯片SDA和SCL的引脚输出MOS管导通,IIC信号线电平为低电平。当MOS管关闭,如果没有上拉电阻,IIC信号线是处于一个高阻状态,电平是未知的,开漏输出是没有高电平的输出能力的。 所以加上上拉电阻后,当芯片SDA和SCL的引脚输出MOS管关闭,IIC信号线上的电平就是一个确切的高电平。确保数据的稳定。IIC最重要的就是时序,如果时序存在问题的话,会导致数据传输存在问题。

9.全局变量存储位置、静态变量存储位置

全局变量存储在静态存储区,也就是程序的全局数据区或者称为全局内存。 static 修饰局部变量时,该变量称为静态局部变量,静态局部变量的存储空间在静态存储区。

10.堆、栈、列表、哈希表的区别?
  • 堆:用于动态内存分配,生命周期由程序员控制,分配和释放较慢。

  • 栈:用于函数调用和局部变量管理,自动分配和释放,速度快。

  • 列表:有序集合的数据结构,可以是数组列表或链表,支持不同的操作性能。

  • 哈希表:用于快速的键值对存储和查找,依赖于哈希函数和冲突处理策略,具有高效的平均时间复杂度。

11.STM32内部结构

此图参考其他博客。

12.推挽输出和开漏输出的区别?

推挽输出(Push-Pull Output),故名思意能输出两种电平,一种是推(拉电流,输出高电平),一种是挽(灌电流,输出低电平)。推挽输出可以使用一对开关来实现,在芯片中一般使用晶体管 / 场效应管。

13.Linux指令提问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值