【秋招】嵌入式面试八股文-RTOS、Linux、网络通信篇

本文为 第三章 RTOS 部分、第四章Linux驱动部分、第五章网络通信部分,具体整篇目录可以看前言!

【秋招】嵌入式面试八股文分享

第一部分(纯八股)

3. RTOS

3.1 内存管理

3.1.1 关于heap_1.c

        它只实现了 pvPortMalloc,没有实现 vPortFree。 如果你的程序不需要删除内核对象,那么可以使用 heap_1。FreeRTOS 在创建任务时,需要 2 个内核对象:task control block(TCB)、stack。(TCB任务控制块和栈)。

3.2 RTOS移植与中断管理

1、修改sys.h文件,让它支持OS。

2、修改usart文件,更改中断。在uC/OS的时候,进入和退出中断需要添加OSIntEnter()和OSIntExit()两个函数,然后在FreeRTOS中并没有该机制,所以将这里的代码删除。

3、关于delay函数的修改,FreeRTOS中使用SysTick作为作为操作系统的心跳,所以需要将xPortSysTickHandler()添加,作为系统始终中断。

4、delay_init() 用于初始化SysTick,主要修改SysTick的重装载值,修改delay_ms和delay_us函数。

5、修改中断(SysTick中断、SVC中断、PendSV中断)。其中SysTick中断在delay.c文件中已经定义。

3.3 Systick中断和PendSV中断

       在Cortex-M内核上,FreeRTOS使用Systick定时器作为心跳时钟,一般默认心跳时钟为1ms,进入Systick中断后,内核会进入处理模式进行处理,在Systick中断处理中,系统会在 ReadList 就绪链表从高优先级到低优先找需要执行的任务,进行调度,如果有任务的状态发生了变化,改变了状态链表,就会产生一个pendSV异常,进入pendSV异常,通过改变进程栈指针(PSP)切换到不同的任务。

       对于相同优先级的任务,每隔一个Systick,运行过的任务被自动排放至该优先级链表的尾部(时间片调度)。

3.4 任务管理

       vTaskDelay()为相对延时函数,可以让任务进入阻塞状态。    

空闲任务

       FreeRTOS程序在任意时刻,必须至少有一个任务处于运行状态,为了达到这个要求,FreeRTOS使用了Idle任务:当vTaskStartScheduler调用后,调度器会自动创建Idle任务,这个任务的任务函数就是一个连续性工作的任务,所以他总是可以处于就绪态(在运行态和就绪态之间转换,没有其他状态)。由于Idle任务的优先级是最低的(优先级为0),所以Idle任务不会抢占用户任务的运行。当其他高优先级的任务需要运行时,他们会抢占Idle任务。

       Idle任务主要用于资源回收清理工作,例如当你在程序中删除一个任务后,就需要Idle任务去清理这个任务占用的资源。因此,不要让Idle任务“饿死”,具体而言,不要创建一个优先级比Idle任务优先级高,且连续性工作的任务。如果应用程序也需要一个在背后连续工作的任务,则应该设置其优先级和Idle任务相同。当然这个需求更好的实现方法是通过下面介绍的Idle钩子来完成。

4. Linux驱动

4.1 Linux系统移植流程

4.2 程序编译过程

5. 网络通信

5.1 三次握手

1、首先 Client 端发送连接请求报文

2、Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。

3、Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了。

5.2 四次挥手

1、第一次挥手:Clien发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

2、第二次挥手:Server收到FIN后,发送一个ACK给Client, Server进入CLOSE_WAIT状态。

3、第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

4、第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成四次挥手。

5.3 Linux下TCP的程序构建流程

5.4 TCP与UDP的区别

1、TCP面向连接,通过三次握手建立连接,四次挥手接除连接;UDP是无连接的,即发送数据之前不需要建立连接,这种方式为UDP带来了高效的传输效率,但也导致无法确保数据的发送成功。

2、TCP是可靠的通信方式。通过TCP连接传送的数据,TCP通过超时重传、 数据校验等方式来确保数据无差错,不丢失,不重复,且按序到达;而UDP由于无需连接的原因,将会以最大速度进行传输,但不保证可靠交付,也就是会出现丢失、重复等等问题。

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,由于连接的问题,当网络出现波动时,连接可能出现响应问题;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。

4、每一条TCP连接只能是点到点的;而UDP不建立连接,所以可以支持一对一,一对多,多对一和多对多的交互通信,也就是可以同时接受多个人的包。

5、TCP需要建立连接,首部开销20字节相比8个字节的UDP显得比较大。

6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

#嵌入式##嵌入式笔面经分享##秋招#

我打算把自己整理的八股文笔记、面试经验、项目经验、简历修改经验等等,分享给大家。之前准备找工作那会,很多付费的东西,质量参差不齐,我打算在牛客创建一个免费的专栏,分享整理的这些内容,今天这个是第一篇文章,对于找工作的人提供一份帮助就行。

全部评论

相关推荐

8.17投递 岗位叫BSP工程师-SOC方向8.30笔试:一共九道题,有八股文简答题,有编程题和逻辑题。八股文包括:指针各种定义,进程线程,死锁,volatile;编程:冒泡,判断素数,指定位置翻转链表;逻辑题:经典的真话假话判断。后续,邮件通知笔试通过,进入面试,一面9.4:1. 自我介绍2. static关键字(存的地方搞错了,说了跟全局一样但是记不清了,有扯皮全局变量存在data、bss段)3. Linux用过吗4. 锁的应用5. 内存分配函数,kmalloc和vmalloc,地址连续吗(vmalloc大内存分配,虚拟地址连续,比较慢,同样不初始化)(kmalloc物理也连续,vmalloc物理不连续,两者虚拟均连续)6. FreeRTOS相关,具体用了什么,如何调度7. 抢占,具体如何调度8. 通讯协议,例如I2C,SPI等,原理是否了解9. TCP、HTTP是否熟悉(没有具体问)10. Linux内核裁剪11. v4l2使用12. 面了多少家(还聊了聊,我说被挂了,还在安慰我说估计是方向不匹配)13. 对公司概况的了解,详细介绍了部门任务14. 经典反问(经典三面,大概1-3周)总体体验异常良好,非常和蔼的面试官,通讯那边还尝试挖坑线数问题最后我没跳进去……期待二面,业务是经典的SOC相关的驱动,自己也比较感兴趣#秋招##通信硬件人笔面经互助##嵌入式##思特威#
点赞 评论 收藏
分享
2 12 评论
分享
牛客网
牛客企业服务