自制操作系统day4(c指针)(指针和数组)(CLI和STI)(EFLAGS)
day4
关于c指针的理解(结合汇编)
int i;
char *p;
p=(char *) i;
*p=i &0x0f;
p=(char *) i;
*p=i &0x0f;MOV ECX,i
MOV BYTE [ECX],(i &0x0f)
如果一开始不给p赋值,p的内存地址不确定,也就是这个ECX里的值不确定,
就导致指向了一个不确定的地址空间,即*P里的值不确定
上面的char *p;其实定义的只有一个p变量,p就是内存地址的值,p是地址变量
*p就是内存里p的地址空间里面的内容,相当于[p]
但是如果一开始没有声明这个 p,汇编就不知道这个p地址是什么类型(BYTE,WORD,DWORD),也就是不知道p这个这个开始的内存地址要往后用几个内存单元(多大的内存)
p=(char *) i;
*p=i &0x0f;相当于
*((char *)i)=i&0x0f;
指针和数组
p = (char *) 0xa0000; /*将地址赋值进去*/
for (i = 0; i <= 0xffff; i++) {
p[i] = i & 0x0f;
}
其实:p[i]和*(p+i)是一样的
所以p[0]和p是一样的又因为*(p+i)和*(i+p)是一样的
所以:p[i]和i[p]是一样的所以本质上和数组没有关系,p[i]和i[p]仅仅是一种省略写法
harib01f
调色板和显示的相关代码解释
在 bootpack.c 中,调色板数据存储在内存中的位置和 p 地址的作用如下:
- 调色板内存位置 :
- 调色板数据定义在 init_palette() 函数中,是一个静态数组 table_rgb
- 这个数组包含16种颜色,每种颜色由3个字节(RGB)组成,共48字节
- 通过 set_palette() 函数,这些颜色值被写入VGA调色板寄存器(端口0x03c8/0x03c9)
- p地址(0xa0000)的作用 :
- p = (char *) 0xa0000 这个地址是VGA显卡的显存起始地址
- 在VGA模式13h(320x200 256色)下,这个区域对应屏幕像素数据
- 代码中 p[i] = i & 0x0f 的作用是:
- 向显存写入测试图案(0-15的循环)
- i & 0x0f 确保只使用前16种颜色(0-15)
- 这样可以在屏幕上看到调色板设置的效果
- 整体流程 :
- 先初始化调色板( init_palette )
- 然后向显存写入测试图案
- 最后进入无限循环保持屏幕显示
这个代码是操作系统开发中常见的VGA图形初始化过程,通过直接操作硬件端口和显存来实现图形显示。
向显存写入测试图案(0-15的循环)
- i & 0x0f 确保只使用前16种颜色(0-15这个写入的图案和颜色是调色板的吗
是的,这段代码中的显存写入操作与调色板设置是直接关联的:
- 调色板关系 :
- i & 0x0f 确保只使用0-15这16种颜色索引,正好对应 init_palette() 中定义的16种颜色
- 每个像素值(p[i])实际上是一个调色板索引,不是直接的颜色值
- 写入图案 :
- 代码向显存连续写入0x0000-0xffff的索引值
- 由于 & 0x0f 操作,实际写入的是0,1,2,…,15,0,1,…的循环序列
- 这样会在屏幕上产生16种颜色的条纹图案
- 显示原理 :
- VGA硬件会根据显存中的索引值(0-15)
- 查找调色板寄存器中对应的RGB颜色值
- 最终显示出对应的颜色
- 颜色值处理 :
- 注意 set_palette() 中颜色值都除以4(右移2位)
- 这是因为VGA调色板寄存器只接受6位颜色值(0-63)
- 而代码中使用的是8位颜色值(0-255),所以需要缩放
这种设计是早期VGA图形模式的典型用法,通过调色板索引+显存写入来实现高效的颜色显示。
问题:这些颜色值被写入VGA调色板寄存器(端口0x03c8/0x03c9)颜色不是存在这里吗,0x0000-0xffff的索引值不在这里面呀
问题涉及VGA显示架构的几个关键概念,来澄清一下:
-
调色板寄存器(0x03c8/0x03c9) :
- 这里存储的是RGB颜色值(实际硬件存储的是6位值,0-63)
- 每个索引对应一组RGB值(如索引0=黑,1=亮红等)
- 代码中 set_palette() 函数正是通过OUT指令写入这些端口
-
显存(0xa0000) :
- 这里存储的是像素的调色板索引值(0-15)
- 每个字节代表一个像素点的颜色索引
- 硬件会自动根据索引值查找调色板寄存器中的实际颜色
-
颜色显示流程 :
显存(0xa0000)[索引值] → VGA控制器 → 调色板寄存器[RGB值] → 显示器
- 例如:显存某字节是5 → 查找调色板索引5 → 输出(0xff,0x00,0xff)/4的RGB
-
0x0000-0xffff的意义 :
- 这是显存地址范围(0xa0000-0xaffff)
- 每个地址存储1字节索引值,共65536像素(对应320x200分辨率)
- i & 0x0f 保证索引值不超过15(只用前16种颜色)
关键区别:调色板寄存器存储颜色定义,显存存储颜色索引。两者通过硬件自动关联。
如果我们读一读程序的话,就会发现突然蹦出了0x03c8、0x03c9之类的设备号码,
这些设备号码到底是如何获得的呢?随意写几个数字行不行呢?这些号码当然不是
能随便乱写的。否则,别的什么设备胡乱动作一下,会带来很严重的问题。所以事
先必须仔细调查。笔者的参考网页如下:
http://community.osdev.info/?VGA
网页的叙述太长了,不好意思(注:这一页也是笔者写的)。网页正中间那里,有
一个项目,叫做“video DA converter”,其中有以下记述。
调色板的访问步骤。
首先在一连串的访问中屏蔽中断(比如CLI)。
将想要设定的调色板号码写入0x03c8,紧接着,按R,G,B的顺序写入
0x03c9。如果还想继续设定下一个调色板,则省略调色板号码,再按照RGB的
顺序写入0x03c9就行了。
如果想要读出当前调色板的状态,首先要将调色板的号码写入0x03c7,再从
0x03c9读取3次。读出的顺序就是R,G,B。如果要继续读出下一个调色板,同
样也是省略调色板号码的设定,按RGB的顺序读出。
CLI和STI
首先是CLI和STI。所谓CLI,是将中断标志(interrupt flag)置为0的指令(clear
interrupt flag)。STI是要将这个中断标志置为1的指令(set interrupt flag)。而标
志,是指像以前曾出现过的进位标志一样的各种标志,也就是说在CPU中有多种多
样的标志。更改中断标志有什么好处呢?正如其名所示,它与CPU的中断处理有关
系。当CPU遇到中断请求时,是立即处理中断请求(中断标志为1),还是忽略中
断请求(中断标志为0),就由这个中断标志位来设定。
EFLAGS
下面再来介绍一下EFLAGS这一特别的寄存器。这是由名为FLAGS的16位寄存器扩
展而来的32位寄存器。FLAGS是存储进位标志和中断标志等标志的寄存器。进位标
志可以通过JC或JNC等跳转指令来简单地判断到底是0还是1。但对于中断标志,没
有类似的JI或JNI命令,所以只能读入EFLAGS,再检查第9位是0还是1。顺便说一
下,进位标志是EFLAGS的第0位。
空白位没有特殊意义(或许留给将来的CPU用?)
标志寄存器用来保存在一条指令执行完成后,CPU所处状态的信息及运算结果的特征。
16位标志寄存器 FLAGS
32位标志寄存器 EFLAGS
SF:若运算结果为负(即结果的最高位为1,因为机器内的数据都是以补码形式表示)则SF=1,否则SF=0
ZF:若运算结果为0,则ZF=1,否则ZF=0
OF:当将操作数作为有符号数看时,用该标志位判断运算结果是否溢出
加法:若同符号数相加,而结果符号与之相反,则OF=1.否则OF=0减法:被减数与减数异号,而结果的符号与减数相同则OF=1,否则OF=0
(比如5-(-3)的话,结果不应该与减数相同)
CF:将操作数作为无符号数时,用该标志位判断运算结果是否发生了进位或错位。
加法:若运算结果从字或字节的最高位向前产生了进位则CF=1,否则CF=0。减法:两数相减,若够减无借位,则CF=0,否则CF=1
PF:当运算结果( 只考虑低8位)中1的个数为偶数时,PF=1,否则PF=0。此标志位主要用于检测数据在传输过程中的错误
AF:标识做字节运算时低办字节向高半字节的进位和借位
DF:控制串操作指令的处理方向
DF=0,从低地址向高地址,即每次操作后SI、DI递增DF=1,从高地址向低地址,即每次操作后SI、DI递减
IF:控制CPU是否允许响应外设的中断请求
IF=0,关中断,CPU屏蔽外设的中断请求IF=1,开中断,CPU响应外设的中断请求
TF(Trap Flag):控制单步执行
TF=0,CPU连续工作TF=1,CPU单步执行
标志位操作指令
LAHF
功能:将标志寄存器的低8位—>AH
说明:无操作数,也不影响标志位
SAHF
功能:AH -à标志寄存器低8位
说明:标志寄存器原来低8位被冲掉,以AH中的内容取代。该指令不影响高字节内容,因为高字节主要是DF、IF、TF等控制标志,不可以随便改变
PUSHF
功能:标志寄存器内容压入堆栈,即
(SP)-2 -->SP (FLAGS) -->(SP)
PUSHFD
(ESP)-4-->ESP (EFLAGS) -->(ESP)
POPF/POPFD
功能:将栈顶内容送入标志寄存器
CLC
功能;置CF=0
CMC
功能:使CF取反
STC
功能:CF=1
CLD
功能:DF=0
STD
功能:DF=1
CLI
功能:IF=0
STI
功能:IF=1
文件详情
这些文件是用于构建一个简单的操作系统(haribote-os)的源代码和构建脚本。让我为您详细解释每个文件的作用:
naskfunc.nas
- 汇编语言编写的底层硬件操作函数
- 提供IO端口操作、中断控制等基础功能
- 被bootpack.c调用
Makefile
- 构建系统的核心配置文件
- 定义了从源代码到最终镜像的完整构建流程
- 包含编译、链接、打包等各个步骤
make.bat
- Windows下的构建脚本
- 调用Makefile执行构建
ipl10.nas
- 初始程序加载器(IPL)
- 负责从磁盘加载操作系统核心
- 包含FAT12文件系统支持
bootpack.c
- 操作系统核心代码
- 实现图形界面、调色板设置等功能
- 包含主循环和基本绘图函数
asmhead.nas
- 引导汇编代码
- 设置CPU模式(保护模式)
- 初始化内存和硬件环境
- 加载并跳转到bootpack
!cons_nt.bat
- Windows NT/2000/XP下的控制台启动脚本
- 简单地启动cmd.exe
整个项目是一个简单的操作系统开发练习,展示了从引导加载到图形界面显示的全过程。构建后会生成一个可启动的磁盘镜像(haribote.img)。
这是一个操作系统开发项目,我将详细解释每个文件的作用并添加代码注释。首先需要分析每个文件的功能,然后为关键代码添加中文注释,帮助理解操作系统启动流程、硬件交互和图形界面实现。
这是一个操作系统开发项目,我将详细解释每个文件的作用并添加中文注释:
- ipl10.nas - 初始程序加载器(IPL)
ipl10.nas
; 负责从磁盘加载操作系统核心到内存
; 设置FAT12文件系统参数
; 使用BIOS中断读取磁盘扇区
; 加载错误时会显示"load error"信息
- asmhead.nas - 汇编头部
asmhead.nas
应用
; 设置显示模式为320x200 8位色
; 初始化GDT(全局描述符表)
; 启用A20地址线以访问1MB以上内存
; 将bootpack从临时位置复制到最终内存地址
- naskfunc.nas - 硬件交互函数
naskfunc.nas
应用
; 提供底层硬件操作接口:
; - 端口输入输出(io_in8/io_out8等)
; - 中断控制(io_cli/io_sti)
; - EFLAGS寄存器操作
; 这些函数会被C语言调用
- bootpack.c - 操作系统核心
bootpack.c
// 主入口函数HariMain
// 初始化调色板(init_palette)
// 绘制简单的GUI界面(boxfill8)
// 进入无限循环等待中断
- Makefile - 构建脚本
Makefile
定义编译工具链路径
将各组件编译链接成最终镜像
支持img/run/install/clean等目标
- make.bat - 构建批处理
make.bat
:: 调用z_tools中的make.exe
:: 传递所有参数给make工具
- !cons_nt.bat/!cons_9x.bat - 控制台脚本
!cons_nt.bat
:: 根据不同Windows版本启动命令行
:: NT系列使用cmd.exe
:: 9x系列使用command.com
整个项目的工作流程:
- ipl10从磁盘加载asmhead和bootpack
- asmhead设置保护模式并初始化硬件
- bootpack绘制简单GUI界面
- 系统进入待机状态(HLT指令)
相关文章:
自制操作系统day4(c指针)(指针和数组)(CLI和STI)(EFLAGS)
day4 关于c指针的理解(结合汇编) int i; char *p; p(char *) i; *pi &0x0f;p(char *) i; *pi &0x0f;MOV ECX,i MOV BYTE [ECX],(i &0x0f) 如果一开始不给p赋值,p的内存地址不确定,也就是这个ECX里的值不确定&#x…...
计算机视觉与深度学习 | Python实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据
以下是一个结合ARIMA、鲸鱼优化算法(WOA)、CNN和LSTM进行时间序列预测的Python实现框架。由于完整代码和数据量较大,此处提供核心代码结构和示例数据集,您可根据需求扩展。 1. 数据准备(示例数据) 使用airline-passengers.csv(航空乘客数据集): import pandas as pd…...
SCGI 服务器详解
1 协议与报文格式 项目说明连接类型长连接,单条 TCP/UnixSocket 可传多请求;由前端(Nginx 等)维护 keep-alive。报文分段"<len>:" <header netstring> "," <body><len> 计数10 进…...
Linux问题排查-找到偷偷写文件的进程
在 Linux 系统中,若要通过已修改的文件找到修改该文件的进程 PID,可以结合以下方法分析,具体取决于文件是否仍被进程打开或已被删除但句柄仍存在: 一、文件仍被进程打开(未删除) 如果文件当前正在被某个进…...
Linux的权限问题
引入:权限的意义是什么? 权限就是为了让人能做某些事或不能做某些事 一:Linux下的用户种类 Linux下只有两种用户:root 和 普通用户 root:拥有至高无上的权限,任何的权限都不能限制root 普通用户…...
WPF技巧-BindingProxy
WPF技巧-BindingProxy 文章目录 WPF技巧-BindingProxy🔍 分析与解释1. **继承 Freezable**2. **重写 CreateInstanceCore 方法**3. **定义 DependencyProperty:Data** ✅ 使用场景场景说明:解决方案:示例 XAML: &#…...
深度解析:Redis 性能优化全方位指南
Redis 作为当前最流行的内存数据库之一,以其高性能、低延迟和丰富的数据结构支持,被广泛应用于缓存、消息队列、实时统计等场景。然而,随着业务规模的增长,Redis 可能面临性能瓶颈,如高延迟、内存不足、吞吐量下降等问…...
OpenHarmony外设驱动使用 (五),Fingerprint_auth
OpenHarmony外设驱动使用 (五) Fingerprint_auth 概述 功能简介 指纹认证是端侧设备不可或缺的功能,为设备提供用户认证能力,可应用于设备解锁、支付、应用登录等身份认证场景。用户注册指纹后,指纹认证模块就可为设…...
.NET外挂系列:2. 了解强大的 harmony 注解特性
一:背景 1. 讲故事 上一篇我们简单的聊了下harmony外挂的基本玩法,让大家宏观上感受到了外挂在 .NET高级调试 领域的威力,这一篇我们从 注解特性 这个角度继续展开。 二:harmony 注解特性 1. HarmonyPatch 解读 在harmony支持…...
【Arm】应用ArmDS移植最小FreeRTOS系统
一、文档背景 FreeRTOS(Free Real-Time Operating System)是一个开源的实时操作系统内核,广泛应用于嵌入式系统。它具有小巧、灵活、低功耗等特点,支持多任务调度、信号量、队列等实时操作系统基本功能。 将FreeRTOS移植到特定硬…...
Python----目标检测(labelimg和labelme的安装与使用,Pycharm配置教程)
一、labelimg labelimg是一款开源的图像标注工具,标签可用于分类和目标检测,它是用python写的,并使用Qt作为其图形界面,简单好用(虽然是英文版的)。其注释以 PASCAL VOC格式保存为XML文件,这是I…...
Axure跨页面交互:利用IFrame和JS实现父子页面菜单联动
在 Axure 中使用内联框架(IFrame)进行父子页面间的通信是一个非常有效的技巧,尤其是在需要实现复杂交互逻辑时。通过 JavaScript 直接操作 DOM 元素,可以突破 Axure 基础元件的限制,实现更灵活的页面联动。以下是对你描…...
百度飞桨OCR(PP-OCRv4_server_det|PP-OCRv4_server_rec_doc)文本识别-Java项目实践
什么是OCR? OCR(Optical Character Recognition,光学字符识别)是一种通过技术手段将图像或扫描件中的文字内容转换为可编辑、可搜索的文本格式(如TXT、Word、PDF等)的技术。它广泛应用于文档数字化、信息提取、自动化…...
救生衣穿戴检测数据集VOC+YOLO格式2171张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2171 标注数量(xml文件个数):2171 标注数量(txt文件个数):2171 …...
JAVA请求vllm的api服务报错Unsupported upgrade request、 Invalid HTTP request received.
环境: vllm 0.8.5 java 17 Qwen3-32B-FP8 问题描述: JAVA请求vllm的api服务报错Unsupported upgrade request、 Invalid HTTP request received. WARNING: Unsupported upgrade request. INFO: - "POST /v1/chat/completions HTTP/1.1&…...
信号量基础入门:并发控制的核心概念
问题的复杂性产生的根本原因在于,如 2.2 节所述,共享变量的访问始终是“单向信息流”。也就是说,一个进程可以分配新值或检查当前值,但这种检查不会为其他进程留下任何痕迹。结果是,当一个进程想要对共享变量的当前值作…...
物联网之使用Vertx实现HTTP/WebSocket最佳实践
小伙伴们,你们好呀,我是老寇,跟我一起学习使用Vertx实现HTTP-Server和WebSocket-Server 实现Http/WebSocket【响应式】 Vertx-Web地址 实现过程 查看源码 代码比较简单,懒得讲解啦 代码比较简单,懒得讲解啦 代码…...
【神经网络与深度学习】GAN 生成对抗训练模型在实际训练中很容易判别器收敛,生成器发散
引言部分 在深度学习领域,生成对抗网络(GAN)是一种强大的数据生成方法,它通过生成器(G)和判别器(D)之间的博弈来不断优化模型。然而,在实际训练过程中,GAN 往…...
使用 NGINX 的 `ngx_http_secure_link_module` 模块保护资源链接
一、模块简介 版本:自 NGINX 0.7.18 起引入 功能: 签名校验:对请求 URI 中的签名进行校验,保证链接未经篡改。时效控制:根据请求中携带的过期时间,判断链接是否仍在有效期。 启用方式:编译 NG…...
5月19日day30打卡
模块和库的导入 知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 一、导入官方库 …...
NW860NW894美光闪存颗粒NX770NX789
在数字化浪潮席卷全球的当下,数据存储技术的革新正以惊人的速度推动着硬件性能的边界。美光科技作为半导体存储领域的领军者,其NW860、NW894、NX770、NX789系列闪存颗粒凭借前沿架构与精密工艺,成为高性能存储解决方案的核心载体。本文将深入…...
高性能锁机制 CAS:Java 并发编程中的深度剖析
引言 在并发编程领域,i操作的非线程安全性是开发者们熟知的问题。这一现象根源在于i并非原子操作,其内部执行过程包含读取、修改和写入三个步骤,在多线程环境下极易因线程切换导致数据竞争与不一致,这与我们此前探讨的多线程常见问…...
leetcode 每日一题 1931. 用三种不同颜色为网格涂色
题目 1931. 用三种不同颜色为网格涂色 思路 先获取列表,上下左右的所有情况。解决一维的问题 然后所有一维的问题暴力循环。已知一个一维的解,可以对应其他一维解的列表(用于记忆化搜索) 然后使用递归,进行累加 代…...
解决Windows磁盘管理中因夹卷导致的无法分区问题
解决Windows磁盘管理中因夹卷导致的无法分区问题 在现代计算机管理中,磁盘分区是一个常见且重要的操作。无论是为了优化存储空间,还是为了实现多系统安装,合理的磁盘分区都是必不可少的。然而,许多用户在使用Windows磁盘管理工具…...
龙虎榜——20250519
上证指数缩量收十字星,个股涨多跌少,这周反弹的概率比较大。 深证指数缩量调整,临近反弹,个股表现更好。 2025年5月19日龙虎榜行业方向分析 化工(新能源材料国产替代) • 代表个股:红宝丽、…...
Python在自动驾驶数据清洗中的应用
Python在自动驾驶数据清洗中的应用 在自动驾驶领域,数据是算法的燃料。高质量的数据意味着更精准的模型,更稳定的驾驶体验。然而,原始数据通常充满噪声、缺失值、不一致格式,甚至有异常点,这些都会严重影响自动驾驶系统的可靠性。因此,数据清洗是一道绕不开的关卡。 一…...
腾讯云Mysql实现远程链接
1.SQL语句:CREATE USER remote_user% IDENTIFIED BY YourPassword; GRANT ALL PRIVILEGES ON *.* TO remote_user%; FLUSH PRIVILEGES; 2.设置入站规则 3.设置安全组 4.效果...
大模型(2)——提示工程(Prompt Engineering)
文章目录 一、提示工程的核心概念为什么需要提示工程? 二、提示设计的基本原则三、实用提示工程技巧1. 角色设定法2. 示例引导法(Few-Shot Learning)3. 分阶段提问4. 负面约束5. 温度(Temperature)控制 四、不同任务类…...
深入Java G1 GC调优:如何解决高延迟与吞吐量瓶颈
引言 Java的垃圾回收(GC)机制是JVM性能的核心,但即使是最先进的G1(Garbage-First)收集器,在复杂场景下仍可能引发长时间停顿(Stop-The-World, STW)或吞吐量骤降。许多开发者虽然熟…...
DAPO:用于指令微调的直接偏好优化解读
一、背景与动机:从RLHF到DPO,再到DAPO 大型语言模型(LLM)经过海量无监督预训练后,往往需要对齐人类偏好或遵循指令的微调,使模型的回答更符合人类期望。这一过程通常通过人类反馈强化学习(RLHF)来实现。例如OpenAI的ChatGPT就使用了RLHF:先让人工标注对模型输出进行偏…...
vue2、vue3项目打包生成txt文件-自动记录打包日期:git版本、当前分支、提交人姓名、提交日期、提交描述等信息 和 前端项目的版本号json文件
vue2 打包生成text文件 和 前端项目的版本号json文件 项目打包生成txt文件-自动记录git版本、当前分支、提交人姓名、提交日期、提交描述等信息生成版本号json文件-自动记录当前版本号、打包时间等信息新建branch-version-webpack-plugin.js文件 // 同步子进程 const execSyn…...
iOS解码实现
import Foundation import VideoToolboxclass KFVideoDecoderInputPacket {var sampleBuffer: CMSampleBuffer? }class KFVideoDecoder {// MARK: - 常量private let kDecoderRetrySessionMaxCount 5private let kDecoderDecodeFrameFailedMaxCount 20// MARK: - 回调var pi…...
Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全
Windows中PDF TXT Excel Word PPT等Office文件在预览窗格无法预览的终级解决方法大全 参考链接: https://zhuanlan.zhihu.com/p/454259765...
在Excel中使用函数公式时,常见错误对应不同的典型问题
在Excel中使用函数公式时,常见错误对应不同的典型问题 1. #DIV/0!(除以零错误)2. #N/A(值不可用)3. #NAME?(名称错误)4. #NULL!(空交集错误)5. #NUM!(数值错…...
Excel
1.快捷键 CtrlE 快速填充 CtrlQ 快速分析 CtrlEnter 原位填充 Tab 横向移动到下一个单元格 Enter 移动到下一行起始位置对应单元格 Shift 返回上一个单元格 0空格分数 显示分数 1.if if(condition,true,false)if(A1>10,"true","fa…...
Rust 学习笔记:错误处理
Rust 学习笔记:错误处理 Rust 学习笔记:错误处理不可恢复的错误带有结果的可恢复错误匹配不同的错误出现错误时 panic 的快捷方式:unwrap 和 expect传播错误传播错误的快捷方式:? 操作符哪里可以使用 ? 操作符 panic or not pan…...
【Linux】系统指令与开发全栈(vim、ssh、gcc)
【Linux】系统指令与开发全栈(vim、ssh、gcc) 一、Linux 系统指令大全 1、文件与目录管理 基础操作 指令参数说明典型用例注意事项cd~ 家目录,- 返回上级,.. 上级目录cd ~/Documents 进入文档目录无目录权限时会报错ls-l 详情&am…...
用 CodeBuddy 搭建「MiniGoal 小目标打卡器」:一次流畅的 UniApp 开发体验
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 在日常生活中,我们总是希望能够坚持一些小习惯,比如每天锻炼十分钟、读一页书、早睡十分…...
前端(vue)学习笔记(CLASS 6):路由进阶
1、路由的封装抽离 将之前写在main.js文件中的路由配置与规则抽离出来,放置在router/index.js文件中,再将其导入回main.js文件中,即可实现路由的封装抽离 例如 //index.js import { createMemoryHistory, createRouter } from vue-routerim…...
ubuntu 安装 Redis新版Redis 7.x
以下是在Ubuntu系统中安装Redis的详细指南, 一、官方APT源安装 sudo apt install redis-server -y 默认安装最新APT源版本(Ubuntu 22.04通常为Redis 6.x) 服务自动启动,配置文件路径:/etc/redis/redis.conf验证安装 …...
Httphelper: Http请求webapi小记
文章目录 1、HttpHelper.cs Framework4.812、HttpHelper.cs NET83、JsonHelper.cs Framework4.814、JsonHelper.cs NET85、uniapp request.js 访问WEBAPI 每次查找、测试都比较费事,记录一下把 1、HttpHelper.cs Framework4.81 using System; using System.IO; usi…...
【Linux】进程控制(进程创建、进程终止、进程等待、进程替换)
目录 一、进程创建 1、fork函数 2、页表权限 二、进程终止 1、main函数返回值(退出码) 2、常见错误码及其对应的错误描述: 将错误退出码转化为错误描述的方法: 3、进程退出的三种场景 4、由上我们可以知道: 5…...
java+selenium专题->启动浏览器下篇
1.简介 上一篇文章,我们已经在搭建的java项目环境中实践了,今天就在基于maven项目的环境中演示一下。 2.eclipse中新建maven项目 1.依次点击eclipse的file - new - other ,如下图所示: 2.在搜索框输入关键字“maven”ÿ…...
sqlserver 循环删除1000行
在SQL Server中,如果你想循环删除1000行数据,有几种方法可以实现,但值得注意的是,频繁使用循环删除操作可能会对数据库性能造成影响,尤其是在处理大量数据时。下面介绍几种方法,并讨论它们的优缺点。 方法…...
亚信电子与联发科技携手打造AIoT新未来
[台湾新竹讯, 2025年5月19日] 智能物联网(AIoT)融合人工智能与物联网技术,通过边缘AI的实时数据分析及设备智能联网能力,加速智能物联网创新应用的蓬勃发展。为满足AIoT产业对多网络端口的应用需求,全球半导体公司【联…...
【成品设计】基于STM32的人体健康监测系统
《基于STM32的人体健康监测系统》 Ps:有4个版本。 V1硬件设计: 主控:STM32F103C8T6:作为系统主控芯片。 血氧心率传感器:用于采集当前心率、血氧值。 温湿度传感器:用于采集当前环境温湿度。 有源低电平触发蜂鸣器&…...
【MySQL进阶】了解linux操作系统下mysql的配置文件和常用选项
前言 🌟🌟本期讲解关于linux下mysql配置选项的详细介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么…...
LeetCode 219.存在重复元素 II
目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: C代码: Java代码: 题目: 题目描述: 题目链接: 219. 存…...
解释:神经网络
在过去的10年里,表现最好的artificial-intelligence系统——比如智能手机上的语音识别器或谷歌最新的自动翻译——都是由一种叫做“深度学习”的技术产生的 深度学习实际上是一种被称为神经网络的人工智能方法的新名称,这种方法已经流行了70多年。1944年…...
Java 泛型详解
在 Java 的类型系统中,泛型(Generics) 是一个非常重要的特性。它让我们能够编写更通用、更安全的代码,尤其是在处理集合类(如 List、Map 等)时,泛型的使用可以大大减少类型转换的麻烦࿰…...