- 博客(165)
- 资源 (1)
- 收藏
- 关注
原创 【PCB工艺】时序图(Timing Diagram)
广泛用于分析和设计时序逻辑电路,如锁存器(Latch)、触发器(Flip-Flop)、计数器、状态机等。这篇文章从时序图的原理、构成、细节、扩展等多个角度全方位让你彻底能够看懂时序图。时序图是一种用于描述数字电路中信号随时间变化的图表,横轴表示时间,纵轴表示不同信号的状态(高电平 1 / 低电平 0)。✅ 时序图用于分析电路的时序关系,确定信号之间的同步性。✅ 常用于分析触发器、锁存器、CPU 总线操作等时序要求较高的电路。
2025-03-27 21:56:19
1004
原创 【PCB工艺】软件是如何控制硬件的发展过程
时光回溯到1854年,亨利·戈培尔发明了电灯泡(1879年,托马斯·阿尔瓦·爱迪生找到了更合适的材料研制出白炽灯。如果加上一个秒表来自动控制灯的亮灭,设定 30 分钟自动控制点灯的亮灭,那么,这个接下来,这是一个钢片式八音盒:上发条后,八音盒便会不同簧片在不同时间拨动从而能够产生不同的频率与声音,在钢片上哪一个位置出现凸点是音乐内容的核心,在这里,我们—— 钢片是软件的储存介质,滚筒上的凸点设计就是设计师提前设定好的程序。—— 这便是软件和硬件之间的关系,软件既不是簧片,也不是滚筒上的凸点,而是。
2025-03-27 19:12:42
1544
原创 【PCB工艺】简单的集成电路IC
集成电路(IC,Integrated Circuit)是一种将大量晶体管、电阻、电容等电子元件集成在一块半导体芯片上的电子器件,广泛应用于计算机、通信、汽车、家电等领域。集成电路(IC)是一种将多个电子元件集成到一块小型硅片上的微型电子电路。传统电路 使用独立电子元件(如晶体管、电阻、电容),体积大、功耗高、速度慢。IC 将数千甚至数十亿个晶体管集成到一块芯片上,体积小、速度快、功耗低。简单的说,IC 就是“微型化的电子电路”。
2025-03-21 21:39:58
825
原创 【PCB工艺】晶体管的发展历史
—本文纯粹出于对过往奋斗在这个领域中科学家的缅怀。科学家有太多宝贵的思想和经验值得我们认真总结和提炼,我想最好的纪念是传承,最好的告慰是奋进,同样在我们的工作和生活之中,要秉承先辈的科研精神 —— “做科学,不是简单地承担一项或几项课题就完事了,要从科研中找到你的责任,找到你的担当,这是科研者应该具备的品格。半导体的理论研究和技术应用的进展为新型电子器件的诞生奠定了理论和技术条件。这一切起源于成立了以和。
2025-03-21 17:53:24
1057
原创 【PCB工艺】电流、电压与电阻的关系 以及 含有电容和电感的电路
开始画电路图之前咱们先简单复习一下电流(Current)、电压(Voltage)和电阻(Resistance),这是电路分析的基础,它们之间遵循。是掌握电路理论的基石。另外,所以,在复习完欧姆定律之后,继续扩展到。
2025-03-19 23:43:14
949
原创 【STM32】NVIC(嵌套向量中断控制器)
NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)适用于等 ARM 处理器,广泛用于 STM32、ESP32、GD32、NXP 等 MCU 中,它用于管理和控制中断,是ARM Cortex-M 系列微控制器的核心外设之一。NVIC 负责中断优先级管理、嵌套中断处理和中断向量跳转,使 Cortex-M 处理器能够高效地响应中断请求。NVIC 主要功能1. 支持多个中断源(STM32F103 系列最多支持 60 个)
2025-03-14 21:21:10
1056
原创 【STM32】从新建一个工程开始:STM32 新建工程的详细步骤
STM32 开发通常使用等工具来创建和管理工程。此处是 使用创建 STM32 工程的详细步骤。
2025-03-14 18:59:58
966
原创 【STM32】STM32系列产品以及新手入门的STM32F103
📢 STM32F103xC/D/E 系列是一款高性能、低功耗的 32 位 MCU,适用于工业、汽车、消费电子等领域;,适合复杂嵌入式应用,,适用于电池供电设备。
2025-03-06 19:33:48
1442
原创 【单片机】ARM 处理器简介
是英国 ARM 公司(原 Acorn RISC Machine)开发的一种精简指令集(RISC)处理器架构。ARM 处理器因其低功耗、高性能、广泛适用性,成为嵌入式系统、移动设备、服务器、AI 计算等领域的主流选择。ARM 是一家英国公司,其商业模式独特,不直接生产芯片,而是专注于IP 核授权。Chipless 生产模式ARM 不生产芯片,也不直接设计完整芯片,而是设计高效的 CPU 内核授权给半导体公司(如 Apple、Qualcomm、NVIDIA、Samsung)进行芯片制造。
2025-03-06 16:58:26
2149
原创 【单片机】嵌入式系统设计流程
🔹目标✅总结项目的成功点和改进点✅优化下一代产品设计评价项结果设计目标是否达成生产成本是否优化可靠性是否满足标准嵌入式开发是一个系统化过程,从需求分析到生产,涉及硬件、软件、测试、生产等多个阶段,在开发前期合理规划开发流程,确保产品高效、稳定、低功耗,提高产品质量和市场竞争力。以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
2025-03-05 15:48:07
1109
原创 【单片机】嵌入式系统的硬件与软件特性
嵌入式系统的硬件和软件特点决定了它的高效、低功耗、实时性和可靠性,硬件:小型化、低功耗、面向特定应用;软件:高效、实时、代码固化、多任务管理。嵌入式软件结构可以分为不带 OS(裸机)和带 OS(RTOS / Linux)两种,如果系统简单(如 LED 控制、UART 通信) → 使用 Bare Metal。如果系统复杂(如 Linux + GUI + 网络) → 使用嵌入式 Linux。如果需要多任务调度、网络功能(如 MQTT) → 使用 RTOS。不同的软件架构适用于不同的应用场景,如。
2025-03-05 15:23:20
2300
原创 【单片机】嵌入式系统大纲
嵌入式系统是一种专用计算机系统,以应用为中心,结合软硬件进行裁剪,以满足系统对功能、可靠性、成本、体积和功耗的严格要求。嵌入式系统的特点✅ 专用性:针对特定应用优化,功能较固定。✅ 实时性:对响应速度要求高,常使用 RTOS。✅ 低功耗:适用于电池供电设备,如智能手表、传感器节点。✅ 高可靠性:要求长时间稳定运行,如汽车电子、医疗设备。✅ 体积小:硬件紧凑,适用于便携设备、嵌入式控制系统。
2025-03-05 14:37:11
1071
原创 【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)后续部分代码优化
文章中的代码有一些可继续优化的部分,这篇文章是对上述项目代码的完善和说明。优化和补全,我们需要,并。
2025-02-28 03:32:26
897
原创 【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)
✅ 服务器采用 多线程 + I/O 多路复用(epoll) 支持高并发。✅ 基于 SQLite3 存储用户、好友、群聊信息;✅ 使用 TCP + JSON 进行消息传输;记录用户之间的好友关系。记录群聊成员及身份。
2025-02-27 06:54:04
667
原创 Ubuntu中 json 打包数据的使用
在线安装 JSON 解析库。不同的编程语言和应用场景可能需要不同的 JSON 库,这里解释的是一些常见的 JSON 解析工具和库的安装方法。处理 JSON,可以安装 node-json 模块。,可以安装 python3-json 以扩展功能。🔹 安装 python3-json。在 Ubuntu 中,可以使用。🔹 在 Python 代码中使用。🔹 安装 json CLI 工具。中解析 JSON,可以安装。中解析 JSON,可以使用。🔹 编译 C 代码(使用。🔹 安装 Node.js。,适用于高性能应
2025-02-24 23:15:14
526
原创 基于嵌入式linux的数据库:SQLite
常用的数据库基于嵌入式linux的数据库SQLite3SQLite数据库采用了模块化设计,由8个独立的模块构成,这些独立模块又构成了三个主要的子系统,模块将复杂的查询过程分解为细小的工作进行处理:在线安装:离线安装:备注:实际上就是一张表:2. sqlite3语句(…> 表示输入的内容还未结束,需补上;)完整操作sqlite3数据表的代码综上。希望该内容能对你有帮助,感谢!以上。仅供学习与分享交流,请勿用于商业用途!转载需提前说明。我是一个十分热爱技术的程序员,希望这篇文
2025-02-24 18:45:15
451
原创 【网络编程】UNIX 域套接字(Unix Domain Sockets, UDS)
方式,适用于同一台机器上的进程之间的通信。相比 TCP/IP 套接字,UDS。正确处理 UNIX 域套接字错误,可以提高通信稳定性,防止进程崩溃;(UDS, Unix Domain Socket)是一种。时,可能会遇到各种错误。以下是常见错误及其解决方法。🚨 5.1 服务器未启动时运行客户端。按 Ctrl + C 终止服务器。如果服务器异常退出,建议手动删除。,因为它省去了网络协议的开销。如果没有编译错误,将会生成。此时服务器将等待客户端连接。📌 1. 常见错误及解决方案。🚨 5.2 服务器端。
2025-02-23 09:53:37
1014
原创 【网络编程】服务器模型(二):并发服务器模型(多线程)和 I/O 复用服务器(select / epoll)
UDP不用等待确认,没有实际的发送缓冲区,所以UDP协议中不存在发送缓冲区满的情况,在UDP套接字上执行的写操作永远都不会阻塞。进程调用 read 函数从套接字上读取数据,当套接字的接收缓冲区中还没有数据可读,函数 read 将发生阻塞。阻塞I/O 模式是最普遍使用的 I/O 模式,大部分程序使用的都是阻塞模式的 I/O;当我们将一个套接字设置为非阻塞模式,我们相当于告诉了系统内核:“当我请求的I/O 操作不能够马上完成,你想让我的进程进行休眠等待的时候,不要这么做,请马上返回一个错误给我。
2025-02-22 05:16:55
1082
原创 【网络编程】服务器模型(一):循环服务器模型和并发服务器模型(多进程)
TCP并发服务器可以避免TCP循环服务器中客户端独占服务器的情况。为了响应客户机的请求,服务器要创建子进程来处理。如果有多个客户端的话,服务器端需要创建多个子进程。过多的子进程会影响服务器端的运行效率。由于只有在当前客户的所有请求都完成后,服务器才能处理下一个客户的连接/服务请求。如果某个客户端一直占用服务器资源,那么其它的客户端都不能被处理。中,服务器通常需要处理多个客户端的请求。根据服务器处理多个客户端的方式,可以分为。由于 UDP 服务器在处理某个客户端请求时可能会。的协议,服务器不需要。
2025-02-21 21:18:15
660
原创 【网络编程】基于 TCP协议 的服务器-客户端通信模型的加密传输、多线程并发服务器
基于上一篇中实现了基于 TCP 协议的网络通信模型。基于此之上,我们继续介绍(多线程并发服务器)。这是一个通信示例。这种方式可以确保。
2025-02-20 15:39:50
914
原创 【网络编程】网络编程基础:TCP/UDP 协议
网络是信息传输,接收和共享的虚拟世界,通过把网络上的信息汇聚在一起,将这些资源进行共享。初衷:知识共享。这里不得不提到1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天。1958年美国总统艾森豪威尔向美国国会提出建立DARPA (Defense Advanced Research Project Agency),即国防部高级研究计划署,简称ARPA。
2025-02-18 22:29:42
979
原创 【进程与线程】Linux文件 I/O 编程中的生产者与消费者案例
生产者与消费者问题是经典的多线程同步问题,通常用于描述两个进程之间共享资源的协作。在 Linux 文件 I/O 中,我们这里使用来实现生产者与消费者模型。有名管道是一个特殊的文件,(非亲缘进程)。
2025-02-18 05:00:39
366
原创 【进程与线程】Linux 线程、同步以及互斥
线程是操作系统与多线程编程的基础知识。系统为每个用户进程创建一个来描述该进程:该结构体中包含了一个指针指向该进程的虚拟地址空间映射表:实际上和地址空间映射表一起用来表示一个进程。由于进程的地址空间是私有的,因此在进程间上下文切换时,系统开销比较大,因此,为了提高系统的性能,许多操作系统规范里引入了轻量级进程的概念,也被称为线程。在同一个进程中创建的线程共享该进程的地址空间,Linux里同样用来描述一个线程。线程和进程都参与统一的调度。接下来我们会详细的介绍线程共享资源和私有资源,还有线程库如。
2025-02-17 03:57:46
2108
原创 【进程与线程】System V IPC:消息队列(Message Queue)
消息队列是先进先出的队列,实际中消息队列允许根据消息类型进行读取,不完全是FIFO。消息的格式为:消息类型加消息正文 ——> 例如,在C语言中如何使用struct来定义消息,其中必须包含一个长整型的消息类型字段,然后是消息正文。因此,消息队列并不是严格的FIFO,但默认情况下可能是按发送顺序接收的,除非指定了不同的消息类型优先级。消息队列的优点在于可以异步通信,数据有结构,缺点是需要内核操作,效率不如共享内存,且存在系统限制(如最大消息数、消息大小限制)。,即使进程结束,消息队列仍然存在,除非显式删除;
2025-02-16 19:50:18
705
原创 【进程与线程】信号量(Semaphore)
信号量不传输数据,只用于同步,它的用途是协调进程,而不是传递信息。所以代码中要时刻留意信号量的初始化和释放,需要正确管理信号量,避免资源泄漏。信号量是 System V IPC 中实现进程同步的核心工具,通过 PV 操作和计数器机制协调多进程对共享资源的访问。涉及对信号量的底层实现,以及信号量集如何在内核中管理。理解内核中信号量的工作原理是非常必要的环节。IPC创建的是信号灯集:System V IPC中的信号量不是单个而是以集合的形式存在。下面的代码中会创建信号量集,并初始化其中的信号量。
2025-02-15 05:31:39
783
原创 【进程与线程】共享内存(Shared Memory)
并且,共享内存的生命周期独立于进程,需要显式删除,否则会一直存在,可能导致资源泄漏 ——> 同步机制与异步机制不同,在使用共享内存的过程中尤其需要注意这一点,比如需要使用信号量或互斥锁来避免数据不一致。共享内存的读操作通常不会阻塞,因为数据一旦写入就存在,但如果没有同步机制,读进程可能读到不完整的数据,或者写进程覆盖数据导致问题。的作用只是将内存区域置零,但共享内存本身仍然存在。阻塞的原因则是因为进程在读取时没有数据可读,但共享内存本身并不管理数据的可用性,需要额外的同步机制,比如信号量,来协调读写操作。
2025-02-15 03:27:44
802
原创 【进程与线程】信号(Signal)
/ 注册 SIGUSR1 的处理函数// 阻塞等待信号pause();// 暂停进程,直到收到信号return 0;# 编译运行# 输出 PID 后,在另一个终端发送信号:五. 信号的优缺点与适用场景用户触发中断如Ctrl+C发送SIGINT终止前台进程,Ctrl+Z发送SIGTSTP暂停进程。内核异常处理内存错误(SIGSEGV)、算术错误(SIGFPE)、非法指令(SIGILL)等异常事件。进程间通信通过kill()系统调用发送SIGUSR1SIGUSR2触发自定义逻辑。
2025-02-13 01:32:03
977
原创 【进程与线程】有名管道(FIFO)
有名管道(FIFO)和无名管道的主要区别:无名管道只能用于有亲缘关系的进程,而有名管道(FIFO)通过文件系统中的命名文件实现,允许无关进程通信(非亲缘进程间的 通信)。这篇文章是解释有名管道FIFO的底层原理:包括内核如何管理FIFO的缓冲区、读写机制以及文件系统的交互形式。附上代码:包括FIFO文件的创建过程,比如使用mkfifo函数或命令,以及它在文件系统中的表现。此外,内核如何维护FIFO的缓冲区,处理阻塞和非阻塞模式,以及数据原子性等问题都需要详细说明。
2025-02-12 16:04:28
1020
原创 【进程与线程】无名管道(匿名管道,Pipe)
无名管道主要用于具有亲缘关系的进程间通信,比如父子进程,它通过文件描述符进行读写,是一种半双工的通信方式(即数据只能单向流动)。无名管道在内核中的实现机制涉及到内核中的数据结构,比如管道缓冲区。当调用pipe()函数时,内核会创建一个管道,并返回两个文件描述符,一个用于读,一个用于写。这两个描述符指向同一个管道对象,其中包含一个环形缓冲区,用于存储数据。当写端向管道写入数据时,数据被复制到内核缓冲区;读端从缓冲区读取数据时,数据被复制到用户空间。如果缓冲区满,写操作会阻塞;如果缓冲区空,读操作也会阻塞。
2025-02-12 15:13:05
955
原创 【进程与线程】进程之间的通信
这篇文章详细解释进程间通信(IPC)的各种方式,包括早期的方法、System V的机制以及现代的套接字。早期的是。System V的包括。现在主要使用,特别是网络编程中的应用,套接字实现了不同主机之间的通信,是现在最常用的主流通信方式。
2025-02-11 18:05:28
848
原创 【C语言】C语言中的隐式规则
如果在代码块内部声明了和外层同名的变量,内部的变量会隐藏外部的,这可能导致意料之外的行为。另外,链接属性,比如未加static的函数默认是extern的,可以被其他文件访问,这也是隐式的规则。类型转换方面,比如整数和浮点数之间的运算,会自动将整数转换为浮点数,这也是隐式的。总的来说,这篇文章尽可能的涵盖了C语言中常见的隐式规则,解释它们的原理,可能带来的问题,以及如何避免。另外,我们要提到现代C标准(如C99、C11)中的变化,比如隐式函数声明在C99中不再允许,但有些编译器仍支持,导致可移植性问题。
2025-02-11 16:53:06
575
原创 【进程与线程】dup 函数
这篇文章用于解释这样一件事:dup函数 将文件重定向之后,两个文件描述符指向同一个文件,剩下的那个文件依旧存在,但那个文件没有文件描述符指向它↓在 Linux 系统中,或函数用于复制文件描述符。当使用或进行文件描述符重定向时,会出现两个文件描述符指向同一个文件的情况。如上图所示。
2025-02-11 10:03:29
864
原创 【进程与线程】如何编写一个守护进程
如何编写一个守护进程。我们首先需要理解守护进程是什么。守护进程是在后台运行的进程,通常没有控制终端,用于执行系统任务,比如服务器或者定时任务。 用户可能想创建一个长期运行的服务,比如Web服务器或者日志监控程序。首先,守护进程的创建通常包括几个步骤:fork子进程,让父进程退出,这样终端会认为命令执行完毕,子进程继续运行。然后调用setsid创建新的会话,脱离终端。接着改变工作目录到根目录,避免占用可卸载的文件系统。还要设置文件创建掩码,通常是0,以拥有更大的灵活性。关闭不需要的文件描述符,比如标准输入、输
2025-02-10 23:10:09
1920
原创 【进程与线程】临界区
原理:屏障是一种同步机制,用于使一组线程在某个点上等待,直到所有线程都到达该点后再继续执行。合理设计临界区不仅能提高程序的正确性和可靠性,还能提升性能,避免常见的并发问题。临界区是并发编程中的核心概念,用于保护共享资源的安全访问。原理:互斥锁是一种二值锁(0 或 1),用来确保只有一个线程能够访问临界区。原理:原子操作是一种不可分割的操作,能够在硬件层面实现对共享变量的安全访问。原理:线程在等待锁时会不停地检查锁的状态,而不是进入休眠。原理:信号量是一个计数器,用于控制线程对共享资源的访问。
2025-02-10 01:49:13
602
1
原创 【Linux系统】Samba服务共享文件夹后没有提示输入用户名和密码,直接进入了IP地址
如果你在配置Samba共享文件夹后,访问共享时没有提示输入用户名和密码,而是直接进入了共享目录,这通常是因为Samba配置中允许了匿名访问或当前用户已经通过了身份验证。通过以上步骤,你应该能够解决Samba共享目录无需验证的问题。Samba使用独立的用户数据库,即使系统用户存在,也需要将其添加到Samba用户数据库中。或其子目录中,在 Ubuntu 中,直接访问共享路径 通常不会自动出现在。你需要检查共享目录的配置,确保没有启用匿名访问。输入密码后,该用户将被添加到Samba用户数据库。
2025-02-10 01:09:38
1295
原创 【进程与线程】进程常见的API函数
在操作系统中,进程的生命周期可以形象地比喻为“生老病死”,即进程的创建、运行、异常以及终止。进程的生命周期贯穿了创建、运行、异常和终止的全过程,理解这些状态有助于开发者更好地管理和调试程序。进程的“出生”是指操作系统创建一个新的进程。进程创建通常是通过系统调用(如Linux中的。进程的老:进程任务状态的切换—>允许我们在一个进程中去执行另一个进程的任务。,是进程生命周期的自然结束。进程的退出通常是通过调用。函数后,当前进程的地址空间会被新程序的代码完全覆盖。,替换掉当前进程的内容,而。
2025-01-17 21:46:48
808
运行开发板前的网络配置: 资源内容包含演示代码中的音乐播放器配置的详细过程 + 运行开发板之前的网络服务配置
2024-12-14
《流程图、图灵机和只有两条形成规则的语言》论文原版
2024-10-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人