羊圈里的小山羊 level
获赞
514
粉丝
124
关注
9
看过 TA
2501
门头沟学院
2025
嵌入式软件工程师
IP属地:云南
暂未填写个人简介
私信
关注
这里我总结一下我的嵌入式的八股文积累,体量比较大,基本都是我秋招面试来遇到的面试真题,什么题都有主要是偏C/C++嵌入式这一块,希望能帮到各位小伙伴和后来的人,希望大家送送花点点赞这个系列大概分为好几期吧,尽快肝出来,大家只要面试前抽个一个小时每次背背,基本上八股部分不会有太大问题我都放在我主页置顶希望小伙伴们捧捧场千万别只点收藏哦urat:两根线无时钟异步全双工i2c:两根线时钟和数据同步半双工可以多主机多从机传输速率100K,400K和3.4M三种速率(bps)SCL和SDA:SCL高电平期间SDA有高变低为起始信号;SCL高电平期间SDA由低变高为终止信号;SCL高电平期间SDC低位0,高为1;iic采用7bit寻址字节,1-7表示从机地址,0位表示传输方向;表示读写每一个字节必须保证是8bit长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随1bit的应答位,每一帧数据有九位通行流程:1. 启动信号:主设备发送起始信号,通过拉低SDA线,同时SCL线保持高电平。2. 地址发送:主设备发送目标从设备的地址及读/写位。地址后,目标从设备应应答。3. 数据传输:主设备或从设备根据读/写位进行数据传输。每传输一字节后,接收方应发应答位。4. 停止信号:完成数据传输后,主设备发送停止信号,释放SDA线,SCL线保持高电平。- ACK:表示“我已收到,继续发送”。- NACK:表示“我未收到或我已完成,不要再发送了”。spi:四线制或者三线制时钟 、ss、miso、mosi同步全双工有发必有会回spi传输速率 :可以达到50Mbps一主多从计算数组长度:通过sizeof(),数组长度除以数组第一个元素的长度c通过strlen()函数, c++通过.size()数组和链表的区别:数组和链表是两种不同的**数据存储**方式数组是一组具有相同数据类型的变量集合链表是一个中物理存储单元上不连续的存储结构,各个元素的逻辑顺序通过链表中的指针链接实现数组:(1)数组在内存中连续; (2)使用数组之前,必须事先固定数组长度,不支持动态改变数组大小;(3) 数组元素增加时,有可能会数组越界;(4) 数组元素减少时,会造成内存浪费;(5)数组增删时需要移动其它元素。数组从栈上分配内存,使用方便,但是自由度小。数组在内存中顺序存储,可通过下标访问,访问效率高。数组的大小是固定的,所以存在访问越界的风险。数组的存储空间是栈上分配的,存储密度大,当要求存储的大小变化不大时,且可以事先确定大小,宜采用数组存储数据。数组的存储空间是栈上分配的,存储密度大,当要求存储的大小变化不大时,且可以事先确定大小,宜采用数组存储数据。链表:(1)链表采用动态内存分配的方式,在内存中不连续 (2)支持动态增加或者删除元素 (3)需要时可以使用malloc或者new来申请内存,不用时使用free或者delete来释放内存。链表从堆上分配内存,自由度大,但是要注意内存泄漏。链表从堆上分配内存,自由度大,但是要注意内存泄漏。链表访问效率低,如果想要访问某个元素,需要从头遍历。只要可以申请得到链表空间,链表就无越界风险。链表的存储空间是堆上动态申请的,当要求存储的长度变化较大时,且事先无法估量数据规模,宜采用链表存储。链表插入、删除效率高,当线性表要求频繁插入和删除时,宜采用链表结构。vector和list的区别+应用:Vector:连续存储的容器,动态数组,在堆上分配空间底层实现:数组性能:适用场景:经常随机访问,且不经常对非尾节点进行插入删除,因为尾节点插入涉及空间问题List:动态链表,在堆上分配空间,每插入一个元数都会分配空间,每删除一个元素都会释放空间。底层:双向链表性能:访问:随机访问性能很差,只能快速访问头尾节点插入:很快删除:很快vector拥有一段连续的内存空间,因此支持随机访问,如果需要高效的随即访问,而不在乎插入和删除的效率,使用vector。list拥有一段不连续的内存空间,如果需要高效的插入和删除,而不关心随机访问,则应使用list。进程和线程的区别:进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段也因为进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响线程:进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以(IPC)进行。线程只是一个进程中的不同执行路径。一个线程死掉就等于整个进程死掉。在通信机制上:进程的通信机制**相对很复杂,譬如管道,信号,消息队列,共享内存,套接字等通信机制,而线程由于共享数据段所以通信机制很方便线程通信主要可以分为三种方式,分别为共享内存、消息传递和管道流1.管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。(同步互斥机制)2.命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。管道的实质是一个内核缓冲区,进程以先进先出的方式从缓冲区存取数据:管道一端的进程顺序地将进程数据写入缓冲区,另一端的进程则顺序地读取数据,该缓冲区可以看做一个循环队列3.消息队列MessageQueue:消息队列就是一个消息的链表,是一系列保存在内核中消息的列表。用户进程可以向消息队列添加消息,也可以向消息队列读取消息。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。4.共享内存SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,共享内存允许两个或多个进程共享一个给定的存储区。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。5.信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。6.套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。基于网路型,基于文件型7.信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
0 点赞 评论 收藏
分享
牛客十周岁生日快乐
0 点赞 评论 收藏
分享
时间线:9.17投递--9.18测评--9.19笔试--9.24一面(电话)--9.26二面一面面经链接(尾部)二面面经:面试官迟到了十几分钟吧,不过人还可以没啥问题,不开摄像头针对简历项目展开:先是一部分软件测试相关的内容(我的部分实习)(不算重要)介绍一个你开发经历中的难点针对c++编程:中断处理的过程和中断函数需要有什么考量处理过程:1、外设或内部事件(如定时器、IO设备完成等)会产生中断请求信号,通知CPU需要处理。2、CPU在执行完当前指令后,检查中断标志。如果有中断请求,CPU会停止当前执行的任务,并保存相关的上下文信息(如程序计数器、寄存器状态等)。3.CPU根据中断请求的类型查找中断向量表,获取对应的中断处理程序(中断服务例程,ISR)的地址。4.CPU跳转到ISR的地址,开始执行中断处理代码。ISR中通常包括对外设的状态检查、数据读写、标志位设置等操作。5.ISR执行完毕后,CPU会恢复之前保存的上下文信息,继续执行被中断的任务。考量:中断处理的及时性、现场保护(上下文保存和恢复)、中断优先级和嵌套问题等场景代码题,两个线程一个打印a一个打印b,ab交替打印出来,讲一下锁的机制如何设计(主要是信号量和互斥锁)临界资源保护临界资源保护和机制互斥锁、信号量。读写锁、自旋锁、条件变量全局变量需要加锁吗函数中的变量需要加锁吗malloc开辟的变量需要加锁吗二面面试市场20分钟左右,属于比较快的  大华嵌入式软件开发_牛客网 https://www.nowcoder.com/share/jump/1727339917257
0 点赞 评论 收藏
分享
大概20分钟多的电话面电话面试主要是针对简历项目和实习经历追问主要分为:c语言,c++,rtos和linux的内容c语言问的几个内置函数:我这连同其他的整理了一下:strcpy() 函数用来复制字符串;strncpy()用来复制字符串的前n个字符,所以要多传一个参数nchar *strcpy(char *dest, const char *src);char * strncpy(char *dest, const char *src, size_t n);char *strcpy(char *dest, const char *src)把 src 所指向的字符串复制到 dest。**strncmp的功能是:**用来比较指定长度两个字符串的大小*int strncmp(const char* str1, const char str2, size_t num)strcmp与strncmp都是用来比较字符串的,区别在于能否比较**指定长度**字符串,故要多传一个长度参数,这也使得strncmp比strcmp更加精细。int memcmp(const void *str1, const void *str2, size_t n)把 *str1* 和 *str2* 的前 n 个字节进行比较。void *memcpy(void *dest, const void *src, size_t n)从 src 复制 n 个字符到 *dest*。char *strcat(char *dest, const char *src)把 *src* 所指向的字符串追加到 *dest* 所指向的字符串的结尾。c语言内存分区static关键字内存对齐c++:深浅拷贝new和malloc堆栈的区别rtos和linux主要问了调度机制gdb调试的指令怎么创建一个进程makelfile文件预编译是干嘛的网络编程的知识
通信硬件人笔面经互助
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务