自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 全志H616—判断某程序是否在运行

代码思路:将需要判断的可执行的文件当作参数传入到改代码中,通过。

2025-11-19 20:09:20 126

原创 全志H616开发—udev的作用和守护进程

udev 是一个 Linux 内核的设备管理器并以守护进程的形式运行,通过监听内核发出来的 uevent 来管理 /dev 目录下的设备文件。udev 在用户空间运行,而不在内核空间运行。它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在 /dev 目录下。使用 udev 后,在 /dev 目录下就只包含系统中真正存在的设备。

2025-11-14 19:35:47 540

原创 全志H616开发—定时器,SG90舵机

使用舵机就离不开定时器,因为舵机的使用是依靠定时器输出特定时间的高电平,在 Linux 里可以使用两个。第三个参数 old_value:用于获取之前设置的定时器值,如果不需要就填 NULL。

2025-11-09 16:11:19 238

原创 全志H616—蜂鸣器,初次使用OrangePi Zero2

打开 MobaXterm 并将单片机与 PC 连接成功后,将下面代码输入到终端自动下载完毕之后,进入文件使用超级权限清除编译信息最后编译即可通过验证是否安装成功,如果安装成功,会有以下输出:上面是开发板的引脚图,1 ~ 34 是单片机的引脚序号,它真正的引脚号是 wPi。通过以上步骤,官方的外设库就安装完毕。

2025-11-09 10:48:32 317

原创 Orangepi Zero2—全志H616开发

Orangepi Zero 2 是一款高性能、小巧且成本效益高的单板计算机,其核心就是全志 H616 SoC(System on a chip)。这款芯片可以看作是之前非常流行的 H6 系列的升级和优化版本。下图是 Orangepi Zero2 开发板所集成的硬件功能:CPU 全志 H616 四核 64 位 1.5GHz 高性能 Cortex-A53 处理器运行内存 1GB DDR3(与 GPU 共享)存储 TF 卡插槽,本人所使用的内存大小为 64 GB。

2025-11-06 18:13:15 475

原创 Socket网络编程

struct sockaddr *addr:重新定义一个初始化为 0 的结构体,来装载客户端的地址信息,通常使用 struct sockaddr_in,然后强制转换。管道、共享内存、消息队列、信号和信号量这些交流方式都是基于单机上的进程间通信,网络编程是在多台机器上的进程之间的交流。网络的联系方两个:服务端(等待客户端的连接)和客户端(连接服务端),客户端通过服务端给出的 IP 地址和端口号进行连接。addrlen:新定义的结构体的长度指针,填入该项的是一个地址。sockfd:需要绑定的套接字描述符。

2025-11-01 16:46:09 903

原创 Linux线程

典型的 UNIX/Linux 进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻做不止一件事,每个线程各自处理独立的任务。进程是程序执行时的一个实例,是担当分配系统资源(CPU 时间、内存等)的基本单位。程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。线程是操作系统能够进行运算调度的最小单位。总结:进程——资源分配的最小单位,线程——程序执行的最小单位。

2025-10-29 22:32:27 753

原创 进程间通信

进程间通信(IPC,InterProcess Communication),指的是在不同进程之间传播或交换信息。IPC 的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket 和 Streams 支持不同主机上的两个进程 IPC,以 Linux 中的 C 语言为例。

2025-10-28 16:32:42 1003

原创 system函数、popen函数与fprintf函数

execl 函数调用成功之后不会返回,只有 execl 函数调用失败才会回到原来的点执行。一个"有地址的打印机",告诉它把什么内容打印到哪里。

2025-10-25 03:28:20 415

原创 exec族配合fork函数使用

当进程调用一种 exec 函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用 exec 并不创建新进程,所以调用 exec 前后该进程的 id 并未改变。exec 函数族的函数执行成功后不会返回,调用失败时,会设置 errno 并返回 -1,然后从原程序的调用点接着往下执行。编译 exchange.c 文件并生成文件名为 exchange 可执行文件。使用 execl 函数实现。

2025-10-24 02:32:56 405

原创 vfork函数创建新进程、exit函数退出进程与wait函数获取子进程的结果

vfork 函数也能生成一个新的进程,但是该函数会让子进程先运行,当子进程调用了 exit 等函数退出时,才轮到父进程。为了避免僵尸进程的发生,父进程需调用 wait 函数来了解子进程究竟完成得如何,wait 函数让父进程等待任意一个子进程结束,并回收该子进程的资源,它的函数原型是。它的返回值如果是 -1,说明回收失败,返回值是非 -1,说明成功返回被回收子进程的 pid;当一个子进程需要结束时,必须调用 exit 函数,若不调用,子进程所修改的值,不会正常交给父进程,这会导致数据的传输错误。

2025-10-21 03:10:29 458

原创 进程:父进程与子进程

意思是在磁盘中生成一个叫 pro 的文件,这个就叫程序;进程是动态的概念,程序跑起来就叫进程,每运行一个程序,系统就多一个进程。

2025-10-20 03:30:34 737

原创 将一个结构体写入到文件

【代码】将一个结构体写入到文件。

2025-10-19 13:07:23 143

原创 复刻cp指令

【代码】复刻cp指令。

2025-10-18 16:06:02 234

原创 文件光标的移动

文件光标类似于鼠标,在写完文件之后,光标会来到文件的结尾,需要手动去调整光标的位置,在先前的博客中,创建完文件,写入数据后,需要先关闭文件重新打开文件,这样才能将光标刷新到文件的开头以读取文件大小。在本章节中可以直接使用移动光标的函数,来减少代码冗余。

2025-10-18 13:56:45 392

原创 对文件的打开、创建、写入和读取操作

在 Ubuntu 的终端中,通过编写 C 语言程序也可以实现打开文件,并对其进行编写,首先创建一个编写代码的环境,并在里面调用打开文件的函数。,对特定的文件写入、读取就是依靠文件描述符来确定文件。读取上一小节所写入的大小使用。该函数是返回一个整数是它的。

2025-10-17 22:16:19 555

原创 Linux虚拟机与Windows之间的文件传输,修改IP地址

Share 文件夹中有以下文件,在 Linux 中查看也一样。两边的文件相互拖拽即可使用。

2025-10-17 15:58:22 287

原创 Linux常用的初级指令

2025-10-17 14:54:14 213

原创 对LED点灯实验的C与汇编的深入分析,提及到volatile

【代码】对LED点灯实验的C与汇编的深入分析,提及到volatile。

2025-09-30 15:14:22 342

原创 汇编和反汇编

汇编:汇编文件转换为目标文件(里面是机器码);反汇编:可执行文件(目标文件,里面是机器码),转换成汇编文件。其中 sp 是 R13 寄存器,对应 Rt 的 12 ~ 15 位是 13,因此 12 ~ 15 位是 1101;0 ~ 11 位是表示一个立即数,pc + 4,正好对应 0 ~ 11 位全部加起来等于 4。.S 文件经过汇编之后得到机器码,机器看得懂的代码,链接之后再反汇编得到含汇编的代码,通过阅读反汇编得到最终可执行的代码,了解更深层次的内容。F103 板子是 Thumb-2 指令,

2025-09-30 13:16:27 366

原创 字节序和位操作

【代码】字节序和位操作。

2025-09-29 21:47:04 315

原创 内存访问和数据处理指令

对于内存访问的指令有两个,一个是读 LDR:Load Register,一个是写 STR:Store Register。这两个指令里面的字母 M 表示多个的意思,使用这类指令可以读取或写入多个值在寄存器列表中。组合后,就有4种方式:满增、满减、空增、空减。下面举例验证一下,注意。

2025-09-28 18:49:27 424

原创 指令集、立即数和伪指令

ARM 指令集:32位,高效但占据空间Thumb 指令集:16位,节省空间内存的读写操作运算跳转 / 分支:调用函数等比较:if 语句等这些就是所谓的指令集。

2025-09-28 14:57:02 1030

原创 ARM内部寄存器

CPU内部的寄存器是超高速、容量极小的临时存储单元,专用于存放当前正在执行的指令和运算数据。CPU 访问内部的寄存器时,不需要寻址,直接进行访问。CPU 计算的时候,在某个内存将变量读进来,做运算,再写回去,读进来和做运算的操作,实际上是将变量的值,读到CPU 内部的寄存器里面进行保存和运算。

2025-09-26 23:37:50 711

原创 x86和ARM里的地址空间

在 x86 架构的 CPU 里,内存空间和 IO 空间是不一样的,如果需要访问相同的地址时,使用不同的指令区分内存空间或是 IO 空间,如下图所示:使用 MOV 指令,意味着 CPU 寻到的地址是内存空间;使用 IN AL 指令,寻到的地址是 IO 空间。在 CPU 的角度上看,内存和其他的外设地址是在同一个地址空间里面,因此它的访问方法是一样的,CPU 只管发送一个地址交给内存控制器,再由内存控制器找到该内存所在的区域。但是对于程序员来说,程序员看不见“微程序”,看起来就像使用了一条指令就能够达到目标。

2025-09-26 22:26:45 513

原创 点亮第一个LED灯

使用外设之前,必须查看手册,了解了 GPIO 的基地址和偏移值,即可操控某个寄存器。RCC_APB2ENR 的基地址加上偏移地址:0x40021000+0x18,就是该寄存器的绝对地址。配置 IO13,控制 20 ~ 23 位寄存器即可,CNF13 配置为 00 为通用推挽输出模式,MODE13 配置为 11 为最大输出速度。通过手册里面的介绍,每个寄存器都会有它的地址,它的绝对地址是基地址 + 偏移地址。红色框是 RCC 的基地址,用来开启 GPIOC 的时钟。

2025-09-17 16:01:04 414

原创 基于STM32+FreeRTOS的四轴机械臂

本次项目的实现功能有:机械臂的手动操作模式即摇杆模式;用户操作电脑通过串口输入指令给芯片,使模式更改为学习模式,并将记录下来的动作存放起来,通过再次发送指令让机械臂自己工作;通过 FreeRTOS 的多任务执行,让 OLED 显示当前模式和当前的角度值,还有串口的发送。

2025-09-04 17:19:37 1467

原创 STM32—SPI协议

具有时钟线 SCK 是同步通信,发送和接收都分别有单独的一根线 MOSI 和 MISO 是全双工模式,支持总线挂载多设备(一主多从)。W25Qxx 系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景。存储介质:Nor Flash(闪存),时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)。

2025-09-02 16:11:15 1122

原创 SH-S34A双轴摇杆

双轴摇杆模块由 X 轴和 Y 轴,还有一个按键组成,实际上这两个轴是一个电位器,通过调节电阻值来改变模数转换的值,下按遥杆是一个普通的按键。

2025-09-02 12:00:19 605

原创 SG90舵机

SG90 是一款常见、价格低廉的微型舵机,因其小巧的体积和低廉的成本,被广泛应用于机器人、遥控模型、智能小车和创客项目中。在一些小项目中,可以把它理解为一个控制转动角度的微型电机。

2025-09-02 11:12:25 682

原创 STM32—DMA直接存储器存取

DMA(Direct Memory Access)也叫直接存储器存取,DMA 可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须 CPU 干预,节省了 CPU 的资源,它的核心目的就是为 CPU 减负,实现数据的高速、后台传输。解放CPU:CPU 只需要配置和启动 DMA,之后就可以去执行其他代码,数据传输由 DMA 控制器完成提高效率:尤其适用于大量数据或高速数据流传输的场景(如 ADC 采样、UART 通信、SPI / I2C 读取传感器等)

2025-08-22 19:46:06 1402

原创 双环PID实现倒立摆实验

下图是倒立摆的稳定状态,通过下面的编码器,左右转动横杆,使得活动杆左右摇摆,将摆杆摆至顶端,然后由双环 PID 的输出值控制摆杆竖直向上,通过角度传感器判断摆杆杆是否在顶端或是在左右两边。

2025-08-18 21:17:33 1253

原创 电位器式角度传感器

电位器式角度传感器是一种基于可变电阻(电位器)原理的角度测量装置,通过机械旋转改变电阻值,从而输出与角度成比例的电信号(通常为电压或电流)。

2025-08-18 16:18:46 546

原创 双环PID

多环 PID 相较于单环 PID,功能上,可以实现对更多物理量的控制,性能上,可以使系统拥有更高的准确性(不会产生稳态误差)、稳定性和响应速度;单环 PID 只能对被控对象的一个物理量进行闭环控制,而当用户需要对被控对象的多个维度物理量(例如:速度、位置、角度等)进行控制时,则需要多个 PID 控制环路,即多环 PID,多个 PID 串级连接,因此也称作串级 PID。

2025-08-18 11:37:03 1587

原创 PID控制算法

PID(比例-积分-微分)控制器是一种广泛应用于工业控制系统的反馈控制算法,PID 是一种闭环控制算法,它动态改变施加到被控对象的输出值(Out),使得被控对象某一物理量的实际值(Actual),能够快速、准确、稳定地跟踪到指定的目标值(Target)。PID 是一种基于误差(Error)调控的算法,其中规定:误差=目标值-实际值,PID 的任务是使误差始终为 0,对被控对象模型要求低,无需建模,即使被控对象内部运作规律不明确,PID 也能进行调控。P:眼睛看到偏离车道,立即打方向盘修正(现在)

2025-08-15 22:04:30 1043

原创 嵌入式概念及硬件构成

一块芯片里集成了许多模块,例如 SPI 模块,CPU 上电之后如何使用 SPI 模块,SPI 模块不是 XIP(eXecute In Place)设备,也就是不能直接从它的 Flash 里面启动,这个时候就涉及到 ROM(Read-Only Memory)和 RAM(Random Access Memory),CPU 只能在 ROM 里面找到 SPI 的启动代码进行运行。在个人电脑领域,可以看到类似下图的主板。一般将 MCU 用于某个专业的功能,例如测温度、湿度等等,这样可以减少生产的成本。

2025-08-12 17:03:48 500

原创 STM32—CAN总线

CAN 总线(Controller Area Network,控制器局域网)是一种广泛应用于汽车、工业控制等领域的串行通信协议,由德国博世(Bosch)公司在 1980 年代开发,主要用于设备间的实时数据交换,当一个设备发送信息给 CAN 总线上,当这个信息通过了一些接收设备的过滤器,则接收设备就会收到发送设备的信息,如果多个接收设备都符合接收的条件,则有多个接收设备;两根通信线(CAN_H、CAN_L),线路少差分信号通信,抗干扰能力强。

2025-08-06 11:48:35 1217

原创 FreeRTOS—Tickless低功耗模式

Tickless(无系统节拍) 是一种用于实时操作系统(RTOS,如FreeRTOS、RT-Thread等)的低功耗技术,它通过动态调整 SysTick 来减少不必要的 CPU 唤醒,从而降低功耗。Tickless 模式:当系统进入空闲状态时,RTOS 会计算下一个任务的最早唤醒时间,并暂时关闭 SysTick,让 CPU 进入低功耗状态(如睡眠模式)。在任务就绪前,再通过低功耗定时器(如RTC 或 LPTIM)唤醒 CPU。其实 Tickless 低功耗模式的本质是通过调用指令 WFI 实现睡眠模式。

2025-07-30 16:57:33 1349

原创 FreeRTOS—软件定时器

定时器,就是一个闹钟,从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可自定义定时器的周期。硬件定时器:芯片本身自带的定时器模块,硬件定时器的精度一般很高,每次在定时时间到达之后就会自动触发一个中断,用户在中断服务函数中处理信息。硬件定时器属于外设,数量有限软件定时器:是指具有定时功能的软件,可以设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息。软件定时的数量理论上来说可以有无限个,由用户自定设定软件定时器的数量。

2025-07-30 14:48:29 1214

原创 FreeRTOS—任务通知

任务通知是用来通知任务的,任务控制块(TCB)中的结构体成员变量就是这个通知值。使用任务通知时,任务结构体就包含了内部对象,可以直接接收别人发过来的通知使用队列、信号量、事件标志组时都需另外创建一个结构体,通过中间的结构体进行简介通信。

2025-07-29 16:47:42 1202

空空如也

空空如也

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

TA关注的人

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