自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 正点原子DAP仿真器连接

仿真器连接成功时,仿真器上的小灯颜色未蓝色,如果小灯颜色为蓝紫色,则仿真器连接失败。正点原子的DAP仿真器连接失败时可以尝试使用下面方式。3)仿真器与开发板连接(此时仿真器未与电脑连接)1)开发板断电,断开DAP与开发版的连接。2)开发板上电(此时仿真器未与开发板连接)4)连接仿真器与电脑端。

2025-02-11 22:16:39 161

原创 keil 使用hal库编译报错“declaration may not appear after executable statement in block”

keil默认的编译器使用的是c89/c90,不允许出现变量在可执行语句之后的,如果想使用变量出现在语句之后,可以配置keil使用c90编译器。声明出现在了可执行语句之后。

2025-02-10 21:59:18 118

原创 【MQTT 编程】-API

前面提到了“同步发布消息”这个概念,既然有同步发布,那必然有异步发布,确实如何!就是通过 MQTTClient_connectOptions 对象中的 reliable 成员控制的,这是一个布尔值,当 reliable=1 时使用同步方式发布消息,意味着必须完成当前正在发布的消息(收到确认)之后才能发布另一个消息;如果选择的是 MQTTCLIENT_PERSISTENCE_DEFAULT 持久化类型,则该参数应设置为持久化目录的位置,如果设置为 NULL,则持久化目录就是客户端应用程序的工作目录。

2024-12-17 21:49:42 869

原创 【Cmake】

【代码】【Cmake】

2024-12-16 17:44:41 240

原创 【网络开发-socket编程】

目录下的头文件是系统级头文件,通常用于系统调用、驱动开发和内核模块开发。:基本的数据类型:套接字编程相关的函数和数据结构。

2024-12-12 20:00:56 882

原创 【IO操作】异步IO(信号驱动IO)

异步IO是计算机程序中处理输入、输出的操作方式,允许程序在等待io操作完成时,不必阻塞当前线程,可以继续执行其他任务。在异步IO中,当文件描述符可以执行IO操作时,进程请求内核向自己发送一个信号,之后进程就可以执行其他任务,直到文件描述符可以执行I/O操作,内核会给进程发送信号,进程在接收到这个信号之后,执行回调函数,执行对IO的处理。异步IO相当于是一个软中断,即接收到信号之后,去处理相应内容。

2024-10-09 13:26:06 325

原创 【应用开发三】 input子系统介绍

对于触摸屏来说,一个触摸点的信息包含x坐标和y坐标以及其他信息,但是,一次read只能读取一个信息,此时就遇到一个问题,那就是用户如何知道一个触摸点信息已经读取完毕了呢?触摸屏设备是一种绝对位移设备,产生绝对位移事件,对于触摸屏来说,一个触摸点所包含的信息有很多中,例如触摸点坐标(x,y,z)、按压力大小、接触面积等。code表示该类事件中的哪一个具体事件,type中的每中类型事件都包含一系列的具体事件,例如按键类,就包含A、B、C、D等具体事件。该程序使用的是阻塞式读取,在没有数据时,程序会等待数据。

2024-09-20 18:08:33 1022

原创 【rust】rust条件编译

这一步相当于C语言中的变量的定义,即功能。在cargo.toml文件中使用feature[features]dbug = []udug = []上述代码相当于是有了两个编译条件。

2024-09-18 15:58:37 972

原创 【应用开发】解决正点原子I.MX6ull应用编程zlib移植问题

在正点原子应用开发移植zlib库的时候,文档中有这样一段描述,先删除开发板中的zlib库,然后再拷贝zlib库这就会导致在使用scp命令拷贝编译好的zlib库的时候报错没有zlib.so.1。

2024-08-27 22:20:13 471

原创 rust 终端显示综合例程

这个包装器库提供了一个安全的接口,使用User和Group类型和函数,如get_user_by_uid,而不是低级指针和字符串。由于users表更改的频率非常低,因此对于短时间运行的程序来说,通常会缓存结果,而不是每次都获取最新的条目。在Unix中,每个用户都有一个单独的用户ID,每个进程都有一个有效的用户ID,表明它正在使用哪个用户的权限。此外,用户可以是组的成员,组也有名称和id。标准中,这些码通常用于控制终端的文本输出。跨平台终端操作库,纯rust库,可以编写跨平台的基于文本的界面。

2024-07-03 17:58:46 933 6

原创 【应用开发二】GPIO操控(输出、输入、中断)

GPIO 引脚在使用之前,需要将其导出,导出成功之后才能使用。注:并不是所有的文件夹都可以导出成功,如果引脚在内核中被使用了,就会导出失败。当引脚被设置为中断后,使用poll()函数监听引脚的电平状态变化。使用完GPIO引脚之后,需要将导出的引脚删除,同样该文件为。删除成功之后,之前生成的GPIO文件就会消失!功能:用于将指定编号的GPIO引脚导出。文件中,即可将对应GPIO引脚导出。的文件夹用于管理、控制GPIO引脚。:配置gpio引脚输入输出模式。功能:删除导出的GPIO引脚。

2024-06-28 22:54:55 899

原创 【应用开发一】LED开发

进入到目录下,该目录中存放着所有的LED设备,目录如下图所示:可以看到该目录中有一个sys-led的文件夹,这个就是底板上LED的设备文件,该目录下文件如下图所示:这里主要关注brightness、max_brightness以及trigger三个文件,这三个都是LED的属性文件。brightness:亮度可读可写,设置led的亮度等级,0:灭正整数:pwm控制的led:值越大,led越亮GPIO控制的led:亮:最大亮度等级只读文件trigger:触发模式。

2024-06-25 20:18:22 992

原创 【gdb使用】

当程序在某一出停止后,用该指令继续执行,直到遇到断点或者程序结束。若要使用gdb调试代码,在代码编译时需要添加。:遇到循环体时,可以使用改命令跳出循环体。:如果有函数,进入函数内部执行,否则和。:n为行号,该命令使程序运行直第n行。有时候断点需要再运行程序之前打。:命令一行一行的执行。gdb bin文件名。

2024-06-17 17:18:43 207

原创 【rust 第三方库】serde 序列化反序列化框架

Serde是主流的rust序列化、反序列化框架。设计上,基于rust的静态类型系统和元编程(宏)的能力,使Serde序列化的执行速度与手写序列化器的速度相同。使用上及其简单用户为自己的类型实现Serialize和特质即可(大多数使用derive宏实现)序列化提供商,提供Serializer和特征的实现即可。若要数据类型支持序列化和反序列化,则该类型需要实现Serialize和trait。Serde提供了rust基础类型和标准库类型的Serialize和实现。对于自定义类型,可以自行实现。

2024-06-11 16:53:20 1739 7

原创 rust clap库(命令行解析)

CLI(Commang Line Interface,命令行界面)始终允许用户通过文本命令与计算机程序活操作系统进行交互的接口。与图形用户界面(GUI,Graphical User Interface)相比,CLI不提供图形元素,用户通过键盘输入特定的命令指令,命令行界面解释这些指令并执行响应操作。直观易用简洁的命令语法:命令和参数的设计应直观易懂,方便用户记忆使用自动补全:支持命令和参数自动补全功能,提高用户输入效率命令别名:提供常用命令的简短别名,减少输入工作量强大的帮助系统。

2024-06-11 09:46:00 1334

原创 【rust工具链】

版本,也可以看到已安装的所有版本的工具链。从图中可以看到正在使用的是。

2024-05-26 10:07:10 593

原创 【系统移植三】根文件系统构建

1)源码路径:1、例程源码->6、BusyBox 源码->busybox-1.29.0.tar.bz2。

2024-05-22 21:16:25 1013

原创 根文件系统简介

根文件系统也叫做rootfs,Linux的根文件系统更像是一个文件夹或者目录,在这个文件夹中有很多子目录。跟目录下和子目录中会有很多文件,这些文件时linux运行所必须的,比如库、常用软件和命令、设备文件、配置文件等。根文件系统首先是内核启动时所mount(挂在)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导程序会在根文件系统挂在之后把一些基本的初始化脚本和服务等加载到内存中去运行在嵌入式linux中,内核代码并没有保存在根文件系统中,而是保存在了其他地方,例如NAND Flash。

2024-05-20 21:51:14 462

原创 【系统移植二】内核移植

1)源码路径:1、例程源码->4、NXP 官方原版Uboot和Linux->linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz22)解压,重命名。

2024-05-19 11:38:59 1204

原创 C函数总结

一般情况下只需要传递一个参数,第二个参数传NULL,

2024-05-14 20:52:46 241

原创 【系统移植一】uboot移植

开发板类型:emmc、7寸屏1)源码路径:1、例程源码->4、NXP 官方原版 Uboot 和 Linux -> uboot-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。2)将源码拷贝到ubuntu中的目录下,解压。解压后入下图所示:1 配置在编译之前首先要配置uboot,uboot的配置文件在configs目录下,因为开发是使用的是14x14mm尺寸的芯片,emmc版本,所以关注官方的配置文件。2 编译编写脚本,内如如下给脚本可执行权限,执行脚本3 烧写验证1)

2024-04-18 22:10:27 1176

原创 【系统移植二】正点原子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 461

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

1)原因:因为ubuntu的nfs版本为version4,而板子的nfs版本为version2,所以直接挂载上去无法识别。就是创建的tftp文件夹目录,可以将需要使用TFTP传输的文件放在这个文件夹中,并且。一定要给文件夹权限,否则uboot无法从tftpboot文件夹下载文件。exports配置常用参数。使用如下命令重启nfs服务。打开nfs的配置文件。

2024-04-07 22:30:42 369

原创 【bash自动补全原理】

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

2024-04-07 17:05:37 687

原创 【系统移植 一】 正点原子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 534

原创 【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 2083

原创 bash配置文件

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

2023-12-20 14:34:02 329

原创 【基本定时器】二

用定时器产生定时时间。

2023-11-25 15:11:24 621 1

原创 【基本定时器】一

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

2023-11-25 14:27:14 208

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

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

2023-07-08 18:43:26 2219

原创 【MQTT 学习二】主题

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

2023-07-08 16:36:57 443

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

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

2023-07-08 16:02:24 1541

原创 【进程 一】何为进程

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

2023-07-04 18:05:18 72

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

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

2023-06-15 09:40:11 178

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

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

2023-06-14 23:15:26 360

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

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

2023-06-14 23:13:54 153

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

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

2023-06-14 23:09:25 401

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

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

2023-06-14 23:08:09 266

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

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

2023-06-14 23:06:03 103

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

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

2023-06-14 22:59:56 298

rustrust条件编译

rust条件编译示例

2024-09-18

rust终端显示内容显示不同颜色综合使用demo

终端显示库综合使用demo

2024-07-03

rust终端显示库demo

rust终端显示库demo

2024-07-03

rust serde 序列化反序列化

使用serde库和serde_yaml库序列化反序列化结构体、枚举,包扩自定义反序列化

2024-06-11

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

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

2024-01-16

空空如也

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

TA关注的人

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