自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

BUG之友的博客

学习过程中的总结,整理和借鉴,若有侵权请及时告知。

  • 博客(101)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

转载 c++中的auto、const auto&

auto:在块作用域、命名作用域、循环初始化语句等等 中声明变量时,关键词auto用作类型指定符。const:修饰符​ 想要拷贝元素:for(auto x:range)​ 想要修改元素 : for(auto &&x:range)​ 想要只读元素:for(const auto& x:range)auto​ auto即 for(auto x:range) 这样会拷贝一份range元素,而不会改变range中元素;但是!(重点) 使用for(auto x:vector)时得到

2020-11-06 17:49:48 637

转载 静态库和动态库的区别

什么是库库是写好的,现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说,库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a.lib)和动态库(.so.dll)。所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:静态库之所以称为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。试想一

2020-11-06 10:46:18 984

原创 Qt paintEvent事件显示图片文字

paintEvent事件可以重新绘制全部或者部分窗口,任何从QWidget派生的类都可以进行重绘。paintEvent事件的发生可能有以下几个原因:(1)repaint()或者update()被调用(2)这个窗体之前被隐藏,重新显示时(3)或者一些其他原因(官方文档这样写的)其中,update()不是立即调用paintEvent(),要等Qt返回主事件循环后才会进行,而调用repaint()会立即调用paintEvent()函数来重绘窗口。在进行绘制时,通过Qpainter类进行绘图,例如通过以

2020-11-05 18:52:37 1083

原创 QT之setStyleSheet设置Button样式

1.首先大致介绍一下setStyleSheet函数的作用:Qt中设置按钮或QWidget的外观是,可以使用QT Style Sheets来进行设置,非常方便。可以用setStyleSheet(“font: bold; font-size:20px; color: rgb(241, 70, 62); background-color: green”);来进行设置,其他的样式介绍如下:font: bold; 是否粗体显示border-image:""; 用来设定边框的背景图片。border-rad

2020-11-04 16:54:40 3845

原创 QT之鼠标事件的全局捕获

Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他QObject对象的事件,在事件到达之前对其进行处理。上示的图片黑色键盘是一个独立的Widget的子类CKeyboardForm,白色的背景部分是一个独立的主窗口。现在要实现在白色背景上任意点击某一位置即可实现虚拟键盘的收起,很显然这里就要通过CKeyboardForm来截取全局的鼠标(触摸屏)点击事件,并在代码的监视处实现以上的功能,这就是事件过滤的方法。实现一个事件的过滤包括两个步骤1.在目标对象上调用installEventFi

2020-11-03 17:51:00 4871

原创 QT之Button插入图片

给Button插入背景图片简单来讲就以下两个步骤。1.不管是windows还是linux下,将所需要的背景图片添加入资源文件里面,如图:然后记住相对工程而言的图片资源文件的路径。这里我的是":/image/res/CH-EN.png"。2.然后给Button添加背景图片的对应类操作不止一次,想QIcon,QPixmap等都可以,还可以通过.qss演示表,这里我使用的是比较简单的QIcon。代码如下:QIcon icon(":/image/res/CH-EN.png"); //创建icon对象,保存

2020-11-03 16:21:53 4518 2

转载 QT项目中添加资源文件

工程文件的后缀是pro,资源文件的后缀是qrc。下面往一个建好的工程中添加资源文件。假设我的工程目录在/home/home/linux/QT/project/snake目录下面,然后在该工程目录下面创建一个img文件夹用来存放我们的资源,比如文件,图片等。一、点击新建文件或工程选择添加QT资源文件,名称随便填写,我这里填写test,路径存放在工程路径下面。其他的填写默认即可。建立好资源后会默认进入资源管理界面点击添加->添加前缀 输入/png /* 这里是我们自己定义的路径前缀

2020-11-02 10:49:33 370

转载 QT 快捷键操作

Qt 中面对巨大的工程,需要许多快捷键,最重要的就是跳转函数定义,那就是: F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果)如果F2 不能找到这个内容,那就command + shift + F 整个文件去寻找还有一些其他的操作F1 查看帮助F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果)Shift+F2 声明和定义之间切换F4 头文件和源文件之间切换Ctrl+1 欢迎模式Ct

2020-10-30 15:33:27 495

转载 Qt: MinGW 与MSVC的区别

Qt 中有两种方式编译:一种是MinGW ,另一种MSVC,是两种不同的编译器。1、MSVC是指微软的VC编译器2、MinGW是指是Minimalist GNU on Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你 在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方运行时库。...

2020-10-30 09:57:20 1346

转载 BeyondCompare4完美“破解“

将以下操作保存为bat文件(新建txt,然后将后缀改为bat),然后双击运行即可。reg delete “HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare 4” /v CacheID /f这个操作是删除BeyondCompare4注册表里CacheID的值;如果你不嫌麻烦的话,可以等到试用期到了之后自己手动执行该操作,重新打开之后试用期就又是30天了;另外你可以添加定时任务,比如每隔3周自动执行该操作,这样试用期就会自己刷新了的。操

2020-10-29 15:24:10 75644 24

转载 函数调用的执行过程

函数,英文名称function,function的更贴切的意思是“功能”或者是说“作用”,但是在中国为什么将function翻译成函数,我非常不理解,也许函数这个名称更加“高大上”的缘故吧!一、函数的由来一个程序经常会通过多次执行相同或者相近功能的程序段来完成,在早期的程序设计中,这些重复的功能段必须通过重复书写代码来实现。这样,不仅会引起重复的劳动、增加程序的长度、造成代码的不一致,而更重要的是,大量重复的程序代码不利于程序的立即与理解。于是人们将功能重复的程序段抽象出来形成一个独立的功能模块,并为

2020-10-28 11:26:15 11320

原创 难吗?不难。

须知少时凌云志,曾许人间第一流。

2020-10-24 10:02:48 136

转载 I2C设备、读写地址的关系

结论:I2C设备的写地址 = I2C设备地址 << 1I2C设备的读地址 = (I2C设备地址 << 1) + 1例如:#define MAX_17040_BATTERY_I2C_ADDR (0x36)#define MAX_17040_BATTERY_WRITE_ADDR (MAX_17040_BATTERY_I2C_ADDR << 1)#define MAX_17040_BATTERY_READ_ADDR

2020-09-27 10:04:26 3954

转载 DECLARE_MESSAGE_MAP用法

DECLARE_MESSAGE_MAP( )说明:你的程序中的每一个CCmdTarget的派生类都可以提供一个消息映射以处理消息。在你的类声明的末尾使用DECLARE_MESSAGE_MAP宏。然后,在实现了类成员函数的.CPP文件中加入BEGIN_MESSAGE_MAP宏,再加入每个消息处理函数的宏入口,最后使用END_MESSAGE_MAP宏。注意:如果你在DECLARE_MESSAGE_MAP之后定义了成员,那么你必须为它们指定新的访问类型(public,private 或protected)

2020-09-20 15:47:28 1210

转载 VS中ID号的格式ID_,IDS_,IDC_之间有什么区别

IDC->ID of ControlIDI->ID of IconIDB->ID of BitmapIDD->ID of DialogIDS->ID of StringID -> ID of Menu是VC为了标识不同的资源而,使用的符号,其实他们都是数字,在 resource.h 中可以找到它们,是有一定规律的,不是随机的。一般我们不用去改动它们,只要在资源里面编辑就行了。习惯上IDC表示标

2020-09-19 16:24:40 1413

转载 在vc中添加变量向导中 类别 Value和control 是什么意思

ClassWizard支持为控件增加Value和Control两种类型的成员变量,但每个控件同时最多只能有一个Value型和一个Control型的成员变量,前者代表着控件的值,而后者代表着控件本身。如果只想设置或获取控件内部存储的值,那么可以选择添加一个Value型的变量,如果还想在运行时对控件的各种属性进行控制,那么可以选择添加一个Control型的变量。常见的Value型变量有int、UINT、long、DWORD、float、double、BYTE、short、BOOL、CString、CTime、

2020-09-19 14:23:33 598

转载 sln、sdf、vcxproj、vcxproj.filters/user各是什么文件

sln是解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息sdf (SQL Server Compact Edition Database File)文件,是工程的信息保存成了数据库文件,如果你没有参加大型的团队项目,不涉及到高深的调试过程,这个文件对于你来说没什么用了,可以放心的删除,如果你后来又需要这个文件了,简单,打开工程里的.sln文件重新编译链接就ok了vcxproj文件:工程文件,其中描述了工程的各项属性,修改该文件后再重新build时vs会重新build工程vcxpr

2020-09-14 11:28:10 3517

原创 UAC设备采用Feedback方案实现时钟同步

前段时间在公司设备上实现了speaker端的feedback功能,这里来总结分享一下,具体代码我就不写了,也没多少。主要是思路分析,毕竟思路在手,天下我有。下面的内容只是一个概述,有兴趣的小伙伴可以留言一起讨论学习。1.方案需求设备端通过feedback反馈功能来实现和主机设备的音视频数据在固定的一段时间内需求达成一致,从而达到数据不会丢失或者无法获取到的效果。2.方案原理USB2.0标准协议在5.12.4 Isochronous Devices 章节对于Feedback有所讲解。Source

2020-09-11 15:55:56 2141 1

转载 U-Boot启动与功能

Bootloader简介系统上电后,需要一段程序来进行初始化:关闭看门狗,改变系统时钟,初始化存储控制器,将更多的代码复制到内存中等。它就是bootloader。bootloader的实现非常依赖具体硬件,在嵌入式系统中,硬件配置千差万别,即使是相同的CPU,它的外设(比如flash)也可能不同,所以不可能有一个bootloader支持所有的CPU,所有的电路板。即使是支持CPU架构比较多的UBoot,也不是一拿来就可以使用(除非里面的配置刚好和你的板子相同)。需要进行一些配置。CPU上电后,会从..

2020-09-11 14:14:47 408

转载 在secureCRT上设置常用的快捷输出按钮栏

在secureCRT软件上可以设置快捷按钮,这样可以方便大家提高工作效率,直接在工具内快速输出常用的字符串,而不至于要去别的地方拷贝或者去问别人这个命令是什么,尤其是有些比较长比较难记的命令。打开secureCRT软件,单击菜单栏上面的【View】,把“Button Bar”勾选上,就会在软件界面下面出现一行按钮栏以及一个矩形的空白栏,如下图所示。2、在按钮栏的右侧会有一个按钮总项,默认为【Default】,也可以在按钮栏上单击鼠标右键,选择【New Button Bar】创建新的按钮总项,可以设置多

2020-08-31 20:12:28 3535

原创 固件(Firmware)与驱动的区别

**驱动和固件(firmware)都是代码,前者为软件服务,后者为硬件服务。**在操作系统概念还不明确的时代,二者是没有明显区别的。但是随着计算机体系结构的发展,硬件的种类开始变多,操作系统的种类也变多了。这个时候,因为各种技术的、商业的原因,硬件厂商希望自己的硬件能被更多的软件厂商使用,所以就需要在硬件之上做一些封装,让自己的硬件操纵起来更容易,这个时候就要有firmware这种东西了,它简化了软件与硬件的交互。但是为什么不把fimware做的很完美,做的不需要驱动支持呢?因为有不同的操作系统。我不知道你

2020-08-27 10:42:04 2758 1

转载 单片机ISP、IAP和ICP几种烧录方式的区别

玩单片机的都应该听说过这几个词。一直搞不太清楚他们之间的区别。今天查了资料后总结整理如下。ISP:In System Programing,在系统编程IAP:In applicating Programing,在应用编程ICP:In Circuit Programing,在电路编程ISP是指可以在板级上进行编程,也就是不用拆芯片下来,写的是整个程序,一般是通过ISP接口线来写。IAP虽然同样也是在板级上进行编程,但是是自已对自已进行编程,在应用中进行编程,也即可以只是更改某一部分而不影响系统的其它

2020-08-27 09:53:44 1658

原创 MCU的IO口模拟PWM信号

单片机的GPIO口可以产生PWM信号,可以使用定时器来实现。使用定时器控制GPIO口的高电平和低电平的翻转时间即可实现输出方波的频率控制和占空比控制。PWM的两个指标: 占空比和频率,普通的IO只要能控制高低电平变化就可以模拟PWM信号了。什么叫占空比?高电平时间占整个周期时间的比例叫占空比,比如一个周期为100ms,高电平部分占了40ms,那么占空比就是40%。什么叫频率?每秒种的周期数叫做频率,假如每秒产生50个波形,那么频率就是50Hz。IO口输出PWM信号的思路所谓PWM信号是指脉冲宽

2020-08-26 10:39:36 7056

转载 什么是看门狗(watchdog)

看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个复位信号到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起

2020-08-26 10:10:58 4328

原创 tty串口和普通串口(uart)的区别

我们可以将一个串口注册为普通的字符设备,然后read/write收发数据就可以。但是如果将一个串口按照tty规定的方式注册(注册方式参考内核相关驱动代码),他就有一个tty的框架了,在此基础上可以将这个tty串口关联为控制台或者其他的tty类型的设备。这就是所谓的line discipline,可以挂载ppp或者Bluetooth的line discipline。这样就能实现基于串口的蓝牙和网络(当然你串口的另一端需要是连接的对应设备)。...

2020-08-25 11:00:03 2289 1

转载 Keil、uVision、MDK、Keil C51之间的区别比较

我们要区别的概念:KEIL uVision,KEIL MDK,KEIL For ARM,RealView MDK,KEIL C51,KEIL C166,KEIL C251从接触MCS-51单片机开始,我们就知道有一个叫KEIL的软件。在开发单片机时,使用的是C语言或者汇编语言,我们知道,这两种语言都不能直接烧写到单片机里面,执不执行暂且不说,光是代码的体积,就足以撑破整个单片机。所以,我们需要一个软件,把C语言或者汇编语言编译生成单片机可执行的二进制代码,而且它的体积也非常的小,足够存放在单片机的存储器

2020-08-25 08:58:41 9679

转载 Makefile详解

概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为,makefile关系到了整个工程的编译规则。一

2020-08-20 15:17:59 527

转载 音频变声原理 附简单示例代码

关于音频变声算法,这个是一个很多人特别感兴趣的话题。当然也有不少开源算法可以参阅学习,有基于时域,也有基于频域的算法。最终算法想要达到的目的是一致。最近也有不少网友问过关于变声算法的一些细节问题,邮件询问我。要给出一个比较合理或者说通俗易懂的解释,看似简单,其实还蛮难的。按照大概的一个逻辑思路,稍微理一理,也不打算讲特别高深的,当然也是因为讲不来。之于图像算法领域,非常重要的算法是高斯模糊,当然也可以认为是卷积,高斯模糊是卷积的一种特例,这里就不展开了。而之于音频,也许你也猜到了,基于时间的

2020-08-17 11:08:12 3952

转载 SPI,IIC, IIS, UART, JTAG介紹

SPISPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。 SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号: (1)MOSI – 主器件数据输出,从器件数据输入 (2)MISO – 主器件数据输入,从器件数据输出 (3)SCLK – 时钟信号,

2020-08-14 14:40:36 823

原创 VS 多行注释与取消多行注释快捷键

组合键如下:注释: CTRL+K+C取消注释: CTRL+K+U

2020-08-07 15:13:35 916

原创 Windows10输入法变成繁体怎么办?

**可能是在使用别的IDE的时候热键冲突了(我是VScodes热键冲突了)直接在文档编辑界面:Ctrl + Shift + F(可实现简体到繁体的切换)**

2020-07-31 17:28:47 1155 1

转载 DMA介紹

概念“Direct Memory Access(存储器直接访问)。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据。整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外(开始和结束时候要做中断处理),在传输过程中CPU可以进行其他的工作(前提是未设置停止CPU访问)。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高”。DMA传送方式是让存储器与外设、或外设与外设之间直接交换数据,不需要经过CP

2020-07-31 14:13:29 2510 1

原创 USB基础知识了解

USB 的重要关键字:端点:位于 USB 设备或主机上的一个数据缓冲区,用来存放和发送 USB 的各种数据,每一个端点都有唯一确定的地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)。帧:时间概念,在 USB 中,一帧就是 1ms,它是一个独立的单元,包含了一系列总线动作,USB 将 1 帧分为好几份,每一份就是一个 USB 传输动作。上行、下行:设备到主机为上行,主机到设备为下行。Q1:USB 的传输线结构是怎样的?一条 USB 传输线分别由地线、电源线、D+和 D-

2020-07-29 15:02:54 5899

原创 C语言的宏定义变量后为什么UL?

通常用宏来定义一年中有多少秒 :#define SECONDS (60* 60* 24* 365)在变量后面加上UL的定义方式:#define SECONDS (60UL* 60UL* 24UL*365UL)#define SECONDS (60* 60* 24* 365UL)原因分析:在32位的设备上,int的范围是-2147483648~2147483647,unsigned int范围是0~4294967295一年的 SECONDS = 60* 60* 24*365 = 31,536,0

2020-07-27 20:17:41 2291

转载 USB的编码方式及时钟同步方式

NRZI 编码像 UART、I2C、SPI 、USB 这样的串行总线,通信时连续的 0、1 信号只通过一根数据线发送给接受者。但是因为发送者和接收者运行的频率不一样,信号的同步就是个问题,比如,接受者接收到了一个持续一段时间的低电平,无法得知这究竟是代表了 5 个 0 还是 1000 个 0。一个解决办法,就是在传输数据信号的同时,附加一个时钟信号线,用来同步两端的传输,接受者在时钟信号的辅助下对数据信号采样,就可以正确解析出发送的数据了,比如 I2C 就是这样做的,SDA 来传输数据,SCL

2020-07-20 17:07:16 1871

转载 高位字节与低位字节简单介绍

一般一个16位(双字节)的数据,比如 FF1A (16进制)那么高位字节就是FF,低位是1A如果是32位的数据,比如 3F68415B高位字(不是字节)是3F68低位字是415B右边是低位位,左边是高位C语言中的高位字节和低位字节是什么意思?通常我们从最高有效位(most significant digit)开始自左向右书写一个数字。在理解有效位这个概念时,可以想象一下你的支票数额的第一位增加1和最后一位增加1之间的巨大区别,前者肯定会让你喜出望外。计算机内存中一个字节的位相当于二进制数

2020-07-20 09:47:52 21055 1

转载 USB标准请求

1.USB标准设备请求的结构1.1 标准请求bmRequestType 的D6~D5为00的请求,USB协议定义了11个标准请求(bRequest),其名字与相应的bRequest的值如下表:表3.5.3是各个标准请求的结构及需要传输的数据,常用的几个请求有:GET_DESCRIPTOR、SET_ADDRESS和SET_CONFIGURATION。下面详细介绍这几个请求:1.2 GET_DESCRIPTOR 请求需要注意的是 wValue, wIndex, wLength 这三个域都是两字

2020-07-17 18:11:23 1805

转载 USB枚举过程

1. 枚举是什么?枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。调试USB设备,很重要的一点就是USB的枚举过程,只要枚举成功了,那么就已经成功大半了。USB架构中, hub负责检测设备的连接和断开,利用其中断IN端点(Interrupt IN Endpoint)来向主机(Host)报告。在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和子hub上的设备)连接。USB总线拓扑结构见下图(最顶端为主机

2020-07-17 18:00:33 943 2

转载 USB设备的VID与PID

一、VID和PIDPID/VID唯一标识一个设备,HardwareID是为了给系统识别的 ,他是根据PID/VID而生成的。这个与序列号没什么关系,序列号一般都是厂家固化到芯片中的信息而已。GUID只是为了标志你安装的设备是属于一个什么类当中,这个类可以显示再设备管理器中。比如:你可以定义一个类,当然这个类有与系统中任何类都不同的GUID,然后选择一个图标和类名,就可以同网卡等其他设备一起显示在设备管理器下的根目录中了根据USB规范的规定,所有的USB设备都有供应商ID(VID)和产品识别码(PID),

2020-07-17 11:13:32 2799

转载 USB复合设备与组合设备的区别

关键字Communication Device Class,简称CDCUSB Compound Device,USB复合设备USB Composite Device,USB组合设备摘要Compound Device内嵌Hub和多个Function,每个Function都相当于一个独立的USB外设,有自己的PID/VID/DID。Composite Device内只有一个Function,只有一套PID/VID/DID,通过将不同的interface定义为不同的类来实现多个功能的组合。正文C

2020-07-17 10:58:33 2925 4

USB2.0协议中文详解.ppt

usb2.0中文版,希望对你有帮助。

2020-07-27

USB_HID协议中文版.pdf

USB-HID的部分简介,非常适合新手来入手,结合HID类标准文档一起查看会事半功倍,通俗易懂的对HID设备的讲解,希望对大家有帮助。

2020-07-27

findIp.bat

一台PC的IP已知,同时另一台PC或终端的IP未知但是它们是在同网段的条件下,查找未知PC/终端的IP地址。

2021-01-18

字符串描述符生成工具.rar

USB的字符串生成工具,希望对于大家有帮助。

2020-07-29

方便快捷好用的截图软件

方便快捷好用的截图软件

2021-01-15

SecureCRSecureFXPortable32.zip

SecureCRSecureFXPortable32.zip

2021-01-15

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除