- 博客(19)
- 收藏
- 关注
原创 【linux应用开发】线程同步
当多个线程并发访问和修改同一个共享资源(如全局变量)时,如果没有适当的同步措施,就会遇到线程同步问题。这种情况下,程序最终的结果依赖于线程执行的具体时序,导致了竞态条件。竞态条件(race condition)是一种特定的线程同步问题,指的是两个或者以上进程或者线程并发执行时,其最终的结果依赖于进程或者线程执行的精确时序。它会导致程序的行为和输出超出预期,因为共享资源的最终状态取决于线程执行的顺序和时机。为了确保程序执行结果的正确性和预期一致,需要通过适当的线程同步机制来避免竞态条件。
2025-11-20 11:25:08
903
原创 【linux应用开发】线程处理
新线程执行函数的声明为void *(*start_routine)(void *),其入参和返回值都是void *指针。// 需要注意的是,pthread_detach不会等待子线程结束,如果在后者执行完毕之前主线程退出,则整个进程退出,子线程被强制终止,因此需要等待足够的时间确保子线程完成自己的任务。需要注意的是,pthread_detach不会等待子线程结束,如果在后者执行完毕之前主线程退出,则整个进程退出,子线程被强制终止。为了验证这一点,注释以下代码。线程未被取消,会一直运行到结束。
2025-11-20 11:23:00
951
原创 【linux应用开发】线程池
● pkg-config --cflags --libs glib-2.0实际上是pkg-config --cflags glib-2.0和pkg-config --libs glib-2.0的整合,二者是等价的,如下。-I/usr/include/glib-2.0就是一个编译标志,-I是gcc编译时的一个参数,用于指定头文件的搜索路径。-lglib-2.0是一个链接标志,-l参数在第一章已有介绍,这个标志表示链接libglib-2.0.so库。● --libs:用于打印链接器所需的标志。
2025-11-19 13:56:48
283
原创 【linux应用开发】文件描述符
当我们执行open()等系统调用时,内核会创建一个新的struct file,这个数据结构记录了文件的元数据(文件类型、权限等)、文件路径、支持的操作等,然后分配文件描述符,将struct file维护在文件描述符表中,最后将文件描述符返回给应用程序。每个文件描述符都关联到内核一个struct file类型的结构体数据,结构体定义位于Linux系统的/usr/src/linux-hwe-6.5-headers-6.5.0-27/include/linux/fs.h文件中,从992行开始。
2025-11-18 10:52:21
406
原创 【linux应用开发】网络编程
在传输层,主要的协议有TCP(Transmission Control Protocol),它提供顺序的、可靠的、双向的连接流,并管理报文段的发送,确保无错误、不丢失、不重复、按序到达;协议控制信息(Protocol Control Information,PCI)是PDU中的元数据部分,它包括用于在网络中传输数据的控制信息,比如地址、端口号、控制标志、协议类型等。不同层次的PDU有专门的术语,例如在网络层,PDU称为数据包,在传输层,PDU称为报文段或数据报,在数据链路层,PDU称为帧(frame)。
2025-11-17 16:58:12
949
原创 【linux应用开发】内核原理
内核是操作系统的核心部分,负责管理计算机的硬件资源,包括处理器、内存、存储设备和其他外围设备。内核提供系统服务的基础,如进程管理、内存管理、设备驱动、文件系统和网络通信等。内核作为硬件和应用程序之间的中介,提供一个抽象层,使得应用程序不需要直接与硬件交互。
2025-11-17 16:53:19
1464
原创 【linux应用开发】进程通信
ftruncate缩放的文件描述符可以是通过shm_open()开启的内存对象,而truncate缩放的文件必须是文件系统已存在文件,若文件不存在或没有权限则会失败。truncate和ftruncate都可以将文件缩放到指定大小,二者的行为类似:如果文件被缩小,截断部分的数据丢失,如果文件空间被放大,扩展的部分均为\0字符。命令行传入的参数被打印到了终端,我们在上述程序中通过父进程将数据写入了管道,然后子进程从管道读出数据,写入了标准输出,日志如上则测试通过。但要注意的是,无论是有名管道还是匿名管道,
2025-11-14 09:59:23
533
原创 【linux应用开发】进程处理
Linux中父进程除了可以启动子进程,还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收,那么子进程就会变成一个僵尸进程——即程序执行完成,但是进程没有完全结束,其内核中PCB结构体(下文介绍)没有释放。在上面的例子中,父进程在子进程结束前就结束了,那么其子进程的回收工作就交给了父进程的父进程的父进程(省略若干父进程)。/** 等待子进程的终止并获取子进程的退出状态* 功能简单 没有选择*//*** 功能灵活 可以设置不同的模式 可以等待特定的子进程* pid: 等待的模式。
2025-11-14 09:58:19
521
原创 【尚硅谷嵌入式Linux应用层学习笔记】Makefile
但以上这种写法,makefile推导不出hello.h的变换,当main.c和hello.c发生变化的时候,使用make会重新生成链接文件,但是hello.h变化的时候不会更新链接文件。蓝色框为makefile追踪监控的目标, 应该与红框一致,否则会出现使用make无法追踪到最新的main文件,一直重复生成。最终生成的可执行程序的文件名称是由红框的main决定的,因为最终是执行gcc的命令所以由gcc命令来决定最终的文件名称.只有在以下情况要声明clean伪目标。
2025-11-12 11:10:00
591
原创 在yolo中添加其他模块引发的错误,添加模块无误但训练时出现模块找不到的情况
摘要:解决YOLOv8添加ELA模块出现的模块找不到问题 当在ultralytics_yolov8代码中添加ELA模块后,训练时出现"KeyError: 'ELA'"错误。原因是系统仍在使用site-packages中的旧版tasks.py文件,而非本地修改版本。解决方案包括:1)卸载当前ultralytics版本;2)在项目根目录执行"pip install -e ."进行可编辑模式安装。这将使Python直接使用本地修改文件,解决模块找不到的问题。清华源可加速安装
2025-11-12 10:57:15
203
原创 Linux基本知识学习(基于原子哥与菜鸟教程)
存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息,这个目录的内容不在硬盘上而是在内存里。一般叫做GNU Make,用于将源代码文件编译为可执行的二进制文件,make工具主要用于完成自动化的编译。是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上 -R 的参数,那么该目录下的所有文件的属组都会更改。
2025-05-07 11:11:42
1068
原创 R语言制条形图,有数据版
最近因为工作上有r语言相关的制图安排,于是简单学习了一下R语言,先看条形图。编译IDE:R Studio。怎么用R语言实现呢?
2024-08-17 22:42:23
234
原创 记录keil mdk烧录程序遇到的问题
板子:NUCLEO-H7A3ZIQ(板子自身带有stlinkv3)IDE:Keil MDK遇到的问题:以及报错:Commend not supporeed以为是驱动的问题 尝试更新后无果解决方案:keil版本不对,那么烧录时就会报以上错误,同时无法找到stlinkV3。Keil5.29版本以上才支持stlinkv3故更新keil版本 问题解决...
2022-07-06 10:03:50
856
原创 蓝桥杯自学(模块化代码)
记录一下自己的学习过程#include "reg52.h"#include "ds1302.h"#include "iic.h"//定时器辅助寄存器sfr AUXR = 0x8e; //串口通信时会用到//独立按键sbit S4 = P3^3;sbit S5 = P3^2;sbit S6 = P3^1;sbit S7 = P3^0;//矩阵键盘sfr P4 = 0xC0; //52的头文件没有P4口,需要我们自己定义sbit R1 = P3^0;sbit R2 =.
2022-03-29 13:25:51
466
Matlab/Simulink风力发电中的风速建模
2024-07-08
整流电路综合应用【课程作业-调研综述报告】
2024-07-10
【成都理工大学】工厂电气控制技术程序设计题
2024-07-10
【成都理工大学】工厂电气控制技术2022-2023复习题
2024-07-10
DFIG双馈风力发电联合四种风速Matlab/Simulink仿真建模
2024-07-10
PMSGenerator9 永磁同步风力发电Matlab/ Simulink仿真建模
2024-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1