- 博客(262)
- 收藏
- 关注
原创 Motocycle 智能仪表盘
在实习期间参与了一个摩托车智能仪表盘项目,在这里我将介绍一下整个项目的 demo,并拿 WIFI、BT、Audio 功能模块示例。该项目主要包括 JS 应用层,C-JS binding 层,Native Services 层和 Linux 内核驱动层。
2025-08-21 16:56:47
1024
1
原创 Linux应用 / 驱动程序崩溃调试
我们在使用 Linux 操作系统做项目的时候,当项目比较复杂,工程比较多的时候,编译运行程序很多时候会出现 bug。这个 bug 可能在运行时立马出现,导致段错误,也可能运行时直接导致程序崩溃,也可能在运行一段时间后程序崩溃,有时候遇到这种莫名其妙的错误会导致我们无从下手。那么我们就需要使用调试工具或者方法来快速定位问题,通过调试,开发者可以快速定位和修复问题,减少开发和测试的时间,提高开发效率。
2025-03-17 21:33:02
1198
1
原创 基于 RK3568 / IMX6ULL / STM32MP157 的智能车载系统
基于 RK3568 / IMX6ULL / STM32MP157 的智能车载系统完整代码该项目的源代码适用于韦东山老师的开发板,使用韦东山老师的 RK3568 ,IMX6ULL,STM32MP157 开发板可以直接运行代码复刻,其它开发板需要自行移植,原理都一样。该项目通过上位机 QT 界面实现简易车载系统,能够进行 GPS 定位,天气预报,音乐播放,视频播放,环境监测等功能。
2025-03-03 19:29:53
1881
2
原创 基于 IMX6ULL 的环境监测自主调控系统
基于 IMX6ULL 的环境监测自主调控系统完整代码该项目的源代码适用于韦东山老师提供的出厂镜像,使用韦东山老师的 IMX6ULL 开发板可以直接运行代码复刻,其它开发板需要自行移植。作者在去年实习期间做了与 Linux 相关的项目,在这里我用韦东山老师的 IMX6ULL 开发板把用到的关键技术展现出来,主要用到 Linux 驱动,QT界面设计,JsonRPC 前后台分离。该项目主要使用 JsonRPC 把程序拆分为前台QT和后台APP,实现远程数据采集,设备控制和设备自动化运行等功能。
2025-02-24 23:59:44
1632
原创 G2D 图形加速器
G2D模块主要实现图像旋转、数据格式、颜⾊空间转换、图像压缩, 以及图层合成功能 (包括 alpha、colorkey、 rotate、mirror、rop 和 maskblt) 等加速功能。术语解释:填充矩形区域功能可以实现对某块区域进行预订的颜色值填充,如下图就填充了 0xFF0080FF ARGB 值,该功能还可以通过设定数据区域大小实现画点和直线,同时也可以通过设定 flag 实现一种填充颜色和目标做 alpha 运算。旋转镜像主要是实现如下 Horizontal、Vertical、Rotate18
2025-09-04 22:24:20
897
原创 UBUS 轻量级 IPC 框架和原理详解
ubus(OpenWrt微总线)是OpenWrt中轻量级的进程间通信(IPC)框架,基于Unix域套接字和JSON-RPC协议。ubusd:核心守护进程,管理消息路由。libubus:C语言库,提供API。ubus命令行工具:用于调试和交互。多语言绑定:支持C(原生)、Lua、Shell、JavaScript(如JerryScript)。
2025-08-19 17:27:20
1561
1
原创 视频输入输出模块介绍和示例
涉及 V4l2 驱动部分的知识在这里不深入讲解,后面有时间再深入分析一下。VIN camera 驱动使用过程可简单的看成是 vin 模块 + device 模块 + af driver + flash 控制模块的方式。以全志为例,在全志 V853 芯片中,ISP组 件在使用过程中是支持分时复用的,ISP 分时复用周期图如下所示:isp00/isp01/isp02/isp03 分别代表一个周期的1/4,每一个周期中的会被分为4等分,当该周期运行到那一等分的时候,就会去连接到一个摄像头并采集图像数据。通过分
2025-08-12 20:30:20
1136
1
原创 Linux syslog 使用方法
使用setlogmask(LOG_UPTO(log_level))设置日志掩码(只记录高于或等于指定级别的日志)宏是通过位操作来实现的,它会根据传参生成一个掩码。编译生成:syslog 可执行程序和可加载的内核模块。驱动层:syslog_demo_kernel.c。应用层:syslog_demo_user.c。运行两次,预计打印两次 log 信息。应用示例:在终端输入以下命令。
2025-08-04 10:59:44
1578
原创 使用 Buildroot 构建文件系统
使用 busybox 构建文件系统但是 busybox 构建的文件系统很多东西需要自己交叉编译添加,某些软件需要自己去移植,所以移植过程是非常繁琐的。有另外一种非常实用的根文件系统构建方法——使用 Buildroot 来构建根文件系统。Buildroot 不仅集成了 busybox,而且还集成了各种常见的第三方库和软件,需要什么软件,选择哪个软件就好。Buildroot 介绍和实操接下来我们直接使用 Buildroot 来制作根文件系统。如何决定是否编译某些包:菜单内容来自哪里?
2025-07-09 14:38:31
2531
2
原创 Buildroot 介绍和实操
在上篇文章我介绍了如何使用 busybox 来构建文件系统,但是 busybox 构建的文件系统很多东西需要自己交叉编译添加,某些软件需要自己去移植,所以移植过程是非常繁琐的。使用Busybox制作根文件系统还有另外一种非常实用的根文件系统构建方法——使用 Buildroot 来构建根文件系统。Buildroot 不仅集成了 busybox,而且还集成了各种常见的第三方库和软件,需要什么软件,选择哪个软件就好,Buildroot 上手门槛低,极大的方便了嵌入式Linux开发人员构建根文件系统。
2025-07-08 11:42:19
1661
原创 嵌入式Linux根文件系统制作
一个完整的嵌入式Linux系统,包含uboot,Linux内核,根文件系统三个部分。其启动顺序为,在系统刚一上电的时候,先执行uboot,由uboot引导内核,内核启动成功之后挂载根文件系统。根文件系统挂载成功以后,嵌入式Linux系统就启动成功了。在开发板上看到的现象是:用户可以在串口控制台上输入命令与Linux系统进行交互。可以将文件系统在字面上分为俩部分来理解,一部分是文件,一部分是系统。那文件系统是不是可以理解成是组织和管理文件的一个系统呢。
2025-07-07 10:20:59
1155
原创 内存映射和共享内存
如果想要实现进程间通信,可以通过函数创建一块内存映射区,和管道不同的是管道对应的内存空间在内核中,而内存映射区对应的内存空间在进程的用户区(用于加载动态库的那个区域),也就是说进程间通信使用的内存映射区不是一块,而是在每个进程内部都有一块。由于每个进程的地址空间是独立的,各个进程之间也不能直接访问对方的内存映射区,需要通信的进程需要将各自的内存映射区和同一个磁盘文件进行映射,这样进程之间就可以通过磁盘文件这个唯一的桥梁完成数据的交互了。准备好进程A, 和进程B, 这两个进程需要和创建的共享内存进行关联。
2025-05-24 09:46:10
916
1
原创 Linux 进程控制总结
从严格意义上来讲,程序和进程是两个不同的概念,他们的状态,占用的系统资源都是不同的。程序:就是磁盘上的可执行文件文件, 并且只占用磁盘上的空间,是一个静态的概念。进程:被执行之后的程序叫做进程,不占用磁盘空间,需要消耗系统的内存,CPU资源,每个运行的进程的都对应一个属于自己的虚拟地址空间,这是一个动态的概念。
2025-05-23 14:04:31
793
原创 C / C++ 线程同步和线程池
假设有4个线程A、B、C、D,当前一个线程A对内存中的共享资源进行访问的时候,其他线程B, C, D都不可以对这块内存进行操作,直到线程A对这块内存访问完毕为止,B,C,D中的一个才能访问这块内存,剩余的两个需要继续阻塞等待,以此类推,直至所有的线程都对这块内存操作完毕。我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。
2025-05-20 10:00:35
1029
1
原创 Linux静态库和动态库
不管是 Linux 还是 Windows 中的库文件其本质和工作模式都是相同的, 只不过在不同的平台上库对应的文件格式和文件后缀不同。程序中调用的库有两种,分别是静态库和动态库。不管是哪种库文件本质是还是源文件,只不过是二进制格式只有计算机能够识别。在项目中使用库一般有两个目的,一个是为了使程序更加简洁不需要在项目中维护太多的源文件,另一方面是为了源代码保密,毕竟不是所有人都想把自己编写的程序开源出来。
2025-05-16 15:48:21
923
1
原创 JSON-C库开发和使用
本文档是基于json-c库对数据交换进行开发所编写的开发指南,及详细解释json-c库中常用api。适用于开发人员使用c语言对json的编程。(注:此文档json-c库版本为0.8——json-c-0.8)JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
2025-05-14 11:35:14
1078
1
原创 Valgrind——内存调试和性能分析工具
Valgrind是一套开放源代码(GPL V2)的仿真调试工具集合,由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),模拟了一个CPU环境,并提供服务给其他工具;而其他工具则类似于插件(plug-in),利用内核提供的服务完成各种特定的内存调试任务。Valgrind 是一个强大的内存调试和性能分析工具,广泛用于 Linux 系统上的程序开发和测试。它可以帮助开发者检测内存泄漏、数组越界、未初始化变量等问题,并提供详细的报告。
2025-04-08 00:00:00
5231
1
原创 Linux系统对中断的处理
假设irq_desc[A].handle_irq是XXX_gpio_irq_handler(XXX指厂家),这个函数需要读取芯片的GPIO控制器,细分发生的是哪一个GPIO中断(假设是B),再去调用irq_desc[B]. handle_irq。最核心的结构体是irq_desc,之前为了易于理解,我们说在Linux内核中有一个中断数组,对于每一个硬件中断,都有一个数组项,这个数组就是irq_desc数组。对于共享中断,比如GPIO中断B,它的中断来源可能有多个,每个中断源对应一个中断处理函数。
2025-04-07 12:03:21
1165
1
原创 Linux驱动入门——设备树详解
随着ARM芯片的流行,内核中针对这些ARM板保存有大量的、没有技术含量的文件。于是,Linux内核开始引入设备树。设备树并不是重新发明出来的,在Linux内核中其他平台如PowerPC,早就使用设备树来描述硬件了。
2025-04-02 22:46:34
2292
1
原创 基于STM32的火灾报警设备(阿里云平台)
需要实物的可以私信博主或者在文章最下方添加好友。项目实物图:项目演示视频:基于STM32的火灾报警系统(阿里云平台)
2025-03-14 11:37:47
1449
2
原创 基于STM32的智慧农业大棚(阿里云平台)
需要实物的可以私信博主或者在文章最下方添加好友。最近帮别人做了个毕设,具体功能如下:1、按键:按键一:切换菜单按键二:切换选项按键三:+-或调节风扇 | 水泵 | 灯光按键四:确认 | 连接阿里云平台2、液晶屏幕显示:菜单1:主界面显示空气温湿度,土壤湿度,光照强度,检测是否超过或低于临界值菜单2:临界值调节菜单3:风扇手动开关菜单4:灯光手动开关菜单5:水泵手动开关菜单6:阿里云连接菜单界面3、土壤湿度、空气温湿度、光照强度高于或低于临界值,蜂鸣器就会响。
2025-03-14 00:15:00
1739
原创 基于STM32的家庭/室外环境监测系统(单片机毕设)
基于STM32的家庭/室外环境监测系统(单片机毕设)主控为stm32f103c8t6。使用DHT11温湿度传感器和MQ-2烟雾传感器,读取并实时刷新在0.96寸OLED屏幕上,同时通过蓝牙模块HC-05使用串口通信将数据上传到上位机(自制蓝牙APP)。可手动控制蜂鸣器以及电机作为报警器和风扇;在自动预警模式下,监测到温度高出设定的阈值后打开风扇降温;当监测到烟雾浓度高出设定阈值后将关闭风扇防止火情蔓延,并开启蜂鸣器报警,上位机同步更新报警状态。
2025-03-05 16:48:04
2431
1
原创 将QT移植到RK3568开发板
在这里使用的是韦东山老师的RK3568开发板,接下来我将演示如何移植QT程序到该开发板。我们需要先搭建开发环境,编译 rk3568 Linux SDK资源包。SDK包含了开发rk3568平台所需的各种软件组件、源代码、工具、库、文档以及示例代码等。这些资源旨在帮助开发人员基于rk3568芯片进行高效的软件开发、系统定制以及应用程序开发。下面将进行的操作皆在 Ubuntu20.04 上执行。
2025-03-01 12:48:15
3756
3
原创 Linux 驱动入门(8)—— SPI驱动
常见示例:引脚含义DO(MOSI)SPI主控用来发出数据,SPI从设备用来接收数据DI(MISO)SPI主控用来发出数据,SPI从设备用来接收数据SCKSerial Clock,时钟CSChip Select,芯片选择引脚数模转换器 (DAC) 是一种与模数转换器功能相反的器件,可以将数字形式的数据转换为相应的模拟电压信号。通用 DAC 模块是 12 位字转换器,带有两个支持立体声音频的输出通道。
2025-02-24 08:00:00
2564
1
原创 Linux 驱动入门(7)—— I2C驱动
I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因在后面有说到)。怎么通过I2C传输数据,我们需要把数据从主设备发送到从设备上去,也需要把数据从从设备传送到主设备上去,数据涉及到双向传输。举例:设备地址为 0x50 的EEPROM,要读取它里面存储地址为 0x10 的一个字节,应该构造几个i2c_msg?当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。
2025-02-23 08:00:00
1664
1
原创 Linux 驱动入门(6)—— IRDA(红外遥控模块)驱动
红外遥控被广泛应用于家用电器、工业控制和智能仪器系统中,像我们熟知的有电视机盒子遥控器、空调遥控器。红外遥控器系统分为发送端和接收端,如图下图所示:发送端就是红外遥控器,上面有许多按键,当我们按下遥控器按键时,遥控器内部电路会进行编码和调制,再通过红外发射头,将信号以肉眼不可见的红外线发射出去。红外线线虽然肉眼不可见,但可以通过手机摄像头看到,常用该方法检查遥控器是否正常工作。
2025-02-22 21:30:37
1599
原创 Linux 驱动入门(5)—— DHT11(温湿度传感器)驱动
DHT11 是一款可测量温度和湿度的传感器。比如市面上一些空气加湿器,会测量空气中湿度,再根据测量结果决定是否继续加湿。DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,具有超小体积、极低功耗的特点,使用单根总线与主机进行双向的串行数据传输。DHT11测量温度的精度为±2℃,检测范围为-20℃-60℃。湿度的精度为±5%RH,检测范围为5%RH-95%RH,常用于对精度和实时性要求不高的温湿度测量场合。
2025-02-22 20:24:38
1650
原创 QT项目——音乐播放器
音乐播放器完整代码本项目主要涉及 Qt 界面设计、文件与目录操作、图像处理与绘制、多媒体播放功能、Qt 信号与槽等的应用,通过扫描指定目录下的 MP3 歌曲文件以及对应的 LRC 歌词文件,将歌曲添加到播放列表显示,进行歌曲的操作,包括曲目切换、循环播放、播放/暂停等操作,同时通过图像处理技术,实现专辑封面的加载、缩放以及添加圆角效果等展示功能,增强界面交互性与视觉体验。
2025-02-20 14:55:33
4179
原创 QT项目——天气预报
本项目主要涉及 Qt 界面设计、HTTP 通信、JSON 数据解析、自定义控件绘制温湿度曲线、Qt 信号与槽等的应用,通过调用天气预报API解析 JSON 数据获取未来七天的温湿度、风力强度、天气状态等信息,最后显示在Qt UI界面。
2025-02-20 03:00:00
1975
原创 使用JsonRPC实现前后台独立开发与通信
JSON(JavaScript Object Notation,JavaScript 对象表示法)是基于 ECMAScript 的一个子集设计的,是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。我们主要通过服务器和客户端进行通信,在服务器中,我们注册客户端用到的函数,通过接收客户端的 RPC 请求,以 JSON 格式返回客户端需要的 RPC 结果,这样子我们就可以将前后台分离出来。这样,前台、后台程序可以分别独立开发,降低相互之间的依赖。
2025-02-19 10:00:00
1237
原创 TCP网络通信和网络编程应用示例
所有的数据传输,都有三个要素:源、目的、长度。怎么表示源跟目的呢?如下图:所以,在网络传输中需要使用“IP和端口”来表示源或目的。domain 是网络程序所在的主机采用的通讯协族(AF_UNIX 和 AF_INET 等)。AF_UNIX 只能够用于单一的 Unix 系统进程间通信,而 AF_INET 是针对 Internet 的,因而可以允许远程通信使用。type 是网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM 等)。
2025-02-19 00:03:55
1077
原创 QT项目——网络调试助手
网络调试助手用 QT 模拟网络调试助手的服务器和客户端,可以进行数据收发。服务器:private:// 获取文本编辑器的光标位置,并将其存储在cursor变量中。// 创建一个QTextCharFormat对象,用于设置文本格式。// 使用setForeground方法设置文本的前景色为传入的颜色。// 将格式化后的字符格式应用到光标上。// 使用insertText方法在光标位置插入传入的字符串str。
2025-01-31 16:59:52
2153
1
原创 QT项目——串口调试助手
QT_串口调试助手支持选择串口,波特率,数据位,校验位,停止位,流控支持发送和接收数据支持发送新行和自动换行支持清空和保存接收的数据支持定时或循环发送特定文本支持保存,载入和重置文本private:// 定时器按钮处理// 创建指针列表// 定时器按钮处理// 遍历按钮和文本i <= 9;i++){if(btn){// 将信号发送者转换为QPushButton// 获得对应按钮的行编辑器和复选框名称if(btn){
2025-01-27 11:54:43
2300
3
原创 基于STM32的智能晾衣杆(单片机毕设)
按键结合液晶屏幕并通过按键设置光照强度和湿度阈值,实现按键切换功能。通过光敏传感器采集当前的光照强度,显示到显示屏上面。通过DHT11传感器采集温湿度,显示到显示屏上面。液晶屏显示功能提醒词、系统的状态、已设置的参数等。如果湿度大于设置阈值,蜂鸣器提醒可能下雨。当湿度小于阈值并且光强大于阈值,也就是天晴,自动打开晾衣杆(LED)。语音播报模块进行对应语音的播报。联网,可以在手机app中查看环境状态以及手动控制。实物图:视频演示:基于STM32的智能晾衣杆二、硬件实现。
2024-12-05 14:00:00
2103
2
基于 Cocos Creator 3.x 版本开发的游戏框架,此项目为 Oops Framework 教程项目,如果使用框架制作游戏项目可下载 oops-game-kit 游戏项目模板开发
2025-01-26
java免费MIT开源商城,小程序、公众号管理,采用Java+spring boot3+vue3+element-plus开发;uniapp多端覆盖、微信支付宝、多页面拖拽装修、多语言
2025-01-26
一个精简的基于SSM框架开发的酒店后台管理系统,适用课程Demo或毕业设计,简单易读迅速上手
2025-01-26
ZL503-STM8S005开源设计的多功能空气检测仪(甲醛、PM2.5、温湿度检测).zip
2024-12-03
Linux syslog 实践源码
2025-08-04
基于STM32的家庭/室外环境监测系统(单片机毕设),包含源码,讲解视频,蓝牙APP,原理图,具体介绍可看我博客
2025-03-05
基于STM32火灾报警器-阿里云版本,包含代码,ESP8266烧录固件,具体介绍看我的博客
2025-03-11
基于STM32F103的阿里云智能农业灌溉系统,包含代码和ESP8266烧录固件,具体看我博客介绍
2025-03-11
基于 RK3568 / IMX6ULL / STM32MP157 的智能车载系统,具体可看我的博客介绍
2025-03-03
QT项目-天气预报完整代码,文章解析:https://blog.youkuaiyun.com/m0-74712453/article/details/144778215
2025-02-20
在线教学平台,集成Scratch、ScratchJr、Python教学工具 包含课程、班级、作业、权限、赛事、社区等
2025-01-26
面向MCU的小型前后台系统 此项目的设计思想是:功能模块与硬件高度解耦,提高代码模块的可复用性;不使用复杂的数据结构和语法以提高不同硬件平台和编译器之间的兼容性,实现工程在不同MCU之间的快速移植;提
2025-01-26
前端性能分析和报告工具,能够分析网站的资源构建性能和页面性能
2025-01-26
lilishop电商商城系统 商城移动端,使用Uniapp开发,可编译为所有移动终端项目及各小程序 java商城基于SpringBoot 开源商城,更有微服务商城、商城中台、SAAS商城
2025-01-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅