无线遥控红外通信
无线遥控红外通信
红外发射装置一般是指红外遥控器由 键盘电路 ,红外编码电路 电源电路 和红外发射 电路组成
一般的红外线波长为940nm左右,外形与普通发光二极管相同
红外遥控为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送二进制编码,常用的载波频率为38kHZ
,这个是由发射端所使用的的455kHZ晶振决定的
在发射端要对晶振进行整数分频,分频系数一般取 12,所以 455kHz÷12≈37.9kHz≈38kHz。
载波:是具有一定频率的电磁波
工作方式
通常红外遥控器是将遥控信号(二进制脉冲码),调制在38kHZ的载波上,经过缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。二进制脉冲码的形式有多种,其中最为常用的NEC Protocol 的PWM 码(脉冲位置调制码,脉冲串之间的时间间隔来实现信号调制)
发射端负责产生和发送信号,而接收端则负责接收和解码信号
工作原理
1、8 位地址和 8 位指令长度;
2、地址和命令 2 次传输(确保可靠性)
3、PWM 脉冲位置调制,以发射红外载波的占空比代表“0”和“1”;
4、载波频率为 38Khz;
5、位时间为 1.125ms 或 2.25ms;
NEC 码的位定义:一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms(560us 脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms(560us 脉冲+560us 低电平)。
而红外接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑 1 应该是 560us 低 +1680us 高,逻辑 0 应该是 560us 低+560us 高。
NEC 遥控指令的数据格式为:引导码、地址码、地址反码、控制码、控制反码
。引导码由一个 9ms 的低电平
和一个 4.5ms 的高电平
组成,地址码、地址反码、控制码、控制反码均是 8 位数据格式。(LSB低位优先发送模式)
控制码是接收端最后用来处理响应操作的。
NEC 码还规定了连发码(由 9ms 低电平+2.5m 高电平+0.56ms 低电平 +97.94ms 高电平组成),如果在一帧数据发送完毕之后,红外遥控器按键仍然没有放开,则发射连发码,可以通过统计连发码的次数来标记按键按下的长短或次数。
红外接收设备
红外遥控接收器的主要作用是将遥控发射器发来的红外光信好转换成电信号,再放大、限幅、检波、整形,形成遥控指令脉冲,输出至遥控微处理器。
主要有三根引脚
正对接收头的凸起处看,从左至右,管脚依次是 1:VOUT,2:GND,3:VDD。
Vout引脚负责将接收到的红外信号转化为电信号后的输出。
为了提高接收的灵敏度,输出的高低电平和发射端可能是反相的。
由于红外接收头在没有脉冲的时候为高电平,当收到脉冲的时候为低电平, 所以可以通过外部中断的下降沿触发中断,在中断内通过计算高电平时间来判断 接收到的数据是 0 还是 1。
原理图
代码实现
本章所要实现的功能是:数码管上显示红外解码遥控器键值。
程序框架如下:
(1)编写数码管显示功能
(2)编写红外解码函数
(3)编写主函数
- 初始化红外接收器
● 设置引脚:将红外接收器的引脚配置为输入模式,以便能够检测红外信号。
● 配置中断:配置外部中断0以检测红外信号的下降沿触发。
● 打开中断:启用外部中断0和总中断允许,以便在接收到红外信号时能够进入中断服务函数。- 等待并验证引导信号
● 等待低电平:在中断服务函数中,首先等待一个约9ms的低电平信号,这是红外信号的引导码的开始。
● 时间限制:设置一个时间限制(如10ms),如果超过这个时间仍未检测到高电平,则放弃接收并退出。
● 验证高电平:在9ms低电平后,检查是否紧接着有一个约4.5ms的高电平信号。如果不是,则放弃接收并退出。- 接收数据位
● 循环接收:循环四次以接收四个字节的数据(地址码、地址反码、控制码和控制反码)。
○ 内部循环:在每次循环中,再次循环八次以接收一个字节的八位数据。
● 等待位开始:对于每个数据位,首先等待一个约0.56ms的低电平信号,这表示数据位的开始。
○ 时间限制:同样设置一个时间限制(如6ms),如果超过这个时间仍未检测到高电平,则放弃接收并退出。
● 测量高电平时间:接下来,测量高电平持续时间以确定数据位的值。
○ 判断逻辑:如果高电平时间大于或等于0.8ms,则该位为1;否则,该位为0。
● 存储数据:将接收到的位按正确顺序组合成一个字节,并存储在gired_data数组中。- 数据校验
● 检查反码:在接收完四个字节后,检查控制码(gired_data[2])和它的反码(gired_data[3])是否匹配。
● 错误处理:如果不匹配,则表明数据接收错误,将gired_data数组清零并退出。- 后续处理
● 解码数据:如果数据接收并校验成功,则可以根据需要对数据进行解码。
● 触发动作:根据解码后的数据执行相应的操作,如调整音量、切换频道等。
● 清除中断:清除外部中断0的标志位,以便能够接收下一个红外信号。
注意事项
● 时间精度:上述步骤中的时间值(如9ms、4.5ms、0.56ms和0.8ms)是基于常见的红外编码格式(如NEC编码)的。在实际应用中,需要根据具体的硬件和编码格式进行调整。
● 错误处理:在接收过程中,应充分考虑各种可能的错误情况,并设置相应的错误处理机制。
● 优化性能:为了提高接收的灵敏度和准确性,可以考虑使用更精确的计时方法和更高效的解码算法。
ired.h
#ifndef _IRED_H_
#define _IRED_H_#include "public.h"
sbit IRED = P3 ^ 2; // 红外接收头接到P3.2
extern u8 gIrd_code[]; // NEC码(地址码,地址反码,键值码,键值反码)void IRED_Init(void); // 初始化红外接收头#endif
ired.c
#include "ired.h"
u8 gIrd_code[4]; // NEC码(地址码,地址反码,键值码,键值反码)
void IRED_Init(void)
{IRED = 1; // 红外端口空闲状态 这里其实默认就是高电平
}
//中断0因为是P3^2的引脚我们就是中断0来写
void Ired_inter(void) interrupt 0 // 红外解码NEC
{u8 i, j; // i控制编码个数,j控制编码位数u8 time_out = 1000; //设置一个时间限制10ms 因为我们使用10us为一次循环那这里就初始值设置1000if (IRED == 0)//电平拉低了 中断信号开始了,要执行校验红外的任务了{// 分析引导码while (!IRED && time_out) // 等待引导码10ms低电平,若超时则跳出循环,10ms内还没有拉高证明不是这个引导码退出{time_out--;delay_10us(1);if (time_out == 0)return; // 信号超时}if (IRED)//证明引导码被拉高了,是这个,那么再次验证高电平5ms左右,看中间有没有波动被拉低了{time_out = 500; // 5ms的超时while (IRED && time_out) // 等待数据5ms低电平,若超时则跳出循环{time_out--;delay_10us(1);if (time_out == 0)return; // 5ms信号超时}//一高一低在规定时间内都符合,那就开始分析数据了// 分析32位数据//外层循环控制类型码数组,总共4个字节分别是地址码,地址反,控制码,控制反,0,1,2,3//控制码就是按键键值,到这里接收数据信号的时候是低电平for (i = 0; i < 4; i++) {gIrd_code[i] = 0; // 将所有编码初始化for (j = 0; j < 8; j++) //取数值{// 首先低电平0.6ms 600us开始 IRED =0time_out = 60;while (!IRED && time_out){time_out--;delay_10us(1);if (time_out == 0)return; // 0.6ms信号超时}//电平信号改变了,是这个数据,高电平IRED =1 // 看时序图可以发现逻辑1是2.25ms。560+1680 低电平,逻辑0是560+560低电平,这里假设定义一个2ms的//上面走了0.6ms的脉冲,下面要判断是0还是1只需要再走一个560us的低电平就行time_out = 20;while (IRED && time_out){time_out--;delay_10us(10);if (time_out == 0)return; // 2ms信号超时}//由于上面时间20-6约等于14 所以在14以内就是0,560us以内是逻辑0,超过就是1if (time_out < 8) {/* code */gIrd_code[i] |= 1 << j;}}}// 校验数据 数组2跟3是反码直接取反就可以,如果不等就重新取if (gIrd_code[2] != ~gIrd_code[3]){gIrd_code[2] = 0; // 校验失败gIrd_code[3] = 0; // 校验失败}}}
}
main.c
/*** 红外遥控器按下数码管显示实验以16进制显示 结尾为H**/
#include "public.h"
#include "smg.h"
#include "exit.h"
#include "ired.h"
#include "lcd1602.h"
#include "stdio.h"
void main(void)
{u8 u8code[8] = {0}; // 数码管显示的数字u8 hexStr[5]; // 存储转换后的字符串Int0_Init(); // 初始化定时器0IRED_Init(); // 初始化红外接收器SMG_Init(); // 初始化数码管显示LCD_Init(); // 初始化LCD液晶显示屏while (1){// LCD显示sprintf(hexStr, "%02X", (u16)gIrd_code[2]); // 这里必须把红外接收到的数值转化为16进制不然会出现bugLCD_ShowString(0, 0, hexStr);// 数码管显示// u8code[0] = smg_code[gIrd_code[2] / 16]; // 十位// u8code[1] = smg_code[gIrd_code[2] % 16]; // 个位// u8code[2] = 0x76; // H// SMG_Display(u8code); // 显示数码管}
}void Uart_Isp(void) interrupt 4
{
}// void Int0(void) interrupt 0
// {
// }void Int1(void) interrupt 2
{
}void Time0(void) interrupt 1
{
}void Time1(void) interrupt 3
{
}
注意上面有两种显示方式一种是在数码管显示,一种是在lcd1602上面显示,由于keil上面的sprintf有bug那么我们就需要将其转换成16位显示,不然会显示出倒着的数据
总结实现流程:
- 首先由于初始是高电平->
- 拉低代表开始了-> IRED =0
- 拉低引导10ms,循环判断是否拉高引导,如果10ms还没反应就退出,反之-> IRED =1 往下走
- 然后在拉高,拉高5ms ,看有没有做出反应拉低,在5ms内被拉低证明有反应有引导,反之-》 IRED =0 往下走
- 一低一高都引导了 再来处理数据 ->外层是数组的4个码,内层是数据的8位
- 首先数组4个元素清零, 取数值继续判断,首先是0.6ms的低电平,看下有没有波动被拉高了,被拉高了证明这是数据是对的 IRED =1 往下走
- 然后持续起码最低0.6ms的高电平 有个阈值 高于0.6ms就是1,反之是0
- 最后校验数组的第二个跟第三个元素互反
相关文章:
无线遥控红外通信
无线遥控红外通信 红外发射装置一般是指红外遥控器由 键盘电路 ,红外编码电路 电源电路 和红外发射 电路组成 一般的红外线波长为940nm左右,外形与普通发光二极管相同 红外遥控为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送…...
第一个C++程序--(蓝桥杯备考版)
第一个C程序 基础程序 #include <iostream>//头⽂件 using namespace std;//使⽤std的名字空间 int main()//main函数 {cout << "hello world!" << endl; //输出:在屏幕打印"hello world!" return 0;}main函数 main 函数是…...
Rust包管理和构建工具
Cargo 是 Rust 语言的包管理和构建工具。它提供了一套完整的工具链,用于管理 Rust 项目的依赖关系、编译代码、运行测试和生成文档。Cargo 极大地简化了 Rust 项目的开发和部署过程,使得开发者可以专注于编写代码,而不是处理构建系统的复杂性…...
STM32输入捕获详解
目录 一、引言 二、输入捕获原理 三、寄存器介绍 四、配置步骤 1.开启时钟 2.GPIO 初始化 3.初始化定时器 4.配置输入捕获模式 5.使能捕获和更新中断 6.设置中断分组并编写中断服务函数 7.使能定时器 五、程序示例 六、总结 一、引言 在嵌入式系统开发中࿰…...
利用高德地图API,如何在PHP与vue3中实现地图缩放功能
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
Selenium WebDriver:自动化网页交互的利器
Selenium WebDriver:自动化网页交互的利器 在当今快速发展的Web开发领域,自动化测试已经成为确保应用程序质量和用户体验的重要手段。Selenium WebDriver,作为Selenium工具包中的核心组件,正是这一领域的佼佼者。本文将详细介绍S…...
uniapp -- 实现页面滚动触底加载数据
效果 首选,是在pages.json配置开启下拉刷新 {"path": "pages/my/document/officialDocument","style": {"navigationStyle":</...
用ChatGPT-o1进行论文内容润色效果怎么样?
目录 1.引导问题发现 2.角色设定 3.整理常问修改 4.提供样例 5.小细节 小编在这篇文章中分享如何充分利用ChatGPT-o1-preview来提升论文润色的技巧。小编将持续跟进最新资源和最新的调研尝试结果,为宝子们补充更多实用的写作技巧。这些技巧将有助于您更有效地利…...
6 C/C++输⼊输出(下)(未完续)
1. OJ(online judge)题⽬输⼊情况汇总 在竞赛的 OJ 题⽬中,⼀般关于输⼊场景总结为下⾯四类: 接下来,我们就结合题⽬,给⼤家分别介绍。 1.1 单组测试⽤例 练习1 B2009 计算 (ab)/c 的值 - 洛谷 | 计算机科…...
题海拾贝:力扣 20、有效的括号
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡.-CSDN博客 我的专栏:《编程之路》、《题海拾贝》、《数据结构与算法之美》 欢迎点赞、关注! 1、题目 2、题解 这…...
视频推拉流EasyDSS无人机直播技术巡查焚烧、烟火情况
焚烧作为一种常见的废弃物处理方式,往往会对环境造成严重污染。因此,减少焚烧、推广绿色能源和循环经济成为重要措施。通过加强森林防灭火队伍能力建设与长效机制建立,各地努力减少因焚烧引发的森林火灾,保护生态环境。 巡察烟火…...
基于Hermite多项式的三维反时间波的生成
原创:daode3056(daode1212) 反时间波,也称为时间反演波,是一种在特定条件下能够实现波的聚焦和传播的技术。反时间波的产生基于时间反演技术,其原理和方法通常有: 1. [时间反演信号处理原理]: 时间反演技术并不是指时间…...
数据结构与算法复习AVL树插入过程
环境 $ cat /proc/version Linux version 6.8.0-45-generic (builddlcy02-amd64-115) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU Binutils for Ubuntu) 2.42) #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024 #include <std…...
MetaGPT源码 (Memory 类)
目录 MetaGPT源码:Memory 类例子 MetaGPT源码:Memory 类 这段代码定义了一个名为 Memory 的类,用于存储和管理消息(Message)对象。Memory 提供了多种操作消息的功能,包括添加单条或批量消息、按角色或内容筛选消息、删除最新消息…...
day1数据结构,关键字,内存空间存储与动态分区,释放
小练习 在堆区空间连续申请5个int类型大小空间,用来存放从终端输入的5个学生成绩,然后显示5个学生成绩,再将学生成绩升序排序,排序后,再次显示学生成绩。显示和排序分别用函数完成(两种排序方法࿰…...
C# 用封装dll 调用c++ dll 使用winapi
这里用c net 封装winapi函数 pch.h // pch.h: 这是预编译标头文件。 // 下方列出的文件仅编译一次,提高了将来生成的生成性能。 // 这还将影响 IntelliSense 性能,包括代码完成和许多代码浏览功能。 // 但是,如果此处列出的文件中的任何一个…...
vue2 如何设置i18n的默认语言为当前浏览器的语言
做到i18n这里设置默认语言的时候遇到了一些小问题,所以做个记录: 原始代码lang/index // index.js import Vue from vue import VueI18n from vue-i18n import Cookies from js-cookie // import elementEnLocale from element-ui/lib/locale/lang/en // element-…...
QT数据库SQLite:QsqlTableModel使用总结
数据库连接、数据模型与界面组件所涉及的类之间的关系如下所示: 数据库类 QSqlDatabase 类用于建立与数据库的连接,QSqlDatabase 对象就表示这种连接。QSqlDatabase 类的功能主要分为三大部分: 1、创建数据库连接,即创建 QSqlDat…...
服务器零配件
阵列卡 H3C电池 RAId 卡 内存条位置 HBA卡 MOC卡...
MySQL 学习 之 批量插入数据性能问题
文章目录 现象优化 现象 在使用 kettle 同步大数据的数据到我们的 MySQL 数据库中时发现,数据量大时插入效率很慢,大约在 2000/s 优化 在 MySQL 驱动连接中添加 rewriteBatchedStatementstrue 参数,减少 网络 IO DB IO 耗时 默认关闭指定…...
会话管理和身份验证和授权
Cookie、Session、Token Cookie 简介:[Cookie]是一种小型文本文件,由服务器发送到用户的浏览器并保存在用户的计算机上。其主要作用是识别用户身份、跟踪用户活动、保存用户设置等。Cookie通常由名称、值、域名、路径、过期时间等字段组成,并…...
RK3588 rknpu2/rkllm/rockit/mpp/rga 等源码验证
RK3588 简介 本项目基于rk3588硬件平台,将嵌入式、流媒体、AI等相关的技术验证源码地址 源码说明 buildroot 为buildroot使用方法dk_doc 为rk的文档mpp 在mpp例子上增加推流rga 为rk3588的硬件加速模块,可快速处理视频,提供的API接口与op…...
【CSS in Depth 2 精译_075】12.2 Web 字体简介 + 12.3 谷歌字体的用法
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 12.2 Web 字体 ✔️12.3 谷歌字体 ✔️12.…...
【数字花园】个人知识库网站搭建:①netlify免费搭建数字花园
目录 [[数字花园]]的构建原理包括三个步骤:五个部署方案教程相关教程使用的平台 步骤信息管理 这里记录的自己搭建数字花园(在线个人知识库)的经历,首先尝试的是网上普遍使用的方法,也就是本篇文章介绍的。 后面会继续…...
访问者模式的理解和实践
在软件开发过程中,设计模式为我们提供了解决常见问题的最佳实践。访问者模式(Visitor Pattern)是行为设计模式之一,它将数据操作与数据结构分离,使得在不修改数据结构的前提下,能够定义作用于这些元素的新的…...
SpringBoot中Selenium详解
文章目录 SpringBoot中Selenium详解一、引言二、集成Selenium1、环境准备1.1、添加依赖 2、编写测试代码2.1、测试主类2.2、页面对象2.3、搜索组件 三、使用示例四、总结 SpringBoot中Selenium详解 一、引言 在现代软件开发中,自动化测试是提高软件质量、减少重复…...
Android 系统应用重名install安装失败分析解决
Android 系统应用重名install安装失败分析解决 文章目录 Android 系统应用重名install安装失败分析解决一、前言1、Android Persistent apps 简单介绍 二、系统 persistent 应用直接安装需求分析解决1、系统应用安装报错返回的信息2、分析解决 三、其他1、persistent系统应用in…...
scala中如何解决乘机排名相关的问题
任务目标: 1.计算每个同学的总分和平均分 2.按总分排名,取前三名 3.按单科排名,取前三名 好的,我们可以用Scala来完成这个任务。下面是一个简单的示例代码,它将演示如何实现这些功能: // 假设我们有一个…...
常用的注解
RequestMapping 用于映射请求路径 可以添加在类或方法上 请求类型 请求类型包括GET、POST、PUT、DELETE等 默认支持GET和POST两种方式 简写:GetMapping、PostMapping、PutMapping、DeleteMapping PostMapping("/buy") 等价 RequestMapping("/buy&quo…...
移动应用渗透测试:确保通过测试的关键安全策略
无论您是为了维持合规性、保护敏感用户数据,还是维护品牌声誉,顺利通过渗透测试(Pen Test)都是至关重要的。为了帮助您轻松应对这一过程,有几个积极的安全措施可以帮助确保您的应用程序更加安全。 通过采用高级安全机…...
【Canvas与光阑】立方体六彩光阑
【成图】 120*120的png图标 大小图: 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>立方体 六彩光阑 Draft2</…...
【ArcGIS微课1000例】0135:自动生成标识码(长度不变,前面自动加0)
文章目录 一、加载实验数据二、BSM计算方法一、加载实验数据 加载专栏《ArcGIS微课实验1000例(附数据)》配套数据中0135.rar中的建筑物数据,如下图所示: 打开属性表,BSM为数据库中要求的字段:以TD_T 1066-2021《不动产登记数据库标准》为例: 计算出来的BSM如下图: 二、B…...
nginx文件上传下载控制
上传大小控制 client_max_body_size 设置最大客户端请求体大小 默认大小1M,可以使用在http, server, location块。 根据不同的请求路径设置不同的大小控制 server {listen 9001;client_max_body_size 2M;location / {root D:\\server\\nginx-1.22.0\\html\\9001;}locat…...
LabelImg使用教程
(yolov5scondaPython3123) D:\PyCharm20240724\20240724PyCharmProject>conda.bat deactivate D:\PyCharm20240724\20240724PyCharmProject>conda activate labelimg_env (labelimg_env) D:\PyCharm20240724\20240724PyCharmProject> labelimg 创建快捷键方式...
运维新手入门——KVM(Beginner‘s Guide to Operations and Maintenance - kvm)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...
Android 10.0 WiFi连接默认设置静态IP地址功能实现
1.前言 在10.0的系统rom定制化开发中,在定制化某些功能开发中,在wifi模块中,有产品需要要求设置wifi静态ip功能,而系统中wifi连接 后ip是动态的,每次开机后 连接wifi的ip就是不固定的,所以产品需要采用固定ip,就需要实现静态ip功能 2.WiFi连接默认设置静态IP地址功能实…...
ceph /etc/ceph-csi-config/config.json: no such file or directory
环境 rook-ceph 部署的 ceph。 问题 kubectl describe pod dragonfly-redis-master-0Warning FailedMount 7m59s (x20 over 46m) kubelet MountVolume.MountDevice failed for volume "pvc-c63e159a-c940-4001-bf0d-e6141634cc55" : rpc error: cod…...
windows C#-限制可访问性
属性或索引器的 get 和 set 部分称为访问器。 默认情况下,这些访问器具有与其所属属性或索引器相同的可见性或访问级别。不过,有时限制对其中某个访问器的访问是有益的。 通常,限制 set 访问器的可访问性,同时保持 get 访问器可公…...
Java-22 深入浅出 MyBatis - 手写ORM框架3 手写SqlSession、Executor 工作原理
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...
【数据分享】1901-2023年我国省市县三级逐年最低气温数据(Shp/Excel格式)
之前我们分享过1901-2023年1km分辨率逐月最低气温栅格数据和Excel和Shp格式的省市县三级逐月最低气温数据,原始的逐月最低气温栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据!基于逐月栅格数据我们采用求年平均值的方法得到逐年最…...
AlphaPose、yolov8Pose、RTMPose进行对比
一、Alphapose 参考: https://blog.csdn.net/m0_45850873/article/details/123939849...
【Linux】文件系统
文章目录 Group中的组成部分inode tableinode bitmapdata blocksblock bitmapgroup descriptor tablesuper block 文件系统关于inode和blocksinode和block是如何映射的?12个直接映射一级间接索引二级间接索引三级间接索引 为什么访问文件的是inode,但是我…...
希迪智驾持续亏损8.2亿:毛利率下滑,冲刺“自动驾驶矿卡第一股”
《港湾商业观察》黄懿 近日,希迪智驾(湖南)股份有限公司(下称“希迪智驾”)向港交所主板递交上市申请,联席保荐人为中金公司、中信建投国际、中国平安资本(香港)。 资料显示&#…...
Python实现中国象棋
探索中国象棋 Python 代码实现:从规则逻辑到游戏呈现 中国象棋,这款源远流长的棋类游戏,承载着深厚的文化底蕴与策略智慧。如今,借助 Python 与 Pygame 库,我们能够在数字世界中复刻其魅力,深入探究代码背后…...
C++小碗菜之五:GDB调试工具
“程序员不是编写代码的人,而是调试错误的人。” – 约翰本尼斯(John Bennet) 目录 前言 在虚拟机中安装 GDB GDB调试的实战演练 创建示例代码 例子: 使用 GDB 调试 编译代码 启动 GDB 设置断点 运行程序 打印变量值 …...
机器学习干货笔记分享:朴素贝叶斯算法
朴素贝叶斯分类是一种十分简单的分类算法,即对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。 以判定外国友人为例做一个形象的比喻。 若我们走在街上看到一个黑皮肤的外…...
bug:uniapp运行到微信开发者工具 白屏 页面空白
1、没有报错信息 2、预览和真机调试都能正常显示,说明代码没错 3、微信开发者工具版本已经是win7能装的最高版本了,1.05版 链接 不打算回滚旧版本 4、解决:最后改调试基础库为2.25.4解决了,使用更高版本的都会报错,所…...
VBA API 概述 | 宏编程
注:本文为 “VBA API 概述 | 宏编程 | 执行速度慢” 相关文章合辑。 VBA API 详解 Office 二次开发于 2020-12-17 22:27:10 发布 Office 版本变动 在 Office 2010 之前,微软仅提供 32-bit 版本的 Office。而自 Office 2010 起,出现了 32-b…...
《九重紫》逐集分析鉴赏—序言、概览、框架分析
主标题:《九重紫》一起追剧吧副标题:《九重紫》逐集分析鉴赏—序言、概览、框架分析《永夜星河》后,以为要浅尝剧荒,一部《九重紫》突出重围。 看了宣传片感觉不是很差,看了部分剪辑感觉还可以,看了一两集感…...
《Vue进阶教程》第六课:computed()函数详解(上)
往期内容: 《Vue零基础入门教程》合集(完结) 《Vue进阶教程》第一课:什么是组合式API 《Vue进阶教程》第二课:为什么提出组合式API 《Vue进阶教程》第三课:Vue响应式原理 《Vue进阶教程》第四课&#…...