当前位置: 首页 > news >正文

吉林省安全建设网站在建立网站站点的过程中

吉林省安全建设网站,在建立网站站点的过程中,软件二次开发怎么弄,郑州做企业网站的1.UART 和 IIC 的区别 UART (Universal Asynchronous Receiver-Transmitter) 用途#xff1a;用于异步串行通信。信号线#xff1a;通常需要两根线#xff08;TX 和 RX#xff09;#xff0c;有时还需一根地线。通信方式#xff1a;点对点。数据传输#xff1a;单向或…1.UART 和 IIC 的区别 UART (Universal Asynchronous Receiver-Transmitter) 用途用于异步串行通信。信号线通常需要两根线TX 和 RX有时还需一根地线。通信方式点对点。数据传输单向或双向全双工可以同时进行收发信息。同步方式异步没有时钟线通过设置波特率同步起始位和停止位来同步数据传输。应用场景适用于长距离通信如传感器、调制解调器等。 IIC (Inter-Integrated Circuit) 用途用于同步串行通信。信号线需要两根线SCL 和 SDA其中 SCL 是时钟线SDA 是数据线。通信方式多主多从。数据传输半双工发送时不能接收接收时不能发送。同步方式同步通过时钟线同步。应用场景适用于短距离通信如传感器、EEPROM 等。 特性UART (异步串行通信)IIC (同步串行通信)用途异步串行通信同步串行通信信号线两根线TX 和 RX有时需一根地线两根线SCL 和 SDA通信方式点对点多主多从数据传输单向或双向全双工可以同时收发信息半双工发送时不能接收接收时不能发送同步方式异步无时钟线通过波特率和起始位、停止位同步同步通过时钟线SCL同步应用场景长距离通信如传感器、调制解调器等短距离通信如传感器、EEPROM 等 2. I2C 2.1 IIC 的数据帧结构 起始信号STARTSDA 由高变低SCL 保持高电平。从设备地址7 /10 位地址 1 位读/写位0 表示写1 表示读。应答位ACK/NACK1位从设备返回低电平为 ACK高电平为 NACK。数据字节8 位数据。停止信号STOPSDA 由低变高SCL 保持高电平。 2.2 I2C 通信流程 起始信号START主设备发送起始条件表示通信开始。 SDA 由高变低SCL 保持高电平 从设备地址字节因为是多主多从所以主设备需要发送想建立连接的从设备的地址字节 地址字节的前 7 位或前 10 位是从设备地址最后 1 位是读1 / 写0标志 应答位设备接收到地址字节后发送一个应答位低电平ACK表示确认。 低电平ACK表示确认。高电平NACK表示地址不匹配或数据错误或者设备忙或故障。 数据字节主设备和从设备根据读/写标志进行数据交换。 发送数据位时每个数据位8 bit后面跟着一个回应信号ACK1 bit 低电平脉冲。数据字节8 bit应答字节1 bit 低电平脉冲 停止条件主设备发送停止条件表示通信结束。 SDA 由低变高SCL 保持高电平 2.3 I2C的起始信号、应答信号、停止信号、空闲状态 起始信号 当SCL为高期间SDA由高到低的跳变 应答信号 应答位是一个低电平脉冲 停止信号 当SCL为高期间SDA由低到高的跳变; 空闲状态: 当总线上的SDA和SCL两条信号线同时处于高电平,便是空闲状态, 当不传输数据时,SDA和SCL被上拉电阻拉高,即进入空闲状 下面的还没整理 1. UART UART通用异步收发传输器 异步通信 UART通信是异步的意味着发送方和接收方的时钟是独立的不需要同步信号。 全双工通信 UART支持全双工通信即可以同时进行数据的发送和接收。 数据格式 UART通信的数据格式通常包括数据位、起始位和停止位。 起始位每个字节的开始是一个低电平信号0。数据位可以是5到9位常用的是8位。奇偶校验位Parity Bit可选的用于错误检测。停止位数据字节后的一个或两个高电平信号1表示数据传输的结束。 波特率 波特率Baud Rate是UART通信的速率即每秒传输的信号单位数。常见的波特率有9600、19200、38400、115200等。 硬件连接 通常只需要两条线TX发送线和RX接收线。 1.2 常用寄存器 以下是STC51单片机中与UART通信相关的常用寄存器 寄存器名称功能描述SCON串行控制寄存器用于设定串行口的工作方式、接收/发送控制以及设置状态标志等。PCON电源控制寄存器包括波特率选择和帧错误控制位。SBUF串行数据缓冲寄存器物理上是两个独立的寄存器但占用相同的地址。TMOD定时器模式寄存器用于配置定时器的工作模式UART通信中用于控制波特率。TH1定时器1高8位用于设置定时器1的初值进而控制波特率。TL1定时器1低8位用于设置定时器1的初值进而控制波特率。 1.3 代码回顾 #include reg52.h #include intrins.h sfr AUXR 0x8E;void UartInit(void) {// 9600bps 11.0592MHzAUXR 0x1;SCON 0x40; // 选择串口工作方式1TMOD 0x0F;TMOD | 0x20; // 定时器1工作在8位自动重载TH1 0xFD;TL1 0xFD; // 9600波特率根据公式算出的初始值TR1 1; // 定时器开始工作// ES 1;// EA 1; }void Delay1000ms() {// 11.0592MHzunsigned char i, j, k;_nop_();i 8;j 1;k 243;do {do {while (--k);} while (--j);} while (--i); }void main() {char data_msg a;// 配置C51串口的通信方式UartInit();while(1) {Delay1000ms();// 往发送缓冲区写入数据就完成数据的发送SBUF data_msg;} }1.4 面试常见问题 1.4.1 简述一下UART如何传输一个字符’A’ UART传输一个字符’A’的过程如下 单片机通过配置UART的相关寄存器如SCON、TMOD、TH1等设置波特率和通信参数。将字符’A’的ASCII码值65写入到UART的数据缓冲寄存器SBUF中。UART硬件检测到SBUF非空后自动在起始位后发送’A’的8位ASCII码数据从最低位LSB开始发送然后逐步发送到最高位MSB。接着发送一个可选的奇偶校验位。最后发送一个或两个停止位来标识传输结束。接收方的UART在检测到起始位后开始接收数据并在停止位后确认字符’A’已完全接收。 1.4.2 简述一下UART通信协议 UART通信协议是一种异步串行通信机制它允许设备之间通过两条线发送线TX和接收线RX进行数据交换数据以字符为单位传输每个字符由起始位、一定数量的数据位通常是5到8位、可选的奇偶校验位和停止位组成所有这些位都以特定的波特率即每秒传输的符号数进行传输从而实现设备间的同步通信。 1.4.3 如何提升串口通信效率 提升串口通信效率可以通过以下方法 优化通信参数选择合适的波特率和数据格式。使用中断或DMA减少CPU占用提高数据传输效率。采用更高的波特率加快数据传输速度。减少不必要的通信握手和校验过程简化通信流程。合理配置缓冲区大小平衡内存使用和数据吞吐量。优化协议栈和数据处理流程提高软件层面的效率。 1.4.4 C51和STM32对UART使用上的区别 C51单片机和STM32单片机在使用串口UART时的主要区别如下 硬件架构 C51单片机基于传统的8051架构通常只包含一个UART接口。STM32单片机基于ARM Cortex-M系列处理器拥有更复杂的总线结构和更多的串口资源如USART1、USART2、USART3等。 外设功能 C51单片机外设种类较少功能相对简单。STM32单片机集成了丰富的片上外设包括多个UART接口以及其他高级通信接口如SPI、I2C等。 波特率配置 C51单片机波特率配置通常涉及到定时器的设置需要手动计算并设置波特率生成器。STM32单片机波特率配置更为灵活可以通过软件配置APB时钟和USART分频寄存器来设置。 编程和配置 C51单片机串口配置相对简单主要涉及SCON、PCON和TMOD等寄存器的设置。STM32单片机串口配置更为复杂需要配置GPIO、RCC时钟控制、USART等多个寄存器并且可以使用CubeMX等软件工具来简化配置。 中断和DMA C51单片机UART通信通常使用中断方式处理数据接收和发送DMA功能较弱。STM32单片机支持更高级的中断处理和DMA数据传输可以提高数据传输效率。 内存和处理能力 C51单片机通常具有较小的内存容量和较低的处理能力。STM32单片机具有更大的内存容量和更高的处理能力适合处理更复杂的数据和通信任务。 1.4.5 你用串口做过哪些开发 在我之前的开发经验中串口主要用于网络通信模块和语音模块 网络模块较多使用AT指令驱动如WiFi模块、蓝牙模块、4G模块还有物联网NB-IoT模块等。语音模块使用SU-06模块通过串口数据来交互模块中的固件通过发送特定串口数据来播报语音或者根据接收的串口数据来判断语音模块识别结果。 1.4.6 小车中关于串口的使用 智能小车属于大学期间的比赛项目当时串口使用有两个目的 调试如驱动电机、获取电机速度、获取小车前方障碍物距离等。连接语音模块根据语音模块的识别结果来切换小车的工作模式如避障模式、跟随模式、手机控制模式的切换。 因为51单片机只有一个串口在项目设计中把一个串口拆分为两个模块连接 语音模块仅在需要语音识别功能时连接到C51串口的输入口。蓝牙或WiFi需要通过蓝牙或WiFi把小车数据如车速、温湿度采集数据发送到上位机时连接到C51串口的输出口。 2. I2C 2.1 I2C协议概述 C51单片机实现I2C通信主要涉及以下几个方面 I2C总线结构 I2C通信使用两条线数据线SDA和时钟线SCL所有设备共享这两条线。 通信时序 I2C通信时序包括起始信号、数据传输、应答信号和停止信号。主设备生成时钟信号并控制通信的开始和结束从设备响应时钟信号并进行数据的发送或接收。 数据传输协议 I2C数据传输包括发送和接收字节每个字节包含8位从最高位开始传输。发送时主机将数据位放在SDA线上然后拉高SCL从机在SCL高电平期间读取数据位。接收时从机将数据位放在SDA线上主机在SCL高电平期间读取数据位。 软件模拟I2C通信 C51单片机可以通过软件模拟I2C通信时序包括起始信号、发送字节、接收字节、发送应答和接收应答等。 硬件接口 C51单片机通过两个引脚如P21和P20分别连接到I2C的SCL和SDA实现与I2C设备的通信。 编程实现 在C51单片机上需要编写程序来控制I2C通信包括发送起始信号、发送数据字节、接收数据字节、发送和接收应答位以及发送停止信号。 应用示例 例如使用C51单片机与OLED进行通信时可以通过编写特定的I2C通信协议函数来实现数据的读写操作。 总结来说C51单片机实现I2C通信需要理解I2C的总线结构和通信时序并通过软件编程来模拟I2C通信协议控制硬件接口进行数据的发送和接收。 2.2 代码回顾 #include reg52.h #include intrins.hsbit scl P0^1; sbit sda P0^3;void IIC_Start() {sda 1;scl 1;_nop_();sda 0;_nop_(); }void IIC_Stop() {sda 0;scl 1;_nop_();sda 1;_nop_(); }char IIC_ACK() {char flag;sda 1; // 在时钟脉冲9期间释放数据线_nop_();scl 1;_nop_();flag sda;_nop_();scl 0;_nop_();return flag; }void IIC_Send_Byte(char dataSend) {int i;for(i 0; i 8; i) {scl 0; // scl拉低让sda做好数据准备sda dataSend 0x80; // 1000 0000 获得dataSend的最高位给sda_nop_(); // 发送数据建立时间scl 1; // scl拉高开始发送_nop_(); // 数据发送时间scl 0; // 发送完毕拉低_nop_();dataSend dataSend 1;} }void main() {int a 10;IIC_Start(); }2.3 面试官常问 2.3.1 说一下I2C通信协议 I2C通信协议是一种多主机、同步、串行计算机总线用于连接微控制器和其他设备通过两条线数据线SDA和时钟线SCL实现数据的传输。其特点是支持多个设备共享同一总线且通信时序由主设备控制从设备响应包括起始条件、数据传输、应答位和停止条件等关键步骤广泛应用于微控制器与外围设备如传感器、存储器等之间的数据交换。 2.3.2 描述I2C的起始信号、终止信号和停止信号 在I2C通信协议中 起始信号由SDA线在SCL保持高电平时从高电平跳变到低电平产生表示一次新的数据传输开始。停止信号则是SDA线在SCL保持高电平时从低电平跳变到高电平标志着数据传输的结束。重复启动信号Restart Condition是SDA线在SCL为高电平时从高电平跳变到低电平紧接着在SCL为低电平时回到高电平用于在不释放SDA和SCL线的情况下开始新一轮的数据传输。 4.3.3 描述I2C总线数据传输过程 I2C总线数据传输过程开始于主设备生成的起始信号随后主设备通过SDA线发送数据字节每个字节后跟一个由从设备在SCL线产生的应答信号ACK数据传输可以包含多个字节并通过发送应答位来确认每个字节的成功接收。传输结束后主设备发出停止信号或重复启动信号来结束当前传输或开始新的传输周期。在整个过程中SCL线由主设备控制用于同步数据的发送和接收。 4.3.4 I2C通信有几种工作模式 I2C通信协议主要有以下几种工作模式 单主单从模式在这种模式下只有一个主设备和一个从设备。主设备通过发送从设备地址选择具体的从设备进行通信。单主多从模式在这种模式中主设备可以与多个从设备通信。每个从设备都有唯一的地址主设备通过发送从设备地址选择特定的从设备。多主多从模式在这种模式中多个主设备可以与多个从设备通信。I2C协议通过仲裁机制确保只有一个主设备在总线上进行数据传输。 这些模式允许I2C总线在不同的应用场景中灵活地进行数据通信。 4.3.5 I2C通信总线上拉电阻多大 I2C总线的上拉电阻通常推荐值在1kΩ到10kΩ之间。对于标准速率为100kHz的I2C通信常见的选择是4.7kΩ或10kΩ。对于快速模式400kHz或更快的高速模式3.4MHz可能需要降低阻值到几千欧姆以保证信号的快速上升沿。在实际应用中常见的I2C上拉电阻阻值范围从1kΩ到10kΩ。 4.3.6 C51如何通过I2C驱动OLED屏 通过C51单片机驱动OLED显示屏主要涉及以下几个步骤 初始化I2C通信 定义I2C通信所需的引脚并初始化这些引脚的状态。例如将P10设置为I2C时钟线SCLKP11设置为I2C数据线SDA。 编写I2C通信函数 包括I2C的起始信号、停止信号、字节写入、等待应答等函数。这些函数通过软件模拟I2C协议的时序控制数据线和时钟线来实现数据的发送和接收。 发送命令和数据 通过编写的I2C通信函数向OLED发送控制命令和显示数据。通常命令和数据需要分别发送命令用于设置OLED的工作模式数据用于显示内容。 OLED显示控制 定义OLED的显示控制函数如清屏、显示字符、显示数字、显示字符串等。这些函数内部会调用I2C通信函数来发送具体的命令和数据。 通过以上步骤可以在C51单片机上实现对OLED显示屏的控制。 ———————— 3.115200 波特率对应多少字节 115200 波特率意味着每秒钟可以传输 115200 个位。在大多数串行通信协议中一个字节byte由 8 位组成即 ( \frac{115200}{8} ) 个字节。但在实际的串行通信中还需要考虑起始位、停止位以及可能的奇偶校验位。 假设使用的是最常用的 8 位数据位、1 位起始位和 1 位停止位的配置即 8N1 配置其中 N 表示无奇偶校验位那么一个完整的字节传输需要 10 位1 8 1。因此我们可以计算每秒传输的字节数如下 [ \text{每秒传输的字节数} \frac{\text{波特率}}{\text{每字节的位数}} ] 对于 115200 波特率 [ \text{每秒传输的字节数} \frac{115200}{10} 11520 \text{ 字节/秒} ] 总结 波特率115200 波特率每字节的位数10 位1 起始位 8 数据位 1 停止位每秒传输的字节数11520 字节/秒 因此115200 波特率对应的每秒传输字节数为 11520 字节。 4. 多线程间临界资源用了什么保证同步和互斥 答多线程之间的临界资源通常采用以下几种方式来保证同步和互斥 信号量Semaphore一种计数器用于控制多个进程对共享资源的访问。当信号量大于零时进程可以获取该资源否则进程必须等待直到信号量变为正数。 互斥锁Mutex确保同一时间只有一个线程能访问特定的数据结构或资源。其他想要访问该资源的线程会被阻塞直到持有锁的线程释放它为止。 条件变量Condition Variable与互斥锁一起使用允许线程暂停和恢复执行直到满足某些条件。这有助于避免“忙等待”现象提高效率。 这些机制共同确保了多线程环境下的资源共享安全性和一致性。 5. 交叉编译是什么为什么需要交叉编译 答交叉编译是指在一台机器上编写源代码在另一台不同架构的机器上运行编译后的二进制文件。这种做法的主要原因包括 目标设备资源有限例如嵌入式系统或移动设备它们可能没有足够的计算能力或存储空间来运行复杂的编译过程。 开发环境需求开发者希望在自己的计算机上进行开发和测试而不是在目标设备上这样可以利用更好的开发工具和更快的反馈循环。 安全性考量有些情况下为了保护目标系统的完整性不允许直接在其上进行编译活动。 6. Linux采取什么手段调试代码 答Linux提供了多种强大的工具和技术来帮助开发者调试代码主要包括 GDBGNU Debugger这是一个广泛使用的源码级调试器支持C, C, Objective-C等多种语言。GDB允许用户查看和修改程序状态设置断点检查变量值等。 Valgrind一套开源的工具集主要用于内存错误检测、性能分析和缓存模拟。特别适合查找内存泄漏和其他难以发现的问题。 strace用于追踪系统调用和信号可以帮助理解程序如何与操作系统交互。 core dump当程序崩溃时Linux会自动生成核心转储文件包含程序终止时刻的内存映像这对于诊断问题非常有用。 7. GDB常用命令有哪些 答GDB有许多有用的命令这里列举一些最常见的 run开始执行程序。 break设置断点。 continue 或 c继续执行程序直到遇到下一个断点或程序结束。 step 或 s逐行执行代码进入函数体。 next 或 n逐行执行代码但不会进入函数体。 list 或 l显示当前正在执行的源代码行及其上下文。 info breakpoints列出所有的断点。 delete删除指定的断点。 watch监视表达式的值变化。 backtrace 或 bt显示当前的调用堆栈。 8. 常用的是怎么使用的 答GDB的基本使用步骤如下 启动GDB并加载你的程序gdb your_program 设置断点break function_name 或 b line_number 运行程序run 使用next, step, continue等命令逐步执行代码 查看变量值print variable_name 结束调试quit 9. 什么叫内存泄露 答内存泄露指的是程序在申请内存之后无法正确地释放已经不再使用的内存块。随着时间推移这些未被回收的内存会导致应用程序占用越来越多的物理内存最终可能导致系统资源耗尽甚至崩溃。 10. 段错误 答段错误Segmentation Fault是一种常见的程序错误发生在程序尝试访问不属于其权限范围内的内存位置时。这可能是由于数组越界、空指针解引用或其他形式的非法内存访问造成的。段错误通常会导致程序立即退出并输出错误消息。 11. char a 的取值范围 答字符型变量char a的取值范围依赖于具体的编程语言和编译器。在C/C中默认情况下char类型是带符号的其取值范围从-128到127。如果声明为unsigned char则取值范围是从0到255。 12. static关键字有什么作用 答static关键字在C/C中有几个不同的用途 在全局作用域中static修饰符使得变量仅在本文件范围内有效不能被其他文件访问。 在函数体内static变量具有静态存储期即使函数返回后仍然保留其值下次调用时保持不变。 对于成员函数static表明它是类级别的不需要实例化就可以调用且对所有对象都是一样的行为。 13. 堆和栈有什么区别 答堆和栈是两种不同的内存管理方式主要区别在于 栈Stack栈是一种先进后出LIFO的数据结构由编译器自动管理。栈内存用于存储函数参数、局部变量和返回地址等临时数据。栈的空间大小固定增长速度快但容量相对较小。 堆Heap堆内存由程序员手动分配和释放常用于动态创建对象和大块数据。堆内存的增长速度较慢但容量较大适用于长时间存在的数据。 11. Git版本管理工具 答Git是一款分布式版本控制系统设计目的是高效快速地处理从小到大的项目版本管理。Git的核心特点包括 分布式每个克隆的仓库都有完整的历史记录和版本库无需连接中央服务器即可工作。 快速本地操作如提交、分支切换等几乎瞬间完成。 安全性高每次提交都会生成唯一的哈希标识防止数据篡改。 支持非线性开发轻松创建、合并和删除分支。 12. 说说你这个项目最大的难点你是怎么解决的 答在这个项目中我们面临的一个重大挑战是如何优化算法以适应大规模数据处理的需求。为了解决这一难题我们采用了以下策略 并行处理利用多核处理器的优势将任务分解成独立的部分并发执行。 数据压缩通过对原始数据进行预处理减少不必要的冗余降低存储和处理成本。 缓存技术合理运用缓存机制减少重复计算加快响应速度。 通过这些措施我们成功提高了系统的整体性能和稳定性。 13. PWM IIC UART 英文 答PWM: Pulse Width Modulation脉冲宽度调制 IIC: Inter-Integrated Circuit集成电路总线 UART: Universal Asynchronous Receiver/Transmitter通用异步收发器 8. 消息队列有什么优点 消息队列的主要优点包括 解耦生产者和消费者之间解耦生产者不需要关心消费者的细节。异步生产者发送消息后可以立即返回消费者在空闲时处理消息。削峰通过消息队列可以平滑处理高峰期的请求避免系统过载。可靠性消息队列通常支持消息的持久化确保消息不会丢失。灵活性支持多种消息模式如发布/订阅、点对点等。 9. 队列和栈有什么区别 队列先进先出FIFO新元素从队尾插入从队头删除。栈后进先出LIFO新元素从栈顶插入也从栈顶删除。 10. 堆和栈有什么区别 管理方式 栈由操作系统自动分配和释放。堆由程序员手动分配和释放。 空间大小 栈通常较小大小有限。堆通常较大大小受限于系统内存。 生长方向 栈由高地址向低地址生长。堆由低地址向高地址生长。 分配方式 栈静态分配和动态分配。堆动态分配。 分配效率 栈分配和释放速度快。堆分配和释放速度较慢容易产生内存碎片。 11. UART 英文、中文全称 英文全称Universal Asynchronous Receiver-Transmitter中文全称通用异步收发传输器 12. UART 和 I2C 有什么区别 UART 串行通信使用两根线TX和RX进行全双工通信。异步没有时钟线通过波特率同步。点对点通常用于一对一通信。 I2C 串行通信使用两根线SCL和SDA进行半双工通信。同步有时钟线SCL同步数据传输。多设备支持多主多从设备通信。 13. I2C 一条总线最多可以挂多少从设备 I2C总线理论上可以支持128个从设备但实际上受限于总线电容和时序要求通常建议不超过10-20个从设备。 14. PWM 英文、中文全称 英文全称Pulse Width Modulation中文全称脉冲宽度调制 15. 交叉编译是什么为什么需要交叉编译 交叉编译在一种平台上生成另一种平台可执行代码的过程。为什么需要交叉编译 目标平台资源有限目标平台可能没有足够的资源如内存、CPU来编译代码。开发便利性在开发环境中编译代码然后将编译后的程序传输到目标平台运行。构建速度开发平台通常性能更强编译速度更快。 16. Git 版本管理工具 Git 是一个分布式版本控制系统用于跟踪文件的变化支持多人协作开发。主要功能包括 版本控制记录每次提交的变更。分支管理支持创建和合并分支。代码回溯可以恢复到任何历史版本。远程仓库支持与远程仓库同步。 17. GDB 常用的命令有哪几个 run开始或重新开始程序。break设置断点。continue继续执行程序。step单步执行进入函数。next单步执行不进入函数。print打印变量的值。quit退出GDB。 18. 函数指针和指针函数有什么区别 函数指针指向函数的指针可以用来调用函数。 void (*func_ptr)(int);指针函数返回值为指针的函数。 int* func(int x);19. 什么叫回调函数举例说说哪些 回调函数在某个事件发生时被调用的函数通常作为参数传递给其他函数。例子 GUI事件处理按钮点击事件的处理函数。网络请求请求完成后的回调函数。定时器定时器到期时的回调函数。 20. char a 的取值范围是多少 有符号字符-128 到 127无符号字符0 到 255 21. static 关键字有什么作用 静态变量在函数内部声明的静态变量在整个程序运行期间都存在初始化一次。静态函数只能在声明它的文件中被调用。静态全局变量只能在声明它的文件中被访问。 22.什么是内存泄露如何避免 内存泄露程序中已经分配的内存没有被释放导致内存逐渐耗尽。如何避免 及时释放内存使用完动态分配的内存后及时调用 free 或 delete。智能指针使用C中的智能指针如 std::unique_ptr 和 std::shared_ptr管理内存。内存泄漏检测工具使用工具如 Valgrind检测内存泄漏。 23. 什么是野指针、和空指针、内存泄漏什么关系什么区别 野指针指向不确定地址的指针通常是因为指针被删除后仍然使用。空指针指向空地址通常是 nullptr 或 NULL的指针表示没有有效地址。内存泄漏程序中已经分配的内存没有被释放。 关系和区别 野指针可能导致程序崩溃或未定义行为。空指针通常会导致程序崩溃但容易检测和处理。内存泄漏导致内存逐渐耗尽但不一定立即导致程序崩溃。 24.char char 类型的取值范围是 -128 到 127这是因为 char 类型通常占用一个字节8位并且在大多数系统中默认是有符号的。让我们详细解释一下这个范围的由来 1. 字节的二进制表示 一个字节有8位每一位可以是0或1。因此一个字节可以表示 (2^8 256) 种不同的值。 2. 有符号和无符号 无符号字符 (unsigned char)所有8位都用于表示数值范围是从0到255。 最高位第7位用于表示数值的一部分。因此范围是从 (0) 到 (255)。 有符号字符 (signed char)最高位第7位用于表示符号0表示正数1表示负数其余7位用于表示数值。 正数的范围是从 (0) 到 (127)。负数的范围是从 (-128) 到 (-1)。 3. 有符号字符的范围 正数最高位为0剩下的7位用于表示数值。 范围是从 (0) 到 (127)。例如二进制 01111111 表示十进制 127。 负数最高位为1剩下的7位用于表示数值。 范围是从 (-128) 到 (-1)。例如二进制 10000000 表示十进制 (-128)。二进制 11111111 表示十进制 (-1)。 4. 补码表示法 在计算机中负数通常使用补码表示法。补码表示法的好处是可以简化加法和减法运算。 正数的补码与原码相同。负数的补码原码的各位取反然后加1。 例如 -1 的补码 原码10000001取反11111110加111111111 -128 的补码 原码10000000取反11111111加110000000 5. 总结 char 类型默认是有符号的占用一个字节8位范围是从 (-128) 到 (127)。unsigned char 类型无符号的占用一个字节8位范围是从 (0) 到 (255)。 希望这能帮助你理解为什么 char 类型的取值范围是 (-128) 到 (127)。如果你有更多问题欢迎继续提问 2. IIC 的数据帧 IIC 数据帧包括以下几个部分 起始条件SCL 高电平时SDA 从高变低。地址字节7 位或 10 位设备地址加上 1 位读/写标志。应答位每个字节传输后接收方发送一个应答位。数据字节8 位数据。停止条件SCL 高电平时SDA 从低变高。 3. IIC 速率 IIC 的标准速率包括 标准模式100 kbps快速模式400 kbps高速模式3.4 Mbps IIC 最多能挂多少 IC 从设备 对于 7 位地址的 IIC 总线最多可以挂载 128 个设备地址范围从 0x00 到 0x7F。实际上地址 0x00 是保留的用于广播地址因此最多可以挂载 127 个设备。 Linux 系统查找一个名叫 abc 的文件 命令find参数-name示例find / -name abc绝对路径命令 命令pwd显示当前目录的绝对路径示例pwd查看当前目录的文件 命令ls示例ls执行一个 shell 命令bash 或 sh示例bash script.shShell 的第一行 第一行通常是解释器路径例如#!/bin/bashShell 里面的循环函数语法 for 循环for i in {1..5}; doecho $i donewhile 循环while [ $i -lt 5 ]; doecho $ii$((i 1)) done交叉编译 定义交叉编译是指在一个平台上生成另一个平台上的可执行代码的过程。原因目标平台可能没有编译工具链或者编译环境资源有限。 Linux 调试代码的手段 GDBGNU 调试器Valgrind内存检测工具strace系统调用跟踪工具dmesg查看内核日志 GDB 常用命令 启动调试gdb program运行程序run设置断点break function继续执行continue单步执行step查看变量print variable退出调试quit内存泄露 定义内存泄露是指程序中已分配的内存未能被释放导致内存占用不断增加。 段错误 定义段错误Segmentation Fault是指程序试图访问一个未分配给它的内存区域或者试图以不适当的方式访问内存。 char a 的取值范围 取值范围通常情况下char 类型的取值范围是 -128 到 127有符号或 0 到 255无符号。 static 关键字的作用 局部变量延长局部变量的生命周期使其在整个程序运行期间都存在。全局变量限制全局变量的作用域使其只在定义它的文件中可见。函数限制函数的作用域使其只在定义它的文件中可见。 数组和链表的优缺点 数组 优点随机访问速度快内存连续。缺点插入和删除操作效率低固定大小。 链表 优点插入和删除操作效率高动态大小。缺点随机访问速度慢内存不连续。 Git 版本修改了内容之后上传到服务端 添加更改git add .提交更改git commit -m Commit message推送到远程仓库git push origin branch_nameGit 常用命令 克隆仓库git clone repository_url查看状态git status添加文件git add file_name提交更改git commit -m Commit message推送到远程仓库git push origin branch_name拉取最新代码git pull origin branch_nameIIC 英文 全称Inter-Integrated Circuit UART 英文 全称Universal Asynchronous Receiver-Transmitter PWM 波英文 全称Pulse Width Modulation 希望这些解答对你有所帮助如果有更多问题欢迎继续提问。
http://www.hkea.cn/news/14444352/

相关文章:

  • 焦作网站建设网站建设录哪个科目
  • 怎么把自己做的网站发布到网上wordpress产品模块
  • 微信官网网站wordpress转html
  • 如何做统计信息的网站wordpress和dede区别
  • 开封建网站的公司功能网站建设
  • 做网站网页需要什么软件sae wordpress 图片插件
  • 怎么做自己的销售网站营销团队的建设与管理
  • 坪地网站建设怎么样校园网站建设考评办法
  • 企业软文seo兼职58
  • 重庆建工招采平台昆明网站seo技术厂家
  • 省企联网站建设要求网站设计实训心得体会
  • 个人简介网站html代码淄博网站制作定制技术
  • wordpress网站音乐播放器法律平台网站建设方案
  • 网站做生鲜线下推广建议响应式网站的组成
  • 网上自己建网站wordpress更换文章图片链接
  • 二手域名做网站不收录服务专业的网站开发设计
  • 网站推广建设网络科技公司一般是做什么的
  • 在什么网站做推广嘉兴哪家公司做网站比较好的
  • 教育网站开发需求说明书创建网站时间代码
  • 请输入您网站的icp备案信息美食网站开发与设计任务书
  • 网站开发主要学什么小程序开发费用多少
  • 衡阳市建设学校官方网站wordpress主题手机制作
  • 精通网站开发书籍wordpress横向导航
  • 建设银行网站开通查询密码wordpress 悬浮通知
  • 网站建设我要自学网网站建设类的职位
  • 安徽中颐建设投资有限公司网站WordPress不支持
  • 专业网网站建设公司网站建设应包含哪几个板块
  • 网站词库怎么做哪家公司网站建设口碑好
  • 网站建立定位企划linux系统中wordpress
  • 提供电子商务网站建设外包服务的企业学设计需要什么条件