自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (3)
  • 收藏
  • 关注

原创 4、内存泄漏检测(多线程)

多线程下使用Valgrind工具的memcheck检查.

2023-12-30 23:34:35 1155

原创 3、内存泄漏检测方法(单线程)

之后运行可执行文件后,同级文件夹下产生一个名为。cmake添加方式如下所示。即可.使用方法如下所示.gcc添加方式如下所示.在代码中添加如下代码.单线程下使用系统自带。编译产生可执行文件.

2023-12-30 23:28:12 440

原创 2、gdb常用功能2

即可进入到程序崩溃前的堆栈环境,之后利用上述堆栈和线程相关指令查看内部数据使用情况. 后续根据断点和观察点等指令快速调试定位问题.结合上述图片理解,第一列的id是gdb内部为线程排序的一个id,第三列中的id为代码中实际的id.在执行程序,则程序崩溃后,会在当前目录自动保存一个叫做core的文件.中的regexp为第三列中的id,输出的id为第一列的id.从上到下就是调用层级的关系.第一例的数字就是堆栈编码.程序崩溃不好定位,在执行程序前,输入如下指令.中的num为第一列中的id。进入到指定堆栈查看数据.

2023-12-30 23:08:45 407

原创 1、gdb基本功能

linux下我现在接触到的常用调试工具如下.gdb是最为通用的,普遍linux会自带gdb工具,使用简单,无额外需求.gdbgui需要额外安装,且会占用处理器资源.cmake-tools是使用vscode远程ssh设备时在vscode上安装的一个插件,必须用cmake组织管理代码且使用vscode时才可以使用该工具借助于vscode图形化界面进行debug,但相当占用处理器资源.下面只介绍gdb具体使用方法.

2023-12-30 22:12:20 896

原创 14、USBH HOST对接RTT系统(CDC+MSC)

文章目录USBH HOST对接RTT1.1 CDC设备实现1.1.1 CDC类实现思路1.1.2 CDC类驱动文件修改1.1.3 CDC类设备文件实现2.1 MSC类设备驱动实现2.1.1 MSC类设备实现思路2.1.2 MSC类设备实现USBH HOST对接RTT将USBH host注册到RTT中需要进行以下几步.实现设备驱动设备注册.1.1 CDC设备实现1.1.1 CDC类实现思路官方驱动修改思路.将CDC类中的状态机一直置为接收状态.接收完成后,通过USBH_CDC_Rece

2022-01-05 00:09:08 1357 7

原创 13、USBH composite类支持(CDC+MSC)

文章目录USBH composite类编写1.准备工作2.修改2.1.接口修改2.2. 类API修改2.2.1 cdc类修改2.2.2 msc类修改2.3 copmosite类源文件添加2.3 修改应用接口、备注USBH composite类编写ST的USBH库支持复合设备,但是需要用户针对复合设备编写自定义符合类处理函数.1.准备工作明确复合设备是哪几个类构成,以CDC+MSC为例.使用CUBEMX生成USBH支持ALL CLASS的工程.2.修改2.1.接口修改打开usbh_conf,h

2022-01-05 00:08:10 1145

原创 2.1、LVGL文件系统移植

LVGL文件系统移植文章目录LVGL文件系统移植2.1、LVGL文件系统接口2.1.1 文件系统移植2.1.1.1、打开开关2.1.1.2、修改文件2.1.2、使用文件系统2.1、LVGL文件系统接口最近开发过程中用到了LVGL的文件系统读取文件显示到LCD,在前些笔记里面也有人询问文件系统的使用,做个笔记记录一下移植过程.要使用LVGL的文件系统接口,首先要明确你使用LVGL的项目中的文件系统接口怎么用.比如你使用的是RTT的DFS,那么你可以选择使用RTT官方提供的POSIX接口,也可以使用d

2021-08-31 22:46:31 3702 3

原创 12、HOST 数据结构

HOST 数据结构HOST库里面有很多数据类型,其中最重要的如下所示.类型名功能USBH_HandleTypeDef管理主机库HCD_HandleTypeDef管理硬件属性USBH_ClassTypeDef管理类处理方法12.1、USBH_HandleTypeDef管理主机库各种状态的结构体.成员变量及描述在官方文档中都有,如下所示.一般情况下,针对MCU的HOST开发都是一个主机对应一个设备居多,我也是这种情况,所以重点关注device、gstate即

2021-08-12 23:43:53 475

原创 11、ST USB HOST概述

ST USB HOST最近搞开发,有个需求是需要模块支持USB复合设备(MSC+CDC),于是在RTT和ST的USB HOST库里选择了ST的,原因很简单,RTT目前的HOST库版本过于混乱,且不支持CDC类.因为以前看过ST DEVICE的源码和主要逻辑,所以这次上手很快.这几篇笔记记录下前段时间开发过程中对ST HOST库的理解.11.1、HOST库参考资料UM1720用户手册(HOST)USB CDC类手册(官方文档)USB MSC类手册(官方文档)11.2、HOST库简介环境:

2021-08-12 22:59:09 771 6

原创 8.1、表盘

表盘文章目录表盘1、界面构成2、初始化事件2.1、图片2.1.1、背景图片2.1.2、运动图片2.1.3、电池电量图片2.2、容器2.3、 标签控件3、循环事件4、触发事件5、退出事件1、界面构成背景图片温度海拔标签控件电池图标文字控件(图片)年月日标签控件时分标签控件依托于容器 秒led依托于容器运动图标图片运动步数标签控件一共分为三大部分,图片,标签控件,容器.这个页面详细说一下,后续的7个页面就不太详细介绍了,都是一些LVGL的基础知识,直接按照图

2021-01-31 01:14:00 1446

原创 8、界面的整体框架

界面文章目录界面页面框架界面管理其实关于业务逻辑这方面并没有什么好说的,有一个大概的想法去做就行,但这部分也是最费时间的地方,还有有原U主的代码作为参考,这次其实也只是在UP的基础上去修改一点东西,毕竟UI这个东西没个好的审美,做出来也费力不讨好,简称,我杀我自己…关于界面的实现,我使用PC端先仿真一些纯逻辑和界面的内容,涉及到硬件的先使用其他方法跳过,然后做完一个移植一个,直至全部完成.页面框架整个GUI是由8个页面构成的,每个页面都是一个大小等同于屏幕大小的容器,在上电后,各个硬件模块初始化

2021-01-31 01:13:28 1109 4

原创 7.6、LSM6DSL_SENSOR_HUB模式

7.6、LSM6DSL_SENSOR_HUB模式文章目录7.6、LSM6DSL_SENSOR_HUB模式7.6.1、简介7.6.2、LSM6DSL_SENSOR_HUB模式7.6.3、sensor_hub直连模式7.6.4 测试结果7.6.1、简介硬件概述里面讲了有两种接线模式,其中第二种模式允许外部传感器连接到LSM6DSL.7.6.2、LSM6DSL_SENSOR_HUB模式该模式下的接线图如下所示.在模式2(SENSOR HUB mode)下,最多有四个传感器连接到LSM6DSL器件的I

2021-01-31 01:10:20 917

原创 7.5、LSM6DSL嵌入式功能

7.5、LSM6DSL嵌入式功能文章目录7.5、LSM6DSL嵌入式功能7.5.1、计步功能7.5.1.1、例程7.5.2、绝对手腕倾斜7.5.2.1、原理7.5.2.2、实现7.5.3、双击检测功能7.5.3.1、原理7.5.3.2、实现7.5.4、移植7.5.1、准备文件7.5.2、修改文件项目里面主要是用了计步、绝对手腕倾斜等两个嵌入功能,此外还有双击检测功能,下面分别介绍一下这三个功能的使用注意事项.7.5.1、计步功能基本用下图可以简单理解计步功能的原理.首先,当振幅低于最小THS的时

2021-01-31 01:09:03 1406 3

原创 7、LVGL动画

LVGL动画文章目录LVGL动画LVGL动画概述动画数据结构动画APILVGL如何使用动画LVGL动画概述LVGL里面有好多对象都支持动画效果,比如进度条、滑块、按钮等,但是那些都是对象里面自带的API进行设定的,如果我们想让某个对象拥有动画效果,LVGL也是支持的,只是原子的教程里面没有.先简单说一下动画的实现原理.首先,动画由一个双向链表进行管理,该链表除去头尾指针外只记录了动画结构体的大小.其次,动画的实现其实是LVGL的一个系统内置任务实现.最后,动画的概念其实和软件定时器高度相似,但

2021-01-11 20:55:39 11289 3

原创 6、LVGL容器

LVGL容器文章目录LVGL容器LVGL容器介绍LVGL容器的使用普通API布局方式API自适应APILVGL容器介绍这是一个具有特殊功能的基础对象.该对象中可以存放各种各样的子对象,但子对象过多的时候,排列就会很麻烦,所以有一个专门的Layout布局属性约束子对象们的摆放,具体体现在style.body.padding.在上个笔记中也提到了.此外,容器还有一个Auto fit大小自动适应的特性.LVGL容器的使用普通APIlv_obj_t * lv_cont_create(lv_obj_t

2021-01-03 19:54:40 1911 1

原创 5、LVGL标签和样式

LVGL标签和样式文章目录LVGL标签和样式LVGL标签标签API接口LVGL样式LVGL样式数据结构style.bodystyle.textstyle.imagestyle.linestyle.glass样式的使用LVGL标签标签本身是使用的最多的一个空间,主要作用是用来显示文本信息的.支持换行,图标字体,部分文本重绘色,长文本显示等.标签API接口API接口很多,在原子的资料里也写得很清楚,只罗列一些我常用的API.lv_label_set_text_fmt使用方法和printf很接近

2021-01-03 19:53:51 7691 1

原创 4、LVGL图片

lvgl 图片控件文章目录lvgl 图片控件4.1、图片的使用4.1.1、内部C数组4.1.2、外部存储文件的图片4.1.2.1、原始格式文件4.1.2.2、bin文件格式4.1.3、LV_SYMBOL_XXX形式图标字体4.1.3.1、图标字体的使用4.1.3.2、自定义图标字体4.1、图片的使用图片本身也是一个控件,根据传入的图片源来显示你想要的图片.lvgl支持如下三种图片源方式.内部c数组,用lv_img_dsc_t结构体来进行描述外部存储方式,例如SD卡或者U盘上的文件LV_SYMB

2020-12-28 00:03:37 15417 25

原创 3、lvgl字体

LVGL字体文章目录LVGL字体LVGL字体概述如何使用字体创建自己的字体LVGL字体概述V6版本最高支持4bpp的抗锯齿,支持UTF-8和ASCLL编码.通过配置LV_TXT_ENC修改编码.具体区别如下ASCLL:只支持英文显示UTF-8:支持全球所有字符需要注意的是,当使用UTF-8编码时,将你使用的IDE的编码也修改为UTF-8.如何使用字体LVGL内置了7种字体,相关宏如下所示./* https://fonts.google.com/specimen/Roboto */#

2020-12-27 22:54:55 1456

原创 2、LVGL移植

LVGL移植文章目录LVGL移植准备工作下载源码准备工程文件开始移植适配工作准备工作我使用的IDE是MDK.硬件方面是自己画的硬件,主控F411CEUx(Flash:512/RAM:128),屏幕是1.14寸LCD屏幕.分辨率135*240,通信方式SPI.下载源码进入LVGL源码托管链接,下载release/v6版本(最新的已经到了V7).如下所示.其中master是最新程序,修补程序直接在此合并.dev在此合并新功能,稳定后合并到masterrelease/Vx代表了主要版本的稳定

2020-12-27 19:57:45 1950 6

原创 1、LVGL简介

LVGL文章目录LVGLLVGL概述LVGL介绍资源需求LVGL许可证LVGL概述LVGL的资料目前不算太多,主要参考资料如下正点原子教程LVGL官网文档LVGL源码LVGL介绍LVGL全称Light and Versatile Graphics Library,是一个自由的,开源的GUI库,界面精美,资源消耗小,可移植度高,响应式布局等特点,全库采用纯 c 语言开发.主要特性如下.具有非常丰富的内置控件,像 buttons, charts, lists, sliders, ima

2020-12-27 19:56:14 17079 2

原创 7.4、LSM6DSL使用

7.4、 LSM6DSL使用文章目录7.4、 LSM6DSL使用7.4.1、 LSM6DSL C_DRIVER库7.4.1.1、LSM6DSL C_DRIVE移植7.4.2、LSM6DSL MEMS库7.4.2.1、MEMS库使用方法7.4.2.2、MEMS库移植具体的使用个人觉得有三种办法,如下C-Driver-MEMSX-CUBE-MEMS1根据datasheet写驱动7.4.1、 LSM6DSL C_DRIVER库ST针对自己家传感器推出的标准C驱动,在仓库内除去各个传感

2020-12-18 00:36:28 3515 2

原创 7.3、LSM6DSL硬件功能

7.3、LSM6DSL硬件功能文章目录7.3、LSM6DSL硬件功能7.3.1、LSM6DSL工作模式7.3.1.1、掉电模式7.3.1.2、低功耗模式7.3.1.3、正常模式7.3.1.4、高性能模式7.3.1.5、陀螺仪睡眠模式7.3.2、LSM6DSL嵌入式功能7.3.3、LSM6DSL中断7.3.4、LSM6DSL温度传感器7.3.5、LSM6DSL FIFO7.3.5.1、FIFO模式7.3.5.1.1、Bypass mode7.3.5.1.2、FIFO mode7.3.5.1.3、Contin

2020-12-18 00:18:50 2003 1

原创 7.2、LSM6DSL硬件概述

LSM6DSL硬件概述文章目录LSM6DSL硬件概述LSM6DSL简介LSM6DSL特性LSM6DSL引脚描述LSM6DSL地址LSM6DSL电器性能及其余参数参考资料LSM6DSL简介LSM6DSL 是系统级封装的 3D 数字加速度计和 3D 数字陀螺仪,具有数字 I2C/SPI 串口标准输出,在组合高性能工作模式下 6 轴功耗 0.65 mA。由于陀螺仪和加速度计均具有超低噪声性能,始终具有低功耗特性,并结合了高传感精度,因此能够为客户提供最佳运动体验。此外,加速度计具有智能的休眠到唤醒(活动

2020-12-18 00:16:40 3397

原创 7.1、BMP280气压计

7.1、气压计BMP280一般来说,使用一个新的芯片,都会去该芯片品牌的官网找相关资料,然后再去网络看是否有人使用过该芯片。bmp280属于博世旗下的一款芯片,该芯片的官方网址在这。从官网上可以找到对应的datasheet,还有驱动文件,然后两者结合稍微理解一下,然后测试一下基本的数据读写,这个模块就算结束了。总体来说,还是比较简单的。7.1.1、BMP280引脚及其相关参数引脚说明BMP280是一款气压传感器,体积和功耗都很小,接口方面支持IIC和SPI。引脚定义如下。依照上图,可知

2020-12-11 00:31:32 5218 2

原创 6、stroge模块和按键模块

6.1、存储模块存储模块使用的是P25Q32H,封装USON3*2,引脚定义如下所示。该芯片共有64个块,每块16个扇区,每扇区4KB,合计4MB.通信方式采用标准的4线SPI通讯。具体配置如下所示该芯片的驱动程序和W25QXX系列基本一致,移植于之前的W25Q128驱动,主要内容几乎没变化。#ifndef __SPI_FLASH__H#define __SPI_FLASH__H#include "spi.h"typedef enum{ SPI_FLASH_OK = 0,

2020-12-08 00:13:56 692

原创 5、定时器模块

1、定时器模块定时器模块相对而言比较简单,主要分为三部分。第一部分是整个系统的时基systick内核定时器,里面主要放置了LVGL,RTT,HAL库的时间基准函数。第二部分就是屏幕的背光部分,使用的是TIM3_CH2通道。第三部分是RTC时钟及其后备域。第一部分由于比较简单,就不多说了。2、PWM部分下面是TIM3_CH2的初始化。因为我这里使用的系统主频是84Mhz,PWM频率设定是1Khz,所以分频系数为83,计数值为999.正好是1KHZ的PWM。2.1、定时器开始函数整个P

2020-12-06 23:52:52 1221

原创 4、USB调试模块

1、USB硬件初始化底层初始化使用的CUBEMX,库函数版本F4_V1.25.具体配置如下2、USB函数封装USB通信中真正的收发数据都是在USB中断中进行的,所以为了确认USB不会被其他中断打断,将USB的抢占优先级设定为0。先说一下实现的大概思路吧。只是发送(MCU -> PC)的话,用到了一个消息队列,一个线程。1、创建一个消息队列tx_mq,一个发送线程tx_thread2、用户想要发送消息的时候,将消息存入tx_mq中。存入的消息满足一定条件时将消息发送至tx_th

2020-12-06 20:14:44 696

原创 3、基本的软件框架

软件框架本次项目使用RT_Thread,使用的是Nano,因为RTThread里面的组件太多了,好多东西使用不到,所以简单使用一个Nano+控制台就行。1、硬件驱动简单说一下,TIMER对应的是屏幕的背光控制,使用的是TIMER的PWM。USB是作为代替串口的调试工具,如果使用串口转USB,势必要增加一个芯片,板子空间实在有限,就是用了USB作为调试口。后续作为程序升级的下载口。当然如果只是调试也可以使用Jlink内部的资源配合官方工具调试。其余的应该都一目了然了。使用的是cubemx 生

2020-11-29 22:25:45 1096

原创 2、总体规划

简单的想法 想做一个手环,首先先定义一下该手环的功能,然后根据定义的功能去做出来一个或者几个实现方案,然后根据实际情况去选择使用哪一个方案。作为一个手环,最基本的功能要求如下。看时间可充电使用上述两点是最基本的需求了,然后现在市面上大多数手环除去上述功能都还有如下功能。闹钟记录运动数据记录睡眠数据心率检测还有一些特殊功能,比如我很喜欢的小米手环4的NFC功能,屏幕壁纸可由用户自定义等等。我在此只是为了学习LVGL才去做的一个小东西,所以也不想搞那么复杂,大致打算只做以下几个

2020-11-29 20:50:28 283

原创 1、先立个FLAG

emmmm之前看到B站有个UP主DIY了一个手环,还是挺佩服的,正好自己一直也有这个想法,于是就照着这个项目做了一下,做这个项目的目的就是为了熟悉一下RTT和LVGL,在之前的项目使用的都是FREERTOS和大量通信相关的东西,正好趁着最近公司项目不是特别忙,拿这个练练手。早在10月份的时候我就已经打了一版硬件出来了,但是在PCB的布局和原理图设计上有一些小瑕疵,打算先把软件做完再打第二版,但是最近懒神附体,个人思想状态有些许问题,就一直没动过,现在立下来个FLAG,在年前把这个项目彻底结束掉。目

2020-11-22 21:51:45 823 1

转载 2、AD20导入PCB LOGO

参考链接博主讲的已经很详细了,直接用就好了。

2020-11-22 21:29:00 1815

原创 1、AD 常用的快捷键

改变走线模式Shift + Space;选择常见线宽Shift + W;泪滴T+E放置死铜P+R放置埔铜P+G1、调整全局丝印位置A-P2、生成定位孔T-V-B板层切换+/-(小键盘);(Ctrl+shift+鼠标滚轮)鼠标放在冲突区域,显示冲突Shift + V;...

2020-10-12 13:44:21 2699

原创 4.5.2 CUBEMX USB之MSC+FATFS+FLASH(内部)

使用工具型号CUBEMX5.6 STM32F103ZET6开发板(正点原子战舰) LINK及其他线束 STM32Cube_FW_F1 V1.8.01、CUBEMX初始化初始化RCC初始化SYS初始化USART1初始化USB初始化FATFS初始化USB_DEVICE2、添加文件这个是在网上找的一个flash读写文件./* * flash.c * * Created: 2018-01-29 * Author: zhanglifu */

2020-09-18 17:29:02 2908 2

原创 10、STM32HAL_USB_DEVICE库软件流程

USB_DEVICE库里面关于USB所有的处理流程都在中断里面.包括类接口,用户接口全部都是在中断函数里面进行的.在上节中也有提到过,ISTR寄存器,这个寄存器包含了USB所有的中断标志位,一共有8个,USBD库里的中断函数也有对应的8个处理.如图所示,...

2020-09-02 15:45:44 1593

原创 9、STM32HAL_USB_DEVICE库硬件相关

本节内容和用户层代码没有关系,涉及到的编码工作都由ST官方库做完了.1、STM32_USB硬件模块简介在STM32F10X参考手册里面有如下两段话.除了对USB硬件模块有了一个最基本的说明外,其实就是说,USB的ACK包的发送和ACK包的处理,令牌包分组的检测,数据的发送和接收,包括USB里面的CRC校验,全部都由硬件自动做完了.软件层面可以不用关心了.而且针对个别传输量大且需要速度块的应用提供了双缓冲区进行提速.USB模块的寄存器主要分为三大类,在手册里面也说了.2..

2020-09-01 19:11:22 1124 3

原创 8、STM32HAL_USB_DEVICE库数据结构

目录1、重要的状态类型1.1、USBD_StatusTypeDef2.1、 EP0 Statue2、设备内核结构体3、USB驱动结构体4、类方法结构体USBD_ClassTypeDef5、类特有的数据结构6、类的用户方法结构体以CDC类举例,首先看一张图.1、重要的状态类型1.1、USBD_StatusTypeDef几乎所有库函数都会返回类型为 USBD_StatusTypeDef 的状态,应用应该始终检查返回的状态。定义如下.typedef enu

2020-08-30 19:51:34 1613

原创 7、STM32HAL_USB_DEVICE库概述

1、USB库简介环境:CUBEMX 5.6.1STM32Cube MCU Package for STM32F1 Series 1.8.0STM32F1xx HAL Driver version number V1.1.4STM32官方提供了两套USB的库,一套用于HOST,一套用于DEVICE,且提供了一些参考资料,如下.UM1720用户手册(HOST) UM1734用户手册(DEVICE)在这里,我只使用了DEVICE,所以笔记也只有DEVICE库的一些个人理解.2、

2020-08-30 00:22:20 2900 2

原创 6、USB枚举

7.1 USB枚举USB的概念实在是太多了,只挑了一些重要的作为笔记还有这么多概念,实在是心态爆炸.USB枚举,每个USB设备上电都会经历的一段过程,其实就是USB的初始化,只有初始化完成了,其他USB主机才能知道你到底是做啥的,至于怎么去做,做的好不好那就是枚举成功之后的事情了.7.1.1 枚举流程枚举流程在USB2.0协议规范里面的9.1.2小节有提到过,如下所示。When a USB device is attached to or removed from the USB, the ho

2020-08-29 01:01:11 516

原创 5、标准的USB请求

4、USB Device Requests所有的USB设备都会响应来自于主机默认控制管道的请求的,这些请求是使用控制传输发送的,请求和请求的参数在Setup packet包含,每个Setup packet都有8个字节.着重说一下wIndex和wLength,前面两个根据上表可以很容易理解.wIndex当bmRequestType的Recipient字段为接口或端点时,wIndex域用来表明是哪一个接口或端结。图9-2显示了用于指定端点时的wIndex格式。Direction位(bit7

2020-08-28 17:22:40 492

原创 4、USB的几种状态

4、USB状态4.1 USB可见状态连接USB设备可以与USB连接或分离。当USB设备与USB分离时,它的状态不是由本规范定义的。此规范仅在设备被附加后处理所需的操作和属性上电USB设备上电后处于这个状态,分为两种情况,如果来自于外部电源,协议里叫做self-powered,如果来自于HUB,叫做bus-powered.默认状态在设备通电后,它必须不响应任何总线事务,直到它从总线收到重置。在接受复位后,设备然后是可寻址的默认地址。地址所有的USB设备在加电复位

2020-08-28 16:26:43 3370

MSC参考资料.zip

MSC类参考资料,主要包括BBB(又称为BOT)协议文档,massbulk协议文档及MSC类参考手册概述文档.适用于学习U盘等大容量存储设备

2021-08-12

CDC参考资料.zip

CDC类文档参考,包括了CDC的勘误文档,CDC定义文档,CDC通信协议文档.

2021-08-12

pcb_logo_ad_脚本.rar

ALTIUM DESIGNER将图片导入PCB的一个脚本,常用于制作丝印层LOGO。只能导入单像素图片。

2020-11-29

空空如也

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

TA关注的人

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