- 博客(1086)
- 资源 (17)
- 收藏
- 关注
原创 Linux通信IPC随笔
名字: HLS大神 QQ:331908961**功能:Linux内核间任意通信实现**#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <unistd.h>#include <string.h>#include <stdio.h>typedef struct MSG
2021-03-26 11:28:26
939
3
原创 xTaskCreatePinnedToCore 函数详细说明
本文详细介绍了xTaskCreatePinnedToCore函数,这是ESP-IDF框架中用于ESP32双核处理器的任务创建函数。文章涵盖函数头文件、原型、参数说明(包括任务函数、名称、堆栈大小、优先级等)、返回值含义以及核心绑定特性。通过3个示例(基础应用、按键项目应用、多任务绑定不同核心)展示了该函数的使用方法,重点说明其与标准xTaskCreate的关键区别在于能够将任务固定到指定CPU核心运行,从而实现双核负载均衡和性能优化。
2026-06-16 15:32:58
37
原创 ESP32S3开发板利用flash_download_tool工具下载实现
本文介绍了ESP32芯片的三种烧录方法及程序分析。首先详细讲解了使用flash_download_tool工具下载程序的步骤,包括bin文件配置、串口设置等关键参数。其次说明了将多个bin文件合并为单个文件的方法,便于批量生产。最后通过三个代码示例分析了printf输出与fflush(stdout)函数的关系,演示了换行符对输出缓冲的影响。文章还提供了程序验证方法,帮助开发者理解ESP32开发中的烧录流程和输出控制技巧。
2026-06-15 14:35:16
101
原创 基于python控制硬件LED的实现方法
本文介绍了在鲁班猫板卡上使用Python控制GPIO的方法。首先需要通过安装gpiod工具包获取GPIO信息,然后使用python3-libgpiod库进行编程控制。示例代码演示了如何通过Python脚本控制GPIO引脚输出高低电平,实现LED闪烁效果。具体步骤包括:导入gpiod库、获取GPIO控制权、设置输出模式,并通过循环交替输出高低电平。最后强调在程序结束时需要释放GPIO资源。这种方法适用于需要控制硬件外设的嵌入式开发场景。
2026-05-19 11:35:39
76
原创 认知篇---八年嵌入式开发经验总结
【嵌入式工程师三年经验总结】 技术成长:从教培机构讲师转型为底层驱动工程师,强调夯实C语言、数据结构等基础,避免贪多求快。 职场心得:选择大于努力,关注行业趋势(如智能汽车、边缘计算),重视时薪和成长性而非单纯月薪。 工作方法:注重代码稳定性,养成文档习惯,将工作视为学习平台,保持业余充电。 职业规划:建议设定明确目标(如三年独立带项目),平衡工作与生活,同时探索理财和副业可能。 (全文146字,突出技术转型、职业选择和长期规划三大要点)
2026-05-06 15:02:21
436
原创 嵌入式AI中Doxygen下载安装使用教程(附安装包)
Doxygen 是一款“代码文档自动生产机”,只要你提前在源代码里用规定格式写好注释,Doxygen 就能把注释连同函数、类、变量之间的调用关系一起抽出来,自动生成网页、PDF、Word、CHM 等多种格式的技术文档。Doxygen 支持多种编程语言,包括 C/、Java、、PHP、Objective-C、IDL、VHDL、Fortran 等。Doxygen 可以生成 HTML(在线浏览)、LaTeX(可转 PDF)、RTF(Word 可读)、CHM(离线帮助)、XML(可被其它工具二次消费)。
2026-03-08 16:20:24
176
原创 嵌入式开发Cursor工具基础操作与实现
《Cursor工具基础使用指南》摘要:本文详细介绍AI编程工具Cursor的基础操作,包含下载安装、注册登录、项目创建和界面布局说明。重点讲解了界面中文化设置、AI大模型选择(支持Auto自动模式)以及四种工作模式(Agent/Plan/Debug/Ask)的应用场景。此外还介绍了多对话窗口管理功能,方便用户处理不同任务。文章针对新用户常见问题提供解决方案,并预告后续将推出系列功能教程。
2026-03-08 14:51:08
223
原创 免费部署openClaw龙虾机器人(经典)
《免费搭建AI机器人完整教程》摘要:本文提供详细的免费AI机器人搭建指南,包含硅基流动和推理时代两个免费API平台的使用方法,详细演示了Cherry Studio、Node.js等必要软件的安装配置流程。教程涵盖基础模型配置、进阶技能安装(如联网搜索和自我优化功能)、钉钉机器人连接以及记忆增强等实用技巧,帮助用户打造功能完善的AI助手。特别推荐使用阿里云镜像源加速安装,并分享了节省Token消耗的有效方法,适合从新手到进阶用户参考使用。
2026-03-07 14:33:08
2385
1
原创 linux中设备树插件 (Device Tree Overlays)
Linux4.4 以后引入了动态设备树 (Dynamic DeviceTree),我们这里翻译为“设备树插件”。设备树插件可以理解为主设备树的“补丁”它动态的加载到系统中,并被内核识别。✍️例如我们要在系统中增加 RGB 驱动,那么我们可以针对 RGB 这个硬件设备写一个设备树插件,然后编译、加载到系统即可,无需重新编译整个设备树。设备树插件是在设备树基础上增加的内容,我们之前讲解的设备树语法完全适用,甚至我们可以直接将之前编写的设备树节点复制到设备树插件里。具体使用方法介绍如下。
2026-02-25 19:29:33
183
原创 嵌入式中Linux通用SPI设备驱动分析
本文介绍了Linux内核中通用SPI设备驱动的使用方法。主要内容包括:1) 内核配置需启用CONFIG_SPI_SPIDEV选项;2) 设备树配置方法;3) 驱动工作流程分析,重点讲解了probe函数如何创建设备节点;4) spidev_fops操作集实现,特别是ioctl接口支持多种SPI参数配置;5) 指出了spidev驱动的两个主要限制:不支持中断和异步操作。文章通过分析内核源码详细说明了SPI设备驱动的实现机制和使用方法。
2026-01-27 10:28:15
121
原创 Visual Studio Code 远程连接 SSH 远程服务器
本文介绍在Windows系统下使用VSCode通过SSH连接远程Ubuntu服务器的方法。首先安装Remote-SSH扩展,通过ssh命令格式(ssh username@host或带端口号形式)添加远程连接,配置Host别名、HostName、Port和User等参数。连接成功后可在VSCode中打开Ubuntu终端进行操作,实现跨平台远程开发。
2026-01-10 16:03:08
400
原创 2025年创作历程回顾与个人生活平衡
本文回顾了2025年工业物联网领域的个人发展历程,分享了技术创作与职业平衡的经验。作者通过突破CSDN百万访问量、获得"广东双师资格"以及完成年度项目目标,践行"知识分享创造价值"的理念。面对高强度工作,作者提出五大平衡策略:任务优先级管理、时间区块化、建立支持系统、接受不完美以及将技术写作作为心理调节方式。展望未来,作者计划推动开源社区建设、发展跨学科能力并倡导健康的技术文化,强调在技术发展中保持生活平衡的重要性。
2025-12-27 11:40:46
1344
2
原创 嵌入式单片机上移植CMSIS-NN神经网络库的方法
本文详细介绍了将CMSIS-NN v6.0.0神经网络库移植到瑞萨RA8单片机(VisionBoard开发板)的过程。CMSIS-NN是专为Cortex-M处理器优化的神经网络计算库,能最大化性能并最小化内存占用。文章从创建RT-Thread项目开始,逐步讲解添加CMSIS-NN源码、修改配置文件、解决编译问题等关键步骤,并重点说明了如何修改测试脚本使其支持RT-Thread平台。最后还提供了单元测试方法和常见问题的解决方案,为在MCU上实现AI算法提供了实用指南。
2025-12-20 17:30:28
345
原创 嵌入式Linux中工作队列传递参数实现
首先我们定义工作项结构,如下所示,在结构体 struct work_data 中定义了需要传递给工作项处理函数的参数 a和 b,然后定义一个类型为 struct work_data 的变量 test_workqueue_work。然后工作项处理函数 test_work 定义了一个指针 pdata, 将工作项转换为 struct work_data结构, 并通过该结构,访问参数 a和 b。在 Linux 内核的工作队列中, 可以通过使用工作项的方式向工作队列传递参数。
2025-12-18 10:12:24
118
原创 嵌入式linux中tasklet中断底半部实现详解
本文主要介绍了Linux内核中断下半部tasklet的实验实现过程。内容包括:1)设备树配置,在RK356x系列开发板的设备树文件中添加相关节点;2)驱动开发,涉及GPIO申请、中断注册和tasklet实现;3)应用开发,通过字符设备驱动框架实现用户空间访问。重点讲解了设备树语法解析、gpio_request/gpio_direction_input等GPIO操作接口、request_irq中断注册以及tasklet机制的使用方法。实验通过/sys/kernel/debug/gpio接口验证功能实现。
2025-12-17 18:01:37
235
原创 嵌入式linux中中断控制分析与实现详解
中断是CPU响应外部或内部事件的机制,能暂停当前程序执行中断处理程序后再恢复原任务。中断机制提高了系统并发处理能力,使CPU能及时响应键盘输入、硬盘读写等事件。中断处理分为上下半部:上半部快速处理紧急任务,下半部处理耗时操作,避免中断丢失。中断机制通过任务划分优化了响应速度,提高了系统资源利用率。
2025-12-17 11:59:45
101
原创 嵌入式linux驱动模块编译方法
本文介绍了Linux内核驱动的编译与使用方法。主要内容包括:1)两种驱动编译方式(编译进内核或作为模块);2)以"Hello World"为例说明驱动开发流程,包含Makefile配置和模块加载命令;3)驱动基本框架的三大核心(加载/卸载函数、许可证声明)和可选组件(模块参数、导出符号等);4)实际操作步骤,包括交叉编译环境设置和驱动加载演示。文章通过简单示例阐述了Linux驱动开发的基础知识,为底层系统开发提供了入门指导。
2025-12-10 16:29:59
176
原创 嵌入式linux驱动系统调用过程分析
本文介绍了Linux系统调用的实现方法。首先说明系统调用是用户程序与内核交互的接口,然后详细讲解了添加自定义系统调用的步骤:在内核代码中添加服务函数并定义系统调用号,在用户程序中通过syscall()验证调用。文章还以getpid()为例分析了系统调用流程,包括用户态到内核态的切换、系统调用号的传递及服务例程的执行过程。通过具体代码示例展示了从用户空间触发系统调用到内核处理的完整路径。
2025-12-10 11:20:24
255
原创 嵌入式linux驱动开发控制实现
本文介绍了Linux驱动开发的基本框架,以一个简单的"helloworld"驱动为例,讲解了驱动程序的必要组成部分,包括模块加载/卸载函数、许可证声明等核心要素,以及可选参数、导出符号和作者信息。通过实验演示了从代码编写、Makefile配置到编译运行的全过程,为初学者提供了Linux驱动开发的入门指南。
2025-12-09 16:54:50
324
原创 嵌入式linux中静态库和动态库实现详解
本文介绍了Linux下静态库和动态库的区别与制作方法。静态库在编译时链接到目标代码,运行时不再需要,生成文件较大(.a后缀);动态库在运行时载入,生成文件较小(.so后缀)。制作静态库包括编译源码为.o文件、使用ar命令创建库文件;动态库制作则使用gcc命令,需通过-l指定库名、-L指定查找路径。文章还提供了具体实验步骤,包括创建mylib.c文件、编写测试代码test.c等操作示例,演示了两种库的实际制作过程。
2025-12-08 17:35:22
124
原创 嵌入式linux中目录控制与实现方法
本文介绍了目录I/O操作的基本函数,包括mkdir()创建目录、opendir()/closedir()打开和关闭目录流、readdir()读取目录内容。重点讲解了各函数的参数定义、返回值及使用场景,并通过实验代码演示具体实现。与文件I/O相比,目录I/O主要针对目录操作而非文件,是Linux系统编程中的重要组成部分。文章以简明的方式呈现了目录操作的核心API,为开发者提供了实用参考。
2025-12-08 10:57:43
243
原创 嵌入式linux中Makefile高级用法
格式:$(wildcard PATTENR)功能: 展开指定的目录举例:在 /home/topeet/test 目录有一个 a.c的c文件和一个 test 的文件夹,在/home/topeet/test/test 文件夹下有一个 b.c的文件。我们在当前目录下创建的 makefile 里面写下如下代码,echo 前面加了@ 符号,echo 这个命令就不显示:我们得到了 ./a.c和 ./test/b.c,所以 wildcard 函数会把我们指定的 ./和 ./test/ 目录下的c文件展开。格式:(notd
2025-12-02 17:40:51
95
原创 嵌入式linux中系统调用的详细过程
attribute_((regparm(8)))就是告诉 GCC 所有参数都从栈中读取,而 Linux 进入中断处理上下文时,会把 ebx、ecx、edx、esi、edi、ebp 寄存器的值保存到内核栈中,那么 系统调用 就可以从内核栈获取到参数的值。system_call过程获取 eax 寄存器的值,然后通过 eax 寄存器的值找到要调用的系统调用入口,并且进行调用。因为 用户态 和 内核态 使用的栈不同,而调用系统调用是在用户态调用的,而进入系统调用后会变成内核态,所以参数就不能通过栈来传递。
2025-11-29 11:38:05
107
原创 嵌入式linux系统中断言函数用法分析
摘要:C语言通过assert.h头文件提供静态和动态断言功能。静态断言(static_assert)在编译时检查条件(如int类型大小是否≥4字节),不满足则终止编译并报错。动态断言(assert)在运行时验证条件(如函数参数有效性),可通过NDEBUG宏控制其启用/禁用。两种断言分别用于确保程序的编译期和运行期正确性,帮助开发者提前发现潜在问题。静态断言支持自定义错误信息,而动态断言则更灵活可控。
2025-11-26 11:45:53
260
原创 嵌入式linux中管道实现详解
本文介绍了Linux系统中管道的实现原理。管道通过pipe()系统调用创建,包含读写两端(fds[0]和fds[1]),利用fork()后父子进程共享文件描述符的特性实现进程间通信。管道数据采用比特流形式,保持写入顺序,流向单向。通过关闭不同端口可实现单向或双向通信。内核使用16块pipe_buffer组成的环形缓冲区存储数据,保证小于4KB写入的原子性。当缓冲区满或空时,相应进程会被挂起等待。文章还说明了管道的内部数据结构和操作注意事项。
2025-11-26 11:11:55
133
原创 嵌入式linux中FrameBuffer 应用编程实现
本文介绍了FrameBuffer应用编程和LCD显示技术的基础知识。FrameBuffer是图形显示的显存抽象,在Linux系统中通过/dev/fbX设备节点访问,采用存储映射IO处理大量像素数据。LCD显示器通过TFT控制液晶分子方向实现成像,其关键参数包括分辨率(如1920x1080)和像素格式(如RGB32)。文章详细阐述了RGB颜色模式的存储方式,并解释了LCD成像的基本时序控制信号(VCLK、HSYNC、VSYNC)和扫描过程。这些概念为嵌入式系统图形显示开发提供了理论基础。
2025-11-21 16:38:35
141
原创 嵌入式linux串口应用编程实现
摘要:串口(SerialPort)是一种通过串行传输方式实现计算机与外部设备通信的异步全双工接口,采用TX、RX、GND三线连接方式。在嵌入式系统中广泛应用于调试、日志输出及外设连接。串口通信每帧包含11位数据结构(起始位、8位数据位、奇偶校验位和停止位),支持多种校验方式。使用流程包括打开设备、获取/修改配置、数据读写及关闭等步骤,主要通过tcgetattr()获取当前参数、tcsetattr()设置新参数,涉及波特率、数据位等关键属性的配置。
2025-11-19 11:52:24
225
原创 嵌入式linux中应用控制LED实现详解
摘要:Linux系统提供两种应用层操控硬件的方式:一是通过/dev目录下的设备节点,将其视为虚拟文件进行读写操作(如open/read/write),实现对硬件设备(如硬盘、串口)的控制;二是通过sysfs文件系统访问内核对象属性,以目录和文件形式控制设备参数,适用于LED、GPIO等简单设备。LED控制案例显示,系统通过/sys/class/leds目录中的brightness、trigger等属性文件实现亮度调节和触发模式设置。复杂设备(如LCD)通常需结合设备节点和专用接口(ioctl)进行控制。两种
2025-11-18 15:44:35
123
原创 嵌入式中systemtap工具使用方法说明
打一个比方,这类工具就好比医生的听诊器,病人就好比是在运行的系统,很多时候查看一些问题需要在系统在运行的时候来观察,这时候就需要这类动态跟踪工具。-L和-1这两个参数大体作用一样,都可以列举出二进制文件对应的函数在哪里(所在文件和行数),所不同的是,-L比-l还多了一些信息:可以打印出函数局部变量的信息。3.接下来,转换流程将解析树转换成 C源代码(pass 3)并使用解析后的信息和 tapset 脚本(SystemTap 定义的库,包含有用的功能)。
2025-11-17 16:33:14
130
原创 嵌入式C语言中代码优化方法与技巧
本文介绍了四种优化应用代码的技术:1.利用高速缓存:通过合理利用CPU多级缓存(L1-L3)提升数据访问效率,避免非连续内存访问。2.代码内联:使用inline关键字减少函数调用开销,适合短小且频繁调用的函数。3.restrict关键字:消除指针别名问题,使编译器能生成更高效的机器码。4.消除不必要内存引用(文中未详解)。这些技术通过减少内存访问、优化函数调用和消除数据冲突等方式提升程序性能,但需注意合理使用以避免副作用。
2025-11-15 16:07:37
130
原创 嵌入式中VScode软件中安装Deepseek方法
本文介绍了如何在VSCode中配置开源AI编程辅助插件Continue,以调用国产大模型Deepseek v3的API接口服务。详细步骤包括:安装Continue插件、创建Deepseek API密钥、修改插件配置等。配置完成后,用户可在VSCode中使用Continue调用Deepseek实现代码补全、错误检测等AI编程辅助功能。文中提供了相关官网链接供进一步参考。该方案以高性价比的方式为开发者提供了强大的AI编程支持。
2025-11-15 11:32:24
376
原创 嵌入式C语言中野指针和段错误问题分析
一旦出现未知性,它就是一个野指针,即使某一次没有产生严重后果,但埋下了这颗“地雷”后,就留下了不可预知的隐患,对于程序来说这是不可接受的。在本例中,p是自动局部变量,由于p没有被初始化,也没有被后续赋值,那么p中存放的是一个随机值,所以p指向的内存空间是不确定的。所谓野指针,就是指针指向一个不确定的地址空间,或者虽然指向一个确定的地址空间,但引用空间的结果却是不可预知的,这样的指针就称为野指针。在本例中,p虽然指向了一个确定地址0x43542354的空间,但是它对应的空间是否存在,其读写权限是否满足程序。
2025-11-13 09:00:56
329
原创 嵌入式开发中链表结构分析
链表和数组是两种基本的数据结构,各有特点。数组需要连续内存空间,而链表通过指针连接零散的内存块,更灵活。链表有三种常见类型:单链表、循环链表和双向链表。单链表的每个节点存储数据和下一个节点的地址,插入删除高效(O(1)),但随机访问较慢(O(n))。循环链表首尾相连,适合处理环形数据。双向链表支持双向遍历,每个节点有前驱和后继指针,操作更灵活但占用更多内存。链表适合频繁插入删除的场景,而数组适合随机访问。
2025-11-12 17:10:22
556
原创 嵌入式C语言中指针详解
C语言指针的核心在于其运算能力,特别是加减法操作,这赋予了程序更高的灵活性但也增加了学习难度。指针本质是存储内存地址的变量,通过间接寻址访问数据。在函数传参时,指针解决了值传递无法修改原变量的问题。指针运算与指向类型密切相关,加减操作会按类型大小调整地址偏移。虽然数组名可视为指针,但二者并不完全等同,主要体现在sizeof等操作上。指针运算特性使其能高效访问连续内存的数组元素,这是C语言强大底层控制能力的体现。
2025-11-11 17:58:47
104
原创 嵌入式C语言中结构体使用方法与技巧
本文介绍了内存对齐的概念及其重要性,主要包含三部分内容:1. 内存对齐原理,解释了数据类型地址需是其大小的倍数,并以struct Node为例说明对齐机制;2. 结构体成员排列优化,展示如何通过调整顺序减少内存空隙;3. 结构体操作,涵盖传统定义、成员访问和构造初始化方法。重点阐明了内存对齐对CPU效率和程序内存占用的影响,以及结构体内存优化的实用技巧,其中特别指出了ARM架构下非对齐访问会引发异常的情况。
2025-11-10 17:46:00
92
原创 嵌入式linux中git代码管理实现
Git助力代码原子性提交的实践指南 摘要:Git作为当前最流行的分布式代码管理系统,其灵活的分支和提交处理功能可有效提升代码提交的原子性。实现原子性提交(每个提交对应单一功能点)能带来三大优势:提升代码可读性、简化问题定位与回滚、促进持续集成。本文重点介绍了Git实现原子性提交的5种基础操作技巧,包括部分改动提交、提交拆分、提交修改、顺序调整等本地操作。掌握这些技巧可帮助开发者在本地仓库灵活处理提交,在不影响团队协作的前提下提升代码模块化和研发效能。
2025-11-10 14:00:33
251
原创 嵌入式linux中交叉编译器的安装与使用
前面我们写了 linux 上第一个c程序 heollo word ,我们是使用 gcc 编译器进行代码的编译,编译得到的可执行文件只能在 X86 结构的 PC 上运行,我们来看下,在我的 ubuntu 下有一个hello.c,这个程序也非常简单,就是一个 helo world ,我们来编译一下,然后我们运行下可执行文件,这个可执行文件是可以在PC 上运行的。然后我们使用 file 命令来看下这个文件,这个文件是可以在 X86 上运行的,但是它不能在 ARM 上运行,因为它这里写的是 X86。如下图所示。
2025-11-08 17:58:37
550
原创 嵌入式开发安装Samba服务实现方法
本文介绍了通过Samba实现Windows与Ubuntu文件共享的开发技巧。安装Samba后,在Ubuntu创建共享文件夹并配置smb.conf文件,即可将Ubuntu存储空间映射为Windows磁盘。这样开发者可以直接在Windows上修改代码,避免频繁传输文件,大幅提升嵌入式开发效率。关键步骤包括:安装Samba服务、创建共享目录、备份并修改配置文件等。这种方法特别适合需要频繁修改代码的开发场景。
2025-11-08 16:38:05
137
原创 嵌入式linux中SSH实现方法
本文介绍了在虚拟机Ubuntu系统中安装和配置SSH服务的步骤。首先通过终端命令"sudo apt-get install openssh-server"安装SSH服务,然后修改配置文件"/etc/ssh/sshd_config",将"PermitRootLogin prohibit-password"改为"PermitRootLogin yes"以允许root用户登录。文中详细说明了使用vi编辑器修改配置文件的搜索和修改方法,
2025-11-06 11:18:08
191
电机+嵌入式详细解说+各个电机分析与说明,包括常见的直流电机、异步电机、同步电机等
2024-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅