自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 子网掩码和网关的区别

3.子网掩码用于划分 IP 地址,将其分为网络地址和主机地址的两部分,以便更有效地管理 IP 地址。4.网关是连接不同网络的设备,负责将数据包从一个网络传递到另一个网络,实现网络间的通信。

2023-09-22 00:19:15 1273

原创 编译发生错误,查找调试方法

调试是一个迭代的过程,可能需要多次运行程序并查看不同部分的输出以找到问题所在。此外,仔细阅读编译器的错误消息并理解代码是非常重要的。当C程序在编译过程中出现错误时,可以使用调试工具来找出错误。

2023-09-20 00:38:15 747 1

原创 段错误原因及避免方法

段错误就是访问了不可访问的内存,这个内存区要不是不存在的,要不是受保护的。

2023-09-16 14:01:58 604 1

原创 宏和内联函数的区别

1、inline在编译期间展开(将实参传递给形参,使用函数的代码替换函数的调用),而宏在编译处理时进行文本替换。4、宏是无类型的,将其用于如何类型,运算都是有意义的。在C语言中,我们常用宏定义来实现,在C++中,我们使用内联函数(inline)来实现。函数,如果我们正常的作为一个函数来调用,会增加时间和空间的开销,影响函数的执行效率。3、内联函数会进行类型的安全检查、语法判断,而宏定义在文本替换后有可能导致编译错误。2、inline标识的是一个函数,采用的是参数传递,而宏定义是文本替换的一种方式。

2023-09-16 01:12:30 430 1

原创 引用与指针

引用不是新定义一个变量,而是给已存变量取一个别名,编译器不会因为引用而新开辟一个内存空间,引用和和它引用的变量共享一个内存空间。类型& 引用变量名 = 引用实体;且引用类型必须和引用实体是同种类型的。引用的主要用途是:修饰函数的形参和返回值。在C++语言中,函数的参数和返回值的传递方式有三种:值传递,指针传递和引用传递。引用具有指针的效率,又具有变量使用的方便性和直观性。实际上引用可以做的事,指针都可以做,为什么还要引用呢?

2023-09-15 23:55:10 20

原创 I2C通信

它是一种带有多主机和多从机架构的通信协议,用于在数字集成电路(IC)之间进行通信。I2C通信协议由Philips(现在的NXP Semiconductors)在上世纪80年代引入,并成为一种流行的通信标准。在使用I2C通信时,需要根据具体情况编写代码或使用相应的库函数来控制I2C总线并进行数据传输。2.多主机和多从机:I2C支持多个主机和多个从机设备同时连接到同一条总线上。7.寻址:主机通过向总线发送从机的地址来选择特定的从机进行通信。数据在每个时钟周期的边沿上进行采样和推送,确保数据的可靠传输。

2023-09-15 01:14:55 34

原创 UART 串口通信

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种双向、串行、异步的通信总线,仅用一根数据接收线和一根数据发送线就能实现全双工通信。典型的串口通信使用3根线完成,分别是:发送线(TX)、接收线(RX)和地线(GND),通信时必须将双方的TX和RX交叉连接并且GND相连才可正常通信。与IIC、SPI 等接口一样,都属于串行通信接口,它是一种异步通信协议,意味着发送和接收的数据以时间为基准而不是时钟信号进行同步,可以实现全双工通信;

2023-09-15 01:12:41 721

原创 嵌入式的理解

嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统。国内普遍所理解的嵌入式为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、功耗、成本及体积有严格要求的专用计算机系统。

2023-09-09 15:39:54 516 1

原创 Shell

Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。也可以说是:Shell通过提示你输入,向操作系统解释该输入,然后通过处理来自操作系统的任何结果输出。简单来说就是用户与操作系统之间的一个命令解释器。最常用的 Shell 为 Bash ,由于易用和免费,在日常被广泛使用,也是大多数 Linux 操作系统默认的 Shell 环境。

2023-09-09 14:13:41 47 1

原创 系统IO与标准IO

在进行数据的读写的过程中,先不把数据直接写入或者读入设备中,而是写或者读入内存空间,当满足一定条件时候,将该空间的文件写入文件或设备中。系统IO:不带缓冲机制,系统IO可以操作普通文件与驱动文件(设备文件,网络文件,普通文件) 通过系统IO读写文件时,每次操作都会执行相关系统调用。系统IO:系统IO又称文件IO,也称低级磁盘IO,属于不带缓存的IO(unbuffered I/O)。文件IO中用文件描述符表现一个打开的文件,可以访问不同类型的文件,如普通文件、设备文件和管道文件等。open打开设备文件。

2023-09-04 23:45:42 561 1

原创 数据结构之 - 链表

用一组任意的存储单元存储线性表的数据元素(逻辑上相邻的元素在物理上可以不相邻)利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素(只支持顺序访问)每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息(需要额外的存储空间)

2023-08-30 00:49:06 40 1

原创 C语言 volatile

volatile用于声明一个变量,告诉编译器该变量值容易,在编译、读取、存储该变量的时候都,因此编译后的程序每次需要存储或读取这个变量的时候,都会存储数据,不做优化,在做嵌入式开发的时候,因为有时变量地址有可能是系统的一个外设地址,他的值的变化并不在程序控制范围内,随时有可能变化,因此需要对他进行声明,每次读取或者存储。变量如果加了 volatile 修饰,则会,而。volatile 的作用 是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

2023-08-29 00:20:49 49 1

原创 TCP 的三次握手和四次挥手

服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。这里在补充一点关于SYN-ACK 重传次数的问题:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传。

2023-08-23 23:11:37 27 1

原创 Linux 内核驱动中的混杂设备和字符设备

混杂设备是可以同时支持字符设备和块设备操作的特殊设备类型,允许将块设备映射到字符设备接口。而字符设备则是以字符为基本单位进行数据读写的设备类型,在内核中通过字符设备接口提供对设备的访问和控制方法。两者在内核的处理方式和应用场景上有所区别,但都提供了简化和统一的设备访问方式。

2023-08-23 02:23:49 306 1

原创 C/C++ 中 static 的定义和用法

static是关键字,中文直译过来是“静态的”,static关键字主要是用来修饰变量和函数。的static和的static。面向过程的static主要包括和。面向对象的static主要包括。

2023-08-22 00:47:55 144 1

原创 进程与线程

在操作系统中,进程和线程是两个重要的概念,用于管理和执行程序。

2023-08-21 23:11:46 20 1

原创 Linux中 gcc 编译时 -I(大写i), -L(大写L), -l(小写L)的作用

在编译c文件时,我们有可能需要用到一些库,需要在编译时链接,就会用到 -I(大写i), -L(大写L), -l(小写L)这些命令。

2023-08-20 16:15:04 1923 2

原创 在输入时避免上次输入到缓冲区的换行符带来影响的方法

在C语言中连续的使用输入语句,可能会发生某次输入语句在还没有输入时自动跳过了,其实是在我们上一次的输入时,在最后按下了换行,此时我们输入的语句已经写入我们要将其写入的变量中,但是此时的输入缓冲区中还残留着一个换行符。当我们再次使用输入语句时,此时系统会将该换行符视为我们的输入,照成下次输入失效的情况发生。此时我们可在一次输入后使用一个getchar();函数来接收这个换行符,如。这样,即可解决问题。

2023-08-20 03:14:17 123 1

原创 Sqlite3 中的查询函数

sqlite3_get_table() 函数是 SQLite 提供的一个便捷方法,用于执行查询并将结果存储在二维字符数组中。参数说明:1.db:表示一个已经打开的数据库连接对象。2.zSql:表示待执行的 SQL 查询语句。3.pazResult:是一个指向指针的指针,用于存储查询结果。查询结果以二维字符数组的形式返回,每个单元格都是一个字符串。这个参数的值由函数分配和设置。4.pnRow:传入一个 int 类型的指针变量的地址,用于接收查询结果的行数。

2023-08-19 23:40:54 2137

原创 进程、线程操作实例

注意:IPC(进程间通信)资源生命周期不随进程,而是随内核,在进程结束后,共享内存还在,在第二次执行时会报错,所以,shmget 创建的共享内存要在使用结束后释放掉,不然内存会泄露。线程池就是创建一个线程的集合,再创建一个任务的队列,任务列中任务的执行依靠线程池的的线程,当任务执行完后归还线程回去等待下一任务使用,可避免线程频繁的创建和销毁。因为key是内核级别的,供内核标识,而共享内存标识符是用户级别,为了供用户标识。利用 msgget 函数, 创建成功返回队列ID(标识符)无名管道(仅适用于亲缘进程)

2023-08-19 00:35:50 83

原创 SQL使用基础

SQL:结构化查询语言, 用于访问和处理数据库的语言。后续可编写 .sql 文件脚本对该数据库进行操作。DDL:数据定义语言,用来定义数据库对象:库、表、列等;DML:数据操作语言,用来定义数据库记录(数据);DCL:数据控制语言,用来定义访问权限和安全级别;如产生错误,出现lock问题。3)创建表,对表进行增删改查;DQL:数据查询语言,用来查询记录(数据)3、Linux 下安装 mysql 的命令。2)指定使用某个数据库。1)先创建一个数据库。

2023-08-19 00:04:52 13

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除