自学内容网 自学内容网

嵌入式软件八股文

1.指针的大小是固定的,和指针的类型没有关系

              只与编译器有关,32位系统指针大小为8个字节,x64一般为64位系统,指针大小一般为4个字节。

2.sizeof()和strlen()

sizeof()计算所占内存的大小,可以计算int float大小

strlen()计算的是字符串长度,不会计算字符串末尾添加的'\0';

字符串以'\0'结尾,\0是不需要计算长度的strlen('\0') = 0的, sizeof("\0") = 2

3.c语言内存分配的方式

1.静态存储区分配,定义全局变量,静态变量

2.栈上分配       局部变量定义在栈中

3.堆上分配        动态变量定义在堆中(malloc, new)

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

   union和struct的区别

union联合体:成员共享一块地址

共用体大小 = 成员中占内存最大的成员大小

struct结构体:不同的成员放在不同地址中。

结构体大小 = 所有成员大小之和(字节对齐) 根据编译环境判断是四字节对齐还是八字节对齐

5.宏,写一个宏返回输入参数比较小的一个

#define MIN(a,b)    ((a) > (b) ? (b) : (a))

6.#include <> 和#include“”

<>是在标准库路径搜索,

“”会从用户工作路径搜索,对于自己定义的文件,""会比较快

6.全局变量和局部变量区别

1.作用域,全局变量作用域为程序块,局部变量的作用域是函数内部

2.生命周期:全局变量  ,局部变量生命周期是当前函数

3,存储方式,局部变量存在栈里面,全局变量存在全局数据区中

7.内存泄漏和内存对齐

在程序运行时候,动态分配的空间没有被回收或是正确释放,导致这个内存空间还占用着系统资源,这个就叫内存泄漏

内存对齐:在存储数据时,将数据按照一定的规则放置在内存中的过程

结构体中

8.堆和栈的区别

1.创建方式不同,栈是系统自动创建,(主要用于保存局部变量,函数执行完成,栈被销毁),堆是程序员手动进行创建和释放的,malloc进行创建,free进行释放,

2,栈当使用完后,自动销毁,堆是由程序员手动销毁

9,malloc和new

malloc是c语言标准库函数(分配内存后返回void*)类型指针,使用malloc分配内存时候需要指定分配内存大小,

使用new进行内存分配返回对应对象类型的指针,使用new进行内存分配不需要指定,使用malloc分配内存的时候不会调用构造函数,使用new分配内存的时候会调用构造函数

10.SPI有几根线

spi有四根线, SCLK:时钟线, MOSI:主设备输出,MISO,主设备输入,从设备输出, CS:片选线,        //不需要进行双向通信,MOSI,MISO其中一根线去除   //CS:只进行一对一通信的时候

11.TCP和UDP区别

TCP是可靠连接可靠传输,三次握手        TCP是面向连接的通信方式

UDP是无连接不可靠通信          UDP是不需要连接

UDP比TCP传输速率块,有可能会丢包    UDP:视频,在线游戏,直播

12.SPI和IIC的寻找区别

SPI(4根线,MISO,MOSI,SCLK,CS片选引脚)寻址:CS片选引脚拉低,选择对应的设备进行通信

IIC寻址方式:(SDA,SCL) 通过从机地址来进行寻址(7位,10位从机地址)

13.什么是交叉编译

交叉编译指的是在一个平台上编译出另外一个平台的可执行程序

ARM开发板.c .h不能拷贝ARM开发板,ubuntu使用交叉编译链,.c->可执行程序

14.UART, IIC和SPI区别

UART采用异步通信,没有时钟线,IIC和SPI采用同步通信,有时钟线

IIC起始信号,SDA和SCL是高电平,SDA拉低,SCL再拉低。

IIC停止信号,SDA和SCL是低电平,首先SCL拉高,SDA拉高。

15.僵尸进程,孤儿进程

使用fork()创建子进程后,如果子进程退出,父进程没有调用wait()或者waitpid()回收子进程占用的资源,  需要调用


原文地址:https://blog.csdn.net/m0_62995834/article/details/143524121

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!