自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【系统移植二】正点原子linux内核移植

脚本要有可执行权限,在编译过程中会弹出linux的图形界面配置,如下图所示,这里不需要做任何配置,按两次。厂源码-> linux-imx-4.1.15-2.1.0-g8a006db.tar.bz2。开发板光盘->1、例程源码-> 3、正点原子 Uboot 和 Linux 出。②、设备数文件:imx6ull-alientek-emmc.dtb。①、linux镜像文件:zImage。linux内核在编译完成之后会在。这个压缩包拷贝到前面新建的。退出即可,等待编译完成。在编译内核之前需要安装。

2024-04-08 21:57:19 274

原创 【NFS 和 TFTP服务器搭建】

1)原因:因为ubuntu的nfs版本为version4,而板子的nfs版本为version2,所以直接挂载上去无法识别。no_root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员。root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户。all_squash:无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户。就是创建的tftp文件夹目录,可以将需要使用TFTP传输的文件放在这个文件夹中,并且。

2024-04-07 22:30:42 262

原创 【bash自动补全原理】

路径下的自动补全脚本。补齐功能可以通过脚本指定命令参数如何补齐。的脚本,这个脚本会在bash初始化的时候加载,获取脚本的位置可以通过。包来更好的进行补全效果。不同版本安装位置不同,原理类似。文件查看,补全功能的配置也是通过这个脚本导入的。(1)第3行:检查三个条件是否同时满足。1)自动补全依赖于bash的内置命令。2)一般系统中会安装。

2024-04-07 17:05:37 351

原创 【系统移植 一】 正点原子U-boot移植

Linux的启动需要一段bootloader程序,也就是芯片上电以后运行一段bootloader程序。这段程序会先初始化DDR等外设,然后将linux内核从flash(NAND、NOR FLASH、 SD、MMC等)拷贝到DDR中,最后启动linux内核。bootloader最主要的作用是启动Linux内核。uboot是bootloader的一种。

2024-03-30 16:26:37 292

原创 【rust项目】c与rust相互调用及目录间文件相互引用

本文选择在src目录下的方式,于src同级的没研究明白。使用inclued宏的时候引用那个文件中的哪些函数是不需要写的。一个creat只可以生成一个lib文件(lib的类型可以是多种);文件,该文件的作用是在编译代码的时候可以链接到库,相当于给rustc 添加编译参数。8)主体代码和builtins目录下文件重名(把其中一个文件名称换掉)在生成c动态库时需要调用rust中实现的函数,只需要在c文件中使用。​ 文件相互引用的时候,需要再在src目录下添加。1)rust需要调用c生成的库(静态库和动态库)

2024-01-16 21:24:01 1171

原创 bash配置文件

这段代码主要用于在非登录shell中设置环境变量和权限掩码,并执行一些初始化脚本。

2023-12-20 14:34:02 105

原创 【基本定时器】二

用定时器产生定时时间。

2023-11-25 15:11:24 90

原创 【基本定时器】一

STM32的基本定时器时TIM6和TIM7,这两个定时器个包含一个16位的自动装载计数器,有各自的可编程预分频器驱动。作用1) 提供时间基准2)为数模转换器(DAC)提供时钟。

2023-11-25 14:27:14 80

原创 【MQTT 学习三】Qos、保留消息、心跳机制、遗嘱、用户密码认证

Qos:Quality of Service,服务质量。设置不同的等级可以确保某些重要信息准确传输到接收端。

2023-07-08 18:43:26 1240

原创 【MQTT 学习二】主题

主题在MQTT协议中是一个很重要的概念。

2023-07-08 16:36:57 310

原创 【MQTT学习 一】基本概念

客户端可定时向服务端发送一个心跳包用于告知服务端,当前客户端依然在线,服务端在收到客户端的心跳请求后,会回复一条消息,这条消息被称作心跳相应。MQTT的服务端通常是一台服务器(broker),它是MQTT信息传输的枢纽,负责将客户端的信息发送给客户端;当 MQTT 报文的接收方没有及时向报文发送发回复确认收到报文时,发送方会以为对方没有收到信息,会再次重复发送 MQTT 报文。MQTT 消息的服务质量等级。有保留标志的主题,服务器会保留消息,当有客户端订阅该主题后,服务端会立即想客户端发送改主题信息。

2023-07-08 16:02:24 989

原创 【进程 一】何为进程

可执行程序是一个文件,文件是一个静态的概念,放在磁盘中,如果它没有被执行,则不会产生任何作用,当它被运行之后,将会对系统环境产生影响,所以执行程序的实例就是可执行文件被执行。Linux系统下,每一个进成都有一个进程号(process ID,简称PID),是一个正数,进程与进程号是一一对应关系。进程是一个动态过程,是程序的一次运行过程,当应用程序被加载到内存中运行之后,它就成为一个进程,当程序也运行结束后,也就意味着进程终止。进程:就是一个可执行程序的实例。进程就是可执行文件被执行的过程。

2023-07-04 18:05:18 33

原创 【linux 信号学习】信号有关函数

sigsuspend函数会将mask信号集替换进程的信号掩码,然后挂起进程,直到捕获到信号被唤醒(如果捕获的是mask中的信号,则不会被唤醒,继续挂起)、并从信号处理函数返回,一旦从信号处理函数返回,sigsuspend()会将进程的信号掩码恢复成调用前的值。如果进程在执行信号处理函数期间接收到了处在信号掩码中的成员,内核会将其阻塞,将该信号添加到进程等待信号集(等待被处理,处于等待状态的信号)中,可以使用sigpending函数获取正在等待的信号集。并且还允许调用着添加一下输出信息,有参数s指定,

2023-06-15 09:40:11 121

原创 【linux 信号学习十一】异常退出

函数 abort()通常产生 SIGABRT 信号来终止调用该函数的进程,SIGABRT 信号的系统默认操作是终止进程运行、并生成核心转储文件;当调用 abort()函数之后,内核会向进程发送 SIGABRT 信号。使用abort()函数终止进程,会生成核心转储文件,可用于判断程序调用abort()时的程序状态。

2023-06-14 23:15:26 189

原创 【linux 信号学习十】实时信号

等待信号集只是一个掩码,仅表明一个信号是否发生,而不能表示其发生的次数。换言之,如果一个同一个信号在阻塞状态下产生了多次,那么会将该信号记录在等待信号集中,并在之后仅传递一次(仅当做发生了一次),这是标准信号的缺点之一。函数,也可以使用sa_handler函数,但是这个函数没有办法传递参数。

2023-06-14 23:13:54 93

原创 【linux 信号学习九】阻塞和等待信号

sigsuspend函数会将mask信号集替换进程的信号掩码,然后挂起进程,直到捕获到信号被唤醒(如果捕获的是mask中的信号,则不会被唤醒,继续挂起)、并从信号处理函数返回,一旦从信号处理函数返回,sigsuspend()会将进程的信号掩码恢复成调用前的值。如果进程在执行信号处理函数期间接收到了处在信号掩码中的成员,内核会将其阻塞,将该信号添加到进程等待信号集(等待被处理,处于等待状态的信号)中,可以使用sigpending函数获取正在等待的信号集。:获取正在等待处理的信号的集合。

2023-06-14 23:09:25 213

原创 【linux 信号学习八】信号掩码

内核为每一个进程维护了一组信号掩码(其实就是一组信号集合)。当进程接收到一个属于信号掩码中的信号时,该信号将会被阻塞,无法传递进程进行处理。内核会将该信号阻塞,直到该信号从信号掩码中删除内核才会把信号传递给进程,从而得到处理。应用程序调用signal()函数或sigaction()函数为某一信号设置处理方式时,会自动将改信号添加到信号掩码中。对于sigaction函数是否会添加和SA_NODEFER标志有关。当信号处理函数结束返回后,信号自动从信号掩码中移除。

2023-06-14 23:08:09 183

原创 【linux 信号学习七】获取信号描述信息

linux系统中的每一个信号都有一串与之相对应的字符串描述信息,用于对该信号进行相应的描述。这些字符串位于sys_siglist数组中。sys_siglist数组是一个char * 类型的数组,数组中的每一个元素存放的是一个字符串指针,指向一个信号的描述信息。

2023-06-14 23:06:03 53

原创 【linux 信号学习六】信号集

信号集:一个能表示多个信号的数据类型(signal set),很多系统调用都用到了这中数据类型做为参数传递,例如sigaction(),sigprocmask(),sigpending()。:初始化一个自定义信号集,与sigemptyset不同的是,该函数将所有标志位都设置为1,用于快速创建一个包含所有信号的的信号集,然后在根据需求删除不需要的信号。:初始化一个自定义的信号集,也就是将信号集中的所有标志位都置0,使得这个信号集不包含任何信号,不阻塞任何信号。:测试某一个信号是否在信号集中。

2023-06-14 22:59:56 166

原创 【linux 信号学习五】 alarm()和pause()函数

2、alarm闹钟并不能循环触发,只能触发一次,若要实现循环触发,可以在SIGALARM信号处理函数中再次调用alarm()函数设置定时器。:可以使得进程暂停运行、进入休眠状态,直到进程捕获一个信号为止,只有执行了信号处理函数并返回时,pause才返回。:设置一个定时器,当定时时间到,内核会向进程发送SIGALRM信号。返回值:-1,并且将errno设置为EINTR。1、每个进程只能设置一个alarm闹钟;

2023-06-14 22:55:09 194

原创 【linux 信号学习四】发送信号

在进程中将信号发送给另一个信号是需要权限的,信号的发送者和接收者的实际用户ID或有效用户ID必须相等。raise()相当于kill(getpid(), sig);:将信号发送给指定进程或进程组中的每一个进程。

2023-06-14 22:54:43 70

原创 【linux 信号学习三】注册信号

设置信号处理方式,推荐使用,与signal相比,sigaction更具有灵活性和可移植性。给结构体在可以使用man手册查看sigaction()函数帮助信息时,在下面会有介绍。:修改指定信号的行为,也可以用来忽略和恢复默认行为。

2023-06-14 22:52:46 151

原创 【linux信号学习二】信号量

终止进程,SIGTERM是一种由操作系统发送给进程的信号,通常用于请求该进程优雅地终止。这个信号的处理方式可以由进程自行定义,但一般来说,进程应该在收到SIGTERM信号后立即停止其正在进行的工作,并释放所有已经占用的资源,如打开的文件、分配的内存等等。SIGTERM信号可以由系统管理员或其他进程发送,例如使用kill命令将信号发送给目标进程。:在一个进程终止或停止时,将SIGCHLD信号发送给其父进程,安系统默认将忽略此信号,如果父进程希望被告知其子系统的状态,则应捕捉词信号。

2023-06-14 22:45:56 41

原创 【linux 信号学习一】信号基础

实时信号都支持排队,都是可靠信号,保证了发送多个信号都能被接收,可用于进程。进程,信号通常是发送给对应的进程的,当信号到达后,该进程做出相应的处理。不同系统信号的实际编号可能不同,所以在程序中一般使用信号的名字。新的信号发送函数:sigqueue()、sigaction():有可能会丢失的信号,信号值小于34的信号都是不可靠信号,非实时信号都不支持排队,都是不可靠信号,一般称为标准信号,

2023-06-04 16:07:04 25

原创 【sqlite3学习二】C语言操作

一般只执行一次的sql语句使用sqlite3_exec(),需要多次执行的使用sqlite3_prepare_v2,可以提高速率,例如插入和读取数据库数据。读取数据与插入数据差不多,只不过读取数据使用的是sqlite3_column_xx系列函数,该系列函数是从执行完sqlite3_step的结果的当前行中读取一列值(即某一行的某一列值)这篇主要是sqlit3的库函数使用,sql语句在上篇中,但是c的sql语句是可以使用占位符的,占位符为“?第二个参数:序号,从1开始,代表第几列。

2023-05-20 14:00:10 224

原创 【sqlite3学习一】sqlite3基本语句

主键是唯一的 ID。执行完该语句后,成功创建数据库文件后,会提供一个sqlite>提示符,此时还需要执行下面命令,如果不执行在退出sqlite后,用 ls 查看是没有数据库文件的。上面提到的where可以用来筛选数据,所以where不仅可以与select联合使用,也可以与updata、delete语句联合使用。创建数据库表需要使用CREATE关键字,还需要定义表中的列,以及列的数据类型 可以选择是否需要约束。例如:创建一个名为人员信息的表,存储姓名、年龄、性别、住址和联系方式,可以使用如下方式创建。

2023-05-20 11:01:00 790

原创 【Mongoose学习笔记一】简单使用

Mongoose是一个C/C++的网络库,它为TCP、UDP、HTTP、WebSocket、MQTT实现了事件驱动的、非阻塞的API。事件管理结构体事件管理结构,包含活动连接列表以及一些管理信息。连接结构体初始化事件管理结构体将活动连接列表设置为NULL设置IPv4和IPv6的默认DNS服务器设置默认DNS查找超时时间mgr:指向需要初始化的mg_mgr结构的指针无返回值执行单个轮询1. 查看是否有传入数据。

2023-05-07 22:53:57 1247

原创 命令行解析函数

命令行参数解析分为两类,一类是短选项,一类是长选项。短选项为在参数前加"-",长选项是在参数前加“–”。函数定义*参数argc和argv,这两个参数和main函数中的 两个参数相同optstring:表示短选项字符串字符串形式: 冒号含义:longopts:长选项结构体结构体中各参数含义:全局变量(1)optarg:表示当前选项对应的参数值(2)optind:表示的是下一个将被处理到的参数在argv中的下标值(3)optopt:表示没有未标识的选项返回值(1)如果短选项找到,返回短选项对

2023-04-18 23:50:24 116

原创 linux 读写文件函数

头文件:stdio.h。

2023-04-15 01:08:09 264

原创 VMware网络连接问题

解决办法:删除 /var/lib/

2023-04-09 22:42:30 137

原创 正点原子I.mx6u LCD显示

RGB LCD一般有两种驱动模式:DE模式和HV模式,这两种模式的区别是DE需要用到DE信号线,但是可以不需要使用HSYNC信号线;HV模式不需要使用DE信号线。4.LCD显示器一帧图像扫描图一帧图像是由一行一行组成的。

2023-04-09 15:33:27 699

原创 编译使用命令

预处理 -> 编译 -> 汇编 -> 链接。

2023-04-09 15:32:45 244

原创 modbus协议简介

Modbus是一种串行通信协议,通常运用在电子设备之间的通信上。modbus原本是针对PLC通信问题设计的,目前该协议主要用在串口、以太网和其他互联网协议的网络。常采用TCP或485串口通信。modbus是一个master/slave(server/client)架构的协议,即主从结构。有且只有一个主机,每一个从机都有一个唯一的设备地址。

2023-04-09 15:29:06 2150

原创 VMware桥接模式配置

主机和虚拟机之间想要互相通信,必须保证虚拟机和主机处在同一网段。虚拟机要关闭防火墙。首先查看虚拟机IP和主机IP是否处于同一网段。若不处于同一网段,修改虚拟机IP地址,使两者处于同一网段。若不处于同一网段则尝试下面修改。

2023-04-09 11:04:25 589

原创 IMX6UL-I2C

I2C是一种常用总线协议,由NXP公司设计,主从模式,由主机发起通信。I2C使用两条线进行数据传输,一条是SCL(串行时钟线),另外一条是SDA(数据线),这两条数据线需要接上拉电阻。与标准I2C兼容多主机运行软件可编程的64种不同的串行时钟序列软件可选择的应答位开始/结束信号生成和检测重复开始信号生成确认位生成总线忙检测三合一环境传感器,支持环境光强度(ALS),接近距离(PS)和红外强度(IR)。I2C接口,快速模式下波特率可以达到400Kbit/S。

2023-03-21 22:43:02 277

原创 makefile基础

make编译

2023-02-22 09:57:07 415

rust代码与c代码相互调用,rust调用c动态库静态库,以及rust代码之间的相互引用

rust代码与c代码相互调用,rust调用c动态库静态库,以及rust代码之间的相互引用

2024-01-16

空空如也

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

TA关注的人

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