- 博客(20)
- 收藏
- 关注
原创 多线程编程(含用例、值典藏)
本文介绍了线程的基本概念及其在不同系统中的状态转换。线程是操作系统调度的最小单位,共享进程资源但保持独立执行。文章详细对比了Java和Linux系统中的线程状态及其转换关系,并分析了多线程编程的优势与风险。关键点包括:线程相比进程更轻量级且资源共享,但需注意同步问题;Java线程有6种状态,Linux线程则有5种主要状态;多线程能提升性能但增加程序复杂度。合理使用线程可提高程序响应性和并行效率,但需谨慎处理同步与死锁问题。
2025-12-01 11:34:19
745
原创 多进程编程(典藏、含用例代码)
进程是操作系统进行资源分配和调度的基本单位,是程序的一次动态执行实例。进程由代码段、数据段、堆和栈组成,具有动态性、并发性、独立性等特征。进程状态包括创建、就绪、运行、阻塞/挂起和终止,各状态间可相互转换。进程管理通过进程控制块(PCB)实现,包含进程标识符、状态、调度信息等。进程调度分为长期、中期和短期调度,涉及上下文切换过程。进程的优点包括隔离性强、稳定性高,缺点是创建开销大、通信复杂。
2025-12-01 09:23:37
964
原创 RT-Thread实时操作系统介绍(典藏、含用例代码)
RT-Thread是中国自主研发的开源实时操作系统(RTOS),具备高度可裁剪性、丰富组件生态和多架构支持等特点。其系统架构采用分层设计,包含内核层、组件层和软件包层,支持灵活配置。线程管理方面提供五种状态(初始、就绪、运行、挂起、关闭)及动态转换机制,确保高效调度。任务创建支持动态和静态两种方式,动态创建通过rt_thread_create()函数实现,自动分配内存并指定优先级、栈大小等参数。RT-Thread广泛应用于物联网、工业控制等领域,装机量已超10亿台设备。
2025-11-27 10:05:30
1095
原创 程序:text段、data段、bss段
C语言程序的内存布局包含三个关键段:text段存储只读的机器指令;data段存储已初始化的全局和静态变量;bss段存储未初始化或零值的全局和静态变量,由系统自动初始化为零。text段在磁盘文件中存储,data段存储初始值,而bss段仅记录大小信息。这些段的生命周期贯穿整个程序运行期,地址分布相邻,与堆栈区域形成对比。通过示例程序可验证各段变量的存储位置特征。
2025-11-25 17:20:32
341
原创 基于rt-thread实现高效工作队列的方法、原理、接口介绍(包含源码)
本文深入分析了FMT-Firmware中的工作队列(WorkQueue)模块,该模块是一个基于"生产者-消费者"模型的异步任务调度系统。核心设计采用最小堆实现优先级队列,支持延迟任务和周期性任务调度。模块包含工作项(WorkItem)和工作队列(WorkQueue)两个核心数据结构,通过RT-Thread信号量保证线程安全。系统默认创建高/低优先级两个队列,工作线程采用事件循环机制,在无任务时自动挂起以节省资源。该设计具有高效调度(O(log n))、线程安全、灵活配置等优点,实现了任务提交与执行的解耦。
2025-08-27 11:01:15
950
原创 无人机(飞行器)的常见飞行模型和飞行阶段
本文系统阐述了飞行模式与飞行阶段的定义及关系。飞行模式是飞控系统的底层控制策略,决定飞行器如何响应指令(如手动模式、自稳模式、自主任务模式等);飞行阶段则描述任务流程中的宏观状态(如起飞、爬升、巡航、降落等)。两者呈层次关系:飞行模式服务于飞行阶段,共同构成完整的飞行任务管理。理解二者的区别与联系对无人机安全操控和任务规划至关重要,其中飞行模式是控制工具,飞行阶段是任务蓝图。
2025-08-27 00:49:30
1142
原创 遥控器:sbus协议详解(含C语言源码)
SBUS协议是一种用于遥控设备的串行数字通信协议,采用反相逻辑UART信号,通过单线传输16个通道的控制信息。其核心特性包括:100kbps波特率、8E2数据格式、25字节数据帧结构,包含11位/通道的控制数据及状态标志。协议支持故障安全检测,更新速率为14ms(标准模式)或7ms(快速模式)。实际应用中需注意硬件反相处理,并正确解析数据帧中的位拼接信息。该协议广泛应用于飞控系统,实现高效可靠的遥控通信。
2025-08-27 00:21:39
1122
原创 FMT的目录结构、启动运行流程和任务的详细介绍(FMT-firmware源码)
Firmament (FMT) 是一款基于模型设计 (Model Based Design, MBD) 的开源自驾仪,可被用来快速构建无人机、车辆、船舶、机器人等的无人控制系统。基于模型设计 (MBD) 方法允许高效快速地开发高质量的控制系统,适用于各种无人控制平台,包括航空器、地面车辆、船舶和机器人。其中,FMT-Firmware代码结构较为复杂,要理解代码就要分清楚代码的目录结构、main函数启动,以及任务的定义,接下来将从这三个方面进行介绍。若有错误之处,请大家批评指正。
2025-08-15 21:06:26
982
原创 惯性测量单元(IMU)-QMI8658A驱动开发简要介绍
QMI8658(A系列)是一款国产六轴姿态传感器,也是一款低噪声、高带宽的六轴惯性测量单元(IMU),主要包含三轴陀螺仪和三轴加速计,还包括温度计。所以该传感器就是读取六轴数据就可以了,姿态解算自己在控制端实现,因为目前attitude engine无法使用了。QMI8658A数据手册地址QMI8658C数据手册地址QMI8658在典型传感器模式下,输出原始传感器值,使用寄存器配置和读取传感器的采集的数据,其思路为:上电->复位->陀螺仪校准->自检->配置传感器->读取传感器数据。使用配置的寄存器如下。
2025-08-01 21:07:53
2563
原创 气压计SPL07驱动开发简要介绍
支持存储最近32次气压或温度的测量结果。按照采样频率的不同,这32个结果中压力、温度的结果值个数不一样。比如,气压的采样频率是温度的3倍,那么这32个结果中有24个为气压数值,8个温度数值。SPL07 是一款高精度、低功耗的微型数字气压传感器。SPL07-003 既是压力传感器,也是温度传感器。当有新的测量结果可用或者FIFO满了时,就会在引脚SDO产生中断信号。支持IIC接口和SPI接口(4线SPI和3线SPI)。支持三种工作模式:待机模式、命令模式和后台模式。默认是采用IIC接口通信。
2025-08-01 15:13:37
411
原创 C语言实现RK3588(ubuntu)的串口和网口通信程序
在上述代码中有信号处理函数,处理SIGINT信号。printf("\n服务器终止中...\n");exit(0);现在简要介绍一下SIGINT和SIGSTP信号。SIGINT 和 SIGTSTP 是 UNIX /类UNIX 系统中的两种不同的信号,它们用于进程间通信和控制。
2025-08-01 14:44:14
895
原创 【飞控系统】简要理解
无人机飞控系统由感知层、决策层和执行层组成。感知层通过IMU、GPS等传感器获取飞行数据;决策层运用PID控制算法和卡尔曼滤波处理数据;执行层通过电机和舵机执行飞行指令。这三层结构协同工作,使无人机实现精准控制和智能飞行。
2025-07-27 23:34:45
614
原创 【git版本管理】常用指令和基础教程
在软件开发过程中,git是最常见的协作、版本控制软件,在工作和学习中经常用到;本文将简要介绍git的基本概念和常用命令。
2025-07-27 22:20:19
427
原创 C语言用十六进制的方式打印字符串(密文字符串打印查看)
密码算法处理后的数据D,如果使用普通的printf函数打印D,不能正确显示数据;其原因有1.ASCII编码的字符分为可显示字符和非可显示字符,2. 遇到00后会默认结束,等。所以要查看密文数据D,应该用十六进制的方式打印查看;其函数为PrintHex,具体如下。
2023-10-24 15:41:23
1156
原创 linux开发环境基础搭建
Makefile带来自动化编译,一旦写好,只需要一个make指令,整个工程完全自动编译,极大的提高了软件开发的效率。注,make工具需要提前安装好哦。gdb是有GNU软件系统社区提供的调试工具,同GCC配套组成了一套完整的开发环境,GDB是linux和许多类Unix系统中的标准开发环境。调试的可执行程序理论上应该由类似如下质量生成,理论上。其中,-g选项的作用是在可执行文件中假如源代码信息;-wall选项是打开所有warning;-O选项是关掉编译器优化选项。......
2022-07-20 22:12:12
1239
原创 【留下笔记】实习过程中查询过的问题,留下来
C语言数组名和指针?答:数组名可以当做指针使用,因为数组名可以表示改数组第一个元素的地址;但不能将数组名理解成指针,两者区别很大。内存申请相关函数:malloc、ralloc、freevoid * malloc(size_t size); //申请size个字节的内存空间void *realloc(void * prt,size_t size ); //跳帧之前malloc、calloc、realloc所分配ptr所指向的内存卡大小。char c = ‘我’ 正确吗?错误,一个char
2022-01-19 14:55:11
833
原创 查看C语言函数/程序运行时间与linux下获取秒级、微秒级精确时间的方法
前言获得函数的运行时间,在测试和验证函数接口中经常用到。近日,check测试单元对项目的函数接口测试时莫名其妙的报错【(after this point) Test timeout expired】,寻找了很多方法都没解决问题。最后,决定对函数运行时间的判断,果然发现其中新增函数的运行时间极长,分析其需要等待某些资源,最终解决问题。通过网上各种方法的寻找,这些方法的介绍比较散乱,实际可用性较低;因此,本文将介绍三种简单的程序运行时间的获取方法,直接使用,拒绝套路。第一种:直接使用linux下的time命
2022-01-17 15:57:36
3756
2
原创 国密gmssl命令行生成SM2证书
简介最近想了解一下gmssl生成证书的流程,首先就来体验一下用指令完整证书的生成操作。目前,有一些文章已经有相关的详细介绍,但还是存在一定问题,如:CA密钥名与openssl中默认的cakey.pem不一致,导致证书生成失败;等。提前安装好gmssl;查看gmssl版本指令`gmssl version` 本文章使用的gmssl 2.5.4....
2022-01-13 10:40:45
11010
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅