09 2023 档案
摘要:STM32F103C8T6单片机简介 标准库与HAL库区别 寄存器 寄存器众多,需要经常翻阅芯片手册,费时费力; 更大灵活性,可以随心所欲达到自己的目的; 深入理解单片机的运行原理,知其然更知其所以然。 标准库 将寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用 每款芯片都编写了一份库
阅读全文
摘要:U-Boot(Universal Bootloader)是一个通用的开源引导加载程序,通常用于嵌入式系统中,负责引导操作系统或加载 Linux 内核等任务。U-Boot的启动流程可以概括为以下几个关键步骤: 启动加载程序: 硬件上电后,CPU开始执行芯片上的启动加载程序(比如ROM中的启动加载程序)
阅读全文
摘要:设备树(Device Tree)是一种用于描述计算机系统硬件组件及其相互连接关系的树形数据结构,旨在解耦硬件描述和操作系统,使得同一套操作系统可以适配不同硬件平台。 在设备树中,硬件的信息以一种结构化的、与硬件相关的方式表示,这种方式不依赖于具体的操作系统或处理器架构。设备树通常以.dts(Devi
阅读全文
摘要:虚拟存储技术主要解决了存储器管理中的两个主要问题: 程序的地址空间大于实际物理内存容量: 许多现代程序的地址空间可能远远大于物理内存的容量,无法将整个程序一次性加载到内存中运行。 虚拟存储技术允许将程序划分为多个逻辑片段,只在需要时将其部分加载到内存,这样可以更高效地利用有限的物理内存。 共享内存和
阅读全文
摘要:TCP/IP协议族是网络通信领域中使用最广泛的协议族之一,它包括了多个协议,其中最重要的是TCP(Transmission Control Protocol)和IP(Internet Protocol)。这两个协议共同构成了TCP/IP协议栈,用于实现网络通信。 在TCP/IP协议中,"点到点"服务
阅读全文
摘要:Linux内核中负责处理中断的模块主要包括以下几个关键部分: 中断控制器: 中断控制器负责处理硬件产生的中断信号,它会将中断信号传递给相应的处理程序。 在x86架构中,常见的中断控制器有APIC(高级可编程中断控制器)。 中断描述符表(IDT): IDT是x86架构下用于存储中断处理程序地址的表,内
阅读全文
摘要:fopen 函数是C标准库中用于打开文件的函数,它接受一个文件名和一个打开模式作为参数,返回一个指向文件的指针。 这里解释各个模式的区别: "r": 以只读模式打开文件,文件必须存在,否则返回NULL。 文件指针指向文件的开头。 用于读取文件内容。 "r+": 以读写模式打开文件,文件必须存在,否则
阅读全文
摘要:局部变量、全局变量和静态变量是在程序中用于存储数据的不同类型的变量,它们的作用域和生命周期不同。 局部变量: 局部变量是在函数内部声明的变量,只能在声明它们的函数内部访问。 它们的作用域仅限于声明它们的函数内部,函数执行完毕后会被销毁。 局部变量存储在栈上,因此它们的生命周期与函数调用的开始和结束相
阅读全文
摘要:进程和线程是计算机科学中重要的概念,用于描述程序执行的不同方式和组织形式。 进程(Process): 进程是程序的一次执行过程,是计算机系统分配资源的基本单位。 每个进程拥有独立的内存空间,包括代码、数据、堆栈等,使得进程间的数据不共享,相互隔离。 进程可以包含多个线程,共享该进程的资源。 线程(T
阅读全文
摘要:C51单片机开发笔记 定时器 C51中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器 或者计数器使用。 确切的说,定时器和计数器区别是致使他们背后的计数存储器加1的信号不同。当配置为定时器使用时,每经过1个机器周期,计数存储器的值就加1。而当配置为计数器时,每来一个
阅读全文
摘要:TCP(Transfer control protocol)传输控制协议 一、两种传输模式: TCP面向有连接 可靠 常用于点对点 微信 UDP面向无连接 高速 常用于点对面 视频 二、数据方向: 在互联网的通信中,永远是客户端主动连接到服务端 三、端口的作用: 计算机用于数据通信的虚拟接口 四、端
阅读全文
摘要:Linux系统函数之文件系统管理 stat函数 作用:获取文件信息 include <sys/types.h> #include <sys/stat.h> #include <unistd.h> 函数原型 int stat(const char *path, struct stat *buf) 返回
阅读全文
摘要:(关系表达式) ? 表达式1 : 表达式2; int x = 10; int y = 5; int z; 如果x大于y 则是true,将x赋值给z; 如果x不大于y 则是false,将y赋值给z; z = (x > y) ? x : y; System.out.println("x = " + x)
阅读全文
摘要:可执行程序加载时系统分配的内存可以分为以下几段: 代码段(Text Segment): 特点:代码段是只读的,存储了程序的机器代码(即程序的指令)。这部分内存是用于存放程序的可执行指令,不可被程序进行写操作。 作用:代码段是程序的执行指令所在,程序在运行时会按照指令顺序执行代码段中的指令。 数据段(
阅读全文
摘要:在Unix、Linux和类Unix系统中,& 符号有特定的意义,用于控制命令的运行方式。具体来说,& 在命令末尾使用时表示将该命令放入后台运行。 前台运行: 如果你在终端输入一个命令,例如 ./a.out,默认情况下该命令会在前台运行,会占用终端并阻塞终端,直到该命令运行完毕。 后台运行: 如果你想
阅读全文
摘要:ps -elf 是一个用于显示系统当前进程状态的常用命令,常见于Unix-like系统。它可以列出系统中所有进程的详细信息,并以树形结构展示进程间的关系。 具体解释如下: ps: 表示进程状态,用于报告当前系统进程的快照。 -e: 显示所有进程,而不仅仅是当前终端的进程。 -l: 显示详细的信息,包
阅读全文
摘要:在计算机科学中,守护进程(daemon)是一种在后台运行的系统服务或进程,独立于用户会话的一种特殊进程。它们通常在系统启动时启动,并在系统关闭时终止。守护进程不依赖于任何特定的用户登录会话,并且通常以超级用户权限运行。 下面我们将介绍守护进程的详细用法以及一个具体案例。 详细用法 创建守护进程: 创
阅读全文
摘要:#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <pthread.h> #include <semaphore.h> #define BUFF_MAX 10 #define
阅读全文
摘要:随着计算机科学和软件工程的不断发展,多线程编程变得越来越重要。多线程允许程序同时执行多个任务,提高了程序的效率和性能。然而,多线程编程也引入了新的问题,例如竞态条件和数据竞争。为了解决这些问题,同步工具变得至关重要,而信号量是其中一个强大的工具。 什么是信号量? 信号量是一种用于多线程同步的基本工具
阅读全文
摘要:使用 printf 或 cout 打印内容时,输出永远不会直接写入“屏幕”。而是,被发送到 stdout。 (stdout 就像一个缓冲区) 默认情况下,发送到 stdout 的输出然后再发送到屏幕(我们可以根据需要将其重定向到其他文件/流)。同样,stdin 默认映射到键盘,但可以重定向到任何其他
阅读全文
摘要:树莓派包含两个串口,一个称之为硬件串口(/dev/ttyAMA0),一个称之为mini串口(/dev/ttyS0)。硬件串口由硬件实现,有单独的波特率时钟源,性能高、可靠。mini串口时钟源是由CPU内核时钟提供,波特率受到内核时钟的影响,不稳定。想要通过树莓派的GPIO引脚进行稳定的串口通信,需要
阅读全文
摘要:格式控制符是用于指定 printf、scanf、fprintf、fscanf 等 C 标准库函数中的格式化输入和输出的特殊字符序列。这些字符序列定义了如何解释要输出或输入的数据。以下是一些常用的格式控制符: %d: 用于输出或输入十进制整数。 %f: 用于输出或输入浮点数。 %c: 用于输出或输入单
阅读全文
摘要:fprintf 是一个标准C库函数,用于将格式化的输出写入到指定文件流中。它的函数原型如下: int fprintf(FILE *stream, const char *format, ...); 参数: stream: 指向 FILE 结构的指针,表示要写入的目标文件流。 format: 格式化字
阅读全文