一、关键字static,const,volatile有什么含义?在什么情况下应该用volatile?
1.static的含义:
①在函数体中,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
②在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
③在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
2.const的含义:
①const意味着“只读”,不应该被改变。
②const函数修饰指针
③const 通常用在函数形参中,如果形参是一个指针,为了防止在函数内部修改指针指向的数据,就可以用 const 来限制
④const是通过编译器在编译的时候执行检查来确保实现的。
举例:
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。
3.volatile的含义
①并行设备的硬件寄存器(如:状态寄存器)
②一个中断服务子程序中会访问到的非自动变量。
③多线程应用中被几个任务共享的变量
在以下场景中经常使用volatile:
①中断服务程序中修改的供其它程序检测的变量需要加volatile;
②多任务环境下各任务间共享的标志应该加volatile;
③存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;
二、嵌入式系统总是要用户对变量或寄存器进行复位操作,给定一个整型变量a,写三段代码,第一个设置a的bit3,第二个清除a的bit3,第三个取反a的bit7.
#define BIT3 (0x01 << 3)
static int a;
void set_bit3(void) {
a |= BIT3;
}
void clear_bit3(void) {
a &= ~BIT3;
}
三、IIC的上拉电阻作用,以及简单描述IIC和SPI协议?
作用:将总线线路维持在逻辑高电平状态
IIC协议:
1.概念
I2C( Inter-Integrated Circuit)总线协议是一种串行数据传输协议,用于在集成电路之间进行短距离、低速度的数据通信。 I2C 总线具有两根线:时钟线(SCL)和数据线(SDA)。
2.特点
①多主从结构: I2C 总线协议支持多个主设备(如微控制器)和多个从设备(如传感器、存储器)共用一条总线。
②硬件简单: I2C 总线只需要两根线即可完成通信,在硬件实现上比较简单。
③传输速率慢: I2C 总线的传输速率较慢,最高速率只有 400Kbps。
3.工作过程
①起始条件( Start Condition):主设备向总线上发送一个低电平脉冲信号,表示开始一个新的数据传输。
②地址传输:主设备发送从设备的地址和读/写标志位,通知从设备它需要进行读或写操作。
③数据传输:主设备和从设备之间传输数据。由主设备产生时钟信号和数据信号,从设备根据时钟信号接收或发送数据。
④停止条件(Stop Condition):主设备向总线上发送一个高电平脉冲信号,表示数据传输完成。
SPI协议:
1.概念:
SPI(Serial Peripheral Interface)总线协议是一种同步全双工的串行通信协议,用于在集成电路之间进行数据传输。 SPI 总线通常由一个主设备和多个从设备组成,每个从设备都有一个单独的片选信号。
2.特点
①高速传输: SPI 总线具有高速传输的特点,通信速率可达几十 MHz。
②硬件简单: SPI 总线只需要少量线路即可完成通信,可以通过硬件实现。
③可靠性高: SPI 总线采用同步传输方式,数据传输可靠。
3.工作过程
①起始条件( Chip Select):主设备通过片选信号( Chip Select)选择从设备,并发送低电平信号,表示开始数据传输。
②传输方式:主设备和从设备之间使用 MOSI和 MISO 两根线传输数据。主设备通过 MOSI发送数据,从设备通过 MISO 接收数据。
③时钟信号:主设备通过 SCLK 时钟信号控制数据传输速率,同时从设备也按照同样的时钟频率来接收数据。
④数据长度: SPI 总线没有固定数据长度的限制,可以发送任意长度的数据块。
⑤结束条件( Chip Deselect):主设备通过片选信号( Chip Deselect)取消对从设备的选择,结束数据传输。
四、TCP和UDP在使用时的区别?
1) 连接方面:TCP是面向连接的,可靠性高;UDP是面向无连接的,可靠性低
2) 可靠性方面:TCP提供可靠的数据传输,UDP不保证可靠的数据传输。因为TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程复杂,也使其易于攻击;UDP没有建立连接的过程,因而实时性较强,也稍安全
3) 速度方面: UDP传输速度快,TCP传输速度较慢.
4) 传输单位方面:每条TCP连接只能时点到点的;UDP支持一对一、一对多、多对一、多对多的交互通信。
5)流量控制方面: TCP有流量控制机制,可以避免过度拥塞,而UDP没有流量控制机制。
6).应用场景方面:TCP适用于需要可靠传输的应用,如文件传输、电子邮件等,UDP适用于需要快速传输的应用,如视频、音频等。
五、二层转发与三层转发的区别?
简单来说,二层转发是基于物理地址 (MAC地址) 的转发,五三层转发是基于逻辑地址 (P地址)的转发。二层转发只能在同一局域网内进行,而三层转发则可以实现跨越不同网络之间的数据传输。