- 博客(1020)
- 资源 (17)
- 收藏
- 关注

原创 Linux通信IPC随笔
名字: HLS大神 QQ:331908961**功能:Linux内核间任意通信实现**#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>#include <unistd.h>#include <string.h>#include <stdio.h>typedef struct MSG
2021-03-26 11:28:26
752
3
原创 嵌入式硬件中电感的基本原理与实现详解
本文摘要: 本次讨论围绕电感这一电子元件展开,主要包括七个知识点:1.电感是阻碍电流变化的物理量,单位亨利,与电容特性相反;2.自感现象是线圈电流变化时自身产生感应电动势;3.两个相邻线圈通过磁场相互影响形成互感;4.通过公式U=L*di/dt分析电感特性;5.用"飞轮"类比理解电感特性;6.电感分为能量型(mH级)和滤波型(nH/uH级)两种功能;7.实现相同电感量可采用"大磁芯少匝数"或"小磁芯多匝数"两种方案。重点讲解了电感的电压-电流关系、
2025-07-19 18:11:36
53
原创 嵌入式Linux内存管理子系统控制与实现
Linux内存管理子系统采用多层次架构,实现高效内存资源管理。其核心包括用户空间接口层(malloc/mmap等)、系统调用层(sys_brk/sys_mmap等)、虚拟内存管理(进程地址空间、页表)、物理内存管理(伙伴系统、slab分配器)以及内存回收机制(kswapd、LRU算法)。通过硬件抽象层支持MMU、TLB和NUMA架构,实现虚拟地址转换和缓存一致性。该系统通过模块化设计平衡了用户程序灵活性和物理内存使用效率,为理解Linux内存管理提供了宏观框架。
2025-07-16 19:39:36
30
原创 嵌入式中Modbus协议基本原理分析
摘要: Modbus协议自1979年诞生以来,已成为工业自动化领域的基础通信协议,其开放性和简易性使其广泛应用。协议分为RTU、ASCII和TCP三种形式,核心围绕数据存储区(线圈和寄存器)的读写交互,定义了8大功能码实现不同操作。学习Modbus需从应用层和报文层入手,理解其地址模型(如40001的演变)和报文格式(RTU/ASCII/TCP差异),这不仅有助于实际应用,也为掌握其他协议奠定基础。该协议的设计逻辑清晰,通过存储区分类(输入/输出、只读/读写)和功能码细分,高效解决了工业设备间的数据通信需求
2025-07-01 21:19:26
48
原创 嵌入式硬件中电容的基本原理与详解
本文系统讲解了电容器的核心知识要点:1.电容在电路中主要起储能和滤波作用,工作原理分为充电和放电两种状态;2.通过水缸蓄水类比解释电容储能原理;3.详细介绍了X电容(滤除差模干扰)、Y电容(滤除共模干扰)的特殊作用;4.对比分析了钽电容(体积小、温度特性好但价格高)和铝电解电容(价格低、耐压高但寿命短)的特性差异;5.说明了贴片与插件铝电解电容的抗震性区别。全文以问答形式深入浅出地阐述了电容的关键参数、选型要点及实际应用中的注意事项,特别强调了安规电容的特殊要求和使用规范。
2025-06-29 12:26:14
602
原创 嵌入式AI项目综合应用分享
本文介绍了7个提升AI开发效率的开源工具:EdgeOne Pages MCP(HTML部署)、Chrome MCP(浏览器自动化)、Firecrawl MCP(网页抓取)、Context7 MCP(代码准确性)、Sequential Thinking MCP(结构化思考)、Shrimp Task Manager MCP(任务拆解)和Interactive Feedback MCP(交互式确认)。这些工具通过MCP(模块化协作平台)技术,分别解决了内容发布、浏览器控制、网页爬取、代码生成、逻辑推理、任务管理和
2025-06-28 08:54:01
144
原创 嵌入式单片机中SPI串行外设接口控制与详解
SPI接口技术解析 摘要:本文详细介绍了串行外设接口(SPI)的工作原理及配置要点。SPI是一种全双工同步通信接口,采用主从模式,最少需要3-4根线实现数据通信。文章重点阐述了SPI的四种工作模式(由CPOL和CPHA位组合决定),并指出模式0和模式3最为常用。在配置方面,强调主设备参数必须与从设备匹配,包括时钟极性、相位、数据格式等。以W25Q128闪存芯片为例,说明其支持模式0和模式3,容量达16MB。最后指出SPI通信前必须正确设置参数,并介绍了数据收发的基本流程,包括设备ID读取、写入使能、状态读取
2025-06-28 08:27:29
98
原创 嵌入式linux中PWM脉冲宽度调制控制与实现
PWM(脉冲宽度调制)是一种通过调节脉冲宽度来等效模拟信号的技术。它通过改变占空比(高电平时间占周期的百分比)来控制信号或能量,广泛应用于调光电路、电机驱动等领域。本文详细介绍了PWM的基本原理、参数配置(如周期、占空比、极性等),以及在Linux系统中的实现方法。通过sysfs接口和内核驱动编程示例,展示了如何配置PWM参数并控制设备输出。此外,还提供了设备树修改和用户层应用测试代码,为PWM技术开发提供了实用参考。
2025-06-24 17:20:58
167
原创 嵌入式Linux中RTC实时时钟使用方法
嵌入式Linux系统中RTC实时时钟的使用 RTC(Real-Time Clock)为系统提供精确的实时时间,Linux系统以1970年1月1日(Epoch Time)为基准,用秒数差值表示时间。系统包含系统时间(CPU维护)和硬件时间(RTC芯片维护)两种时钟机制,通过date和hwclock命令分别管理。 编程方面,Linux提供了多种时间相关数据结构(如time_t、struct tm)和函数(如time()、localtime()、strftime()等)。示例程序展示了时间显示、日期计算等功能,包
2025-06-24 16:35:34
49
原创 嵌入式Linux应用中GPIO编程开发详解
摘要:本文介绍了IMX6ULL开发板的GPIO编程基础及操作方法。首先讲解GPIO的基本功能(输入/输出)及其应用场景,然后详细说明使用sysfs文件系统控制GPIO的编程接口,包括export/unexport接口、方向设置(direction)和电平控制(value)。针对IMX6ULL开发板,提供了LED(GPIO5_3)和按键(GPIO5_1、GPIO4_14)的GPIO编号计算方法,并给出完整的编程示例代码。实验部分包括LED输出控制、按键输入检测以及两者的综合应用,通过操作/sys/class/
2025-06-22 15:03:08
168
原创 嵌入式linux系统中声卡ALSA音频控制方法
本文介绍了嵌入式Linux音频系统的核心概念。主要内容包括:音频数字化的采样与量化原理,采样频率的奈奎斯特理论(至少两倍于信号最高频率),量化位数对音质的影响(位数越高动态范围越大),以及ALSA(Advanced Linux Sound Architecture)音频架构的组成(包含驱动包、开发包等7个子项目)。文章指出ALSA相比OSS具有更友好的编程接口,并兼容OSS,是Linux音频系统的标准解决方案。
2025-06-22 10:00:36
414
原创 嵌入式Linux中V4L2库的应用与操作实现方法
摘要:V4L2(Video for Linux two)是Linux系统下的视频采集通用API接口,支持mmap内存映射、read直接读取和用户指针三种数据采集方式。本文重点介绍内存映射方式,其工作流程为:1)打开设备文件(/dev/videoX);2)查询设备属性并设置图像格式;3)申请帧缓冲区并映射到用户空间;4)启动采集循环处理数据。通过VIDIOC_REQBUFS等ioctl命令与驱动交互,使用双缓冲队列机制实现连续采集。采集完成后需释放资源,包括取消内存映射和关闭设备。文中详细解析了各步骤的核心数
2025-06-18 11:36:36
219
原创 嵌入式linux系统中网络编程控制与实现方法
网络编程概述:从协议到实现 本文系统介绍了网络编程的核心概念和技术实现。首先阐述了客户/服务器模型在网络通信中的基础地位,并详细解析了五层因特网协议栈(应用层、传输层、网络层、链路层、物理层)的分层架构。重点对比了TCP和UDP协议的特性差异:TCP提供可靠连接服务,适合需要数据完整性的场景;UDP的无连接特性则适用于实时性要求高、能容忍少量丢包的应用。 文章详细讲解了9个关键网络编程函数(socket、bind、listen等)的使用方法,并通过具体代码示例展示了TCP和UDP通信的实现流程。TCP通信需
2025-06-18 10:27:48
709
原创 嵌入式linux应用中多线程编程控制与实现
本文介绍了Linux多线程编程的核心概念与实现方法。前半部分讲解了线程的基本操作:线程创建(pthread_create)、线程标识(pthread_t)、参数传递、线程退出(pthread_exit)和资源回收(pthread_join)。重点阐述了多线程的优势,如提高并行处理效率(文件拷贝进度显示)、实现阻塞与非阻塞并行操作(网络通信)。 后半部分深入探讨了线程控制技术:通过互斥锁(pthread_mutex)解决临界资源访问冲突问题,使用信号量(semaphore)控制线程执行顺序。文章包含多个代码示
2025-06-17 16:44:15
164
原创 嵌入式Linux系统中进程间通信的方法
本文摘要主要介绍了Linux进程间通信的几种方式,包括管道通信、IPC通信、信号通信和socket通信。首先,文章解释了进程与程序的区别,进程是动态执行的过程,程序是静态指令的集合。然后详细讨论了管道通信的无名管道和有名管道,并通过代码示例展示了父子进程间的通信实现。接着介绍了IPC通信的三种方式:共享内存、消息队列和信号量灯,其中共享内存速度快但需同步互斥机制,消息队列克服了管道的格式限制。 信号通信部分解释了信号机制及其常见类型,如SIGINT、SIGQUIT等,并展示了信号发送和捕捉的代码示例。最后,
2025-06-17 16:09:39
39
原创 嵌入式linux系统中输入子系统详解
摘要:本文介绍了Linux输入系统的工作原理和应用编程实现。输入系统由三层架构组成(驱动层、核心层、事件层),统一管理键盘、鼠标等输入设备。文章详细解析了input_event结构体,包含时间戳、事件类型和值等关键字段。通过三个实战案例演示了如何读取输入事件:1)USB鼠标事件(相对坐标);2)键盘事件(按键状态);3)触摸屏事件(绝对坐标)。编程步骤均为:打开设备节点、读取事件数据、解析处理事件值,体现了Linux"一切皆文件"的设计思想。每个案例都提供了完整的C语言代码实现,展示了从
2025-06-16 20:55:30
48
原创 嵌入式linux中图像处理的基本方法
本文主要介绍了三种常见图像格式(BMP、JPEG、PNG)的处理方法及图像调整算法。首先解析了BMP文件的二进制结构,包括文件头、信息头和数据存储方式,并提供了将BMP转换为RGB格式的代码实现。其次介绍了JPEG文件的libjpeg库使用方法,详细说明了接口函数调用流程。对于PNG格式,阐述了libpng库的编译和使用步骤。在图像调整方面,详细讲解了图像缩放和旋转的算法原理:缩放采用比例映射方法保持像素相对位置;旋转通过坐标转换实现,涉及三角函数计算和图像尺寸调整。最后给出了具体的C语言实现代码,包括内存
2025-06-16 19:48:46
231
原创 嵌入式PADS中生产资料导出操作与实现
本文介绍了PCB设计完成后进行打样的全过程。首先详细说明了在PADS软件中生成Gerber文件的步骤,包括层设置、文档命名和参数调整等。接着描述了将Gerber文件上传至嘉立创打样的过程,包括参数设置和注意事项。最后展示了收到的PCB样板,虽然有小瑕疵但整体符合设计。作者建议PCB设计学习遵循"二八法则",先掌握80%的常用操作满足工作需求,再逐步学习高难技巧。全文提供了从设计到实物制作的完整流程指南。
2025-06-14 15:39:21
87
原创 嵌入式PADS中敷铜与过孔阵列操作与实现
本文介绍了PCB设计的收尾工作,包括覆铜操作、过孔阵列添加和丝印处理。在覆铜环节,详细说明了"灌铜(flood)"和"填充(hatch)"的区别及适用场景,强调灌铜用于初始覆铜或重大改动后覆铜,而填充用于快速恢复显示覆铜。在过孔阵列部分,讲解了参数设置和添加方法,指出要注意选择模式和边框选择技巧。最后说明了丝印添加方法,包括镜像处理等细节。文章强调这些操作都是PCB设计必须掌握的重要内容,建议完成设计后进行DRC检查。全文以实操为导向,突出关键步骤和注意事项。
2025-06-14 15:30:18
438
原创 嵌入式PADS中Route布线操作与实现
摘要:本文介绍了PCB设计中的Route布线流程。首先从Layout布局转换到Route界面,强调需提前确认线宽、过孔等设计规则。文中详细说明了交互式布线操作步骤,包括点击焊盘连线、右键添加过孔等基本功能,并分享了GD栅格调整、Ctrl+E移动等实用布线技巧。作者指出布线不是机械操作,需理解设计原理,同时提醒后续还需完成覆铜、过孔和丝印处理。全文以简单PCB项目为例,循序渐进地展示了从规则设置到实际布线的完整过程。
2025-06-14 12:01:27
178
原创 嵌入式PADS中layout布局控制与实现
本文介绍了PCB Layout布局的基本流程。首先通过PadsLayout将原理图同步到PCB文件,然后手动绘制简单长方形板框。在元件布局阶段,详细说明了移动器件、调整栅格(使用GD/G命令)、更改单位(UMM命令)、旋转器件、分散元件、测量距离(Q命令)等基本操作技巧,并强调布局规则和习惯因人而异。文章指出合理使用对齐、定位和测距等技巧对提高布局美观性和可靠性至关重要。整个流程从原理图同步到最终布局保存,为PCB设计初学者提供了基础指导。
2025-06-14 11:49:46
68
原创 嵌入式PADS中元件封装绘制与实现
摘要:本文介绍了使用PADS Layout设计WSON8封装FLASH芯片的步骤。主要内容包括:1)新建PCB图纸和封装;2)根据手册参数设置表面贴装焊盘尺寸(1mm×0.6mm);3)使用分步和重复功能批量放置8个焊盘;4)绘制丝印标识(尺寸2.54,线宽0.254);5)将封装与原理图符号关联。文章指出实际工作中通常调用现有封装库,仅需为特殊器件自定义设计,建议关键器件手工绘制,其余使用库元件以提高效率。(149字)
2025-06-13 21:25:20
265
原创 嵌入式PADS原理图与元件符号绘制实现
本文记录了使用PADS Logic软件绘制NOR FLASH芯片转接板原理图的学习过程。主要内容包括:1)新建元件库并创建芯片元件符号;2)使用2D线绘制元件外形和引脚端点;3)设置元件电参数及保存元件;4)在原理图中添加元件并完成连线。文章详细介绍了栅格调整、端点放置、连线操作等基本功能的使用方法,最后完成了包含FLASH芯片、排针和滤波电容的简单原理图设计。通过这个小项目,作者初步掌握了PADS Logic绘制原理图的基本操作流程。
2025-06-13 21:08:42
161
原创 解决GLIBC_2.29版本缺失问题
文章摘要:当程序运行时出现"version `GLIBC_2.29' not found"错误,表明系统缺少GLIBC 2.29库。解决方法包括:1)从GNU官网下载源代码;2)编译安装到指定目录(如/opt/glibc-2.29);3)更新库文件路径;4)建立软链接。该过程需要执行配置、编译、安装和更新系统库路径等步骤,确保系统优先使用新安装的GLIBC版本。注意操作可能耗时,且需根据系统架构(如aarch64)调整具体路径。
2025-06-08 11:18:47
213
1
原创 嵌入式鸿蒙开发环境搭建操作方法与实现
本文提供了Linux环境搭建的镜像下载链接(百度网盘),详细介绍了VSCode与Linux系统的连接过程,包括DevEcoDeviceTool安装配置指南。内容涵盖虚拟机成功登录展示、源码目录编译指令操作,以及鸿蒙源码工程的配置和烧录说明,特别标注了源代码与用户自定义代码的存放位置,为开发者提供了完整的开发环境配置参考。
2025-06-02 15:16:30
235
1
原创 嵌入式Openharmony系统中Select函数实现方法
本文介绍了使用HarmonyOS ArkUI框架中的Select组件实现课程时间表下拉选择功能。通过代码示例展示了如何创建包含语文、数学、英语课程的Schedule数组,并配置Select组件的重要属性:设置默认选中项(selected)、显示文本(value)、字体样式(font/fontColor)以及选中项样式(selectedOptionBgColor/selectedOptionFont)。同时列举了Select组件的常用接口参数和属性,包括选项列表设置、初始选中索引、文本展示样式等。该组件支持双
2025-05-30 15:52:32
56
原创 嵌入式openharmony系统中文件TEXT操作与实现
摘要:鸿蒙系统Text组件是用于显示文本的UI控件,支持包含Span等子组件。其核心功能包括:1)通过textAlign控制水平对齐;2)用textOverflow和maxLines处理文本溢出;3)支持行高(lineHeight)、装饰线(decoration)、字符间距(letterSpacing)等样式设置;4)可自适应字号(minFontSize/maxFontSize)。当设置textOverflow为Ellipsis并限制maxLines时,超长文本会显示省略号。该组件从API version
2025-05-29 20:16:31
182
原创 嵌入式鸿蒙系统中水平和垂直以及图片调用方法
摘要:本文介绍了OpenHarmony中三个常用组件的使用方法:1) Column垂直布局容器,通过space参数设置间距,支持alignItems和justifyContent属性控制对齐方式;2) Row水平布局容器,与Column类似但方向不同;3) Image图片组件,支持多种格式和加载方式,包含自动缩放和重复绘制功能,并提供了三个组件的代码示例。这些组件从API version 9开始支持ArkTS卡片使用,是OpenHarmony应用开发的基础UI元素。
2025-05-29 16:53:40
245
原创 嵌入式openharmony系统的按钮的详细实现
本文介绍了OpenHarmony鸿蒙系统中按钮组件的使用方法。按钮组件(Button)支持多种样式(胶囊型、圆形、普通),可通过ButtonOptions配置显示样式、按压效果等属性。从API version 9开始在ArkTS卡片中支持使用,并提供文本内容(label)和子组件两种创建方式。文章详细说明了按钮类型(ButtonType)、样式模式(ButtonStyleMode)、尺寸(ControlSize)等枚举值,并通过示例代码演示了不同样式按钮的实现方法,包括普通按钮、禁用状态按钮以及带加载动画的
2025-05-27 21:31:33
59
原创 嵌入式Openharmony系统应用开发与实现方法
本文介绍了OpenHarmony鸿蒙系统的开发实践,包括三个主要内容:1)基础APP开发示例,演示如何创建项目、添加Button组件并预览页面;2)Stage模型特性,说明其作为主推模型在多设备支持、内存优化等方面的优势;3)自定义组件与页面生命周期,通过代码示例展示组件复用和页面事件处理机制。文章为开发者提供了从基础到进阶的鸿蒙应用开发指导,重点突出了Stage模型在分布式应用开发中的适用性。
2025-05-24 23:02:28
375
原创 嵌入式openharmony真机链接与调试方法
鸿蒙系统真机运行与调试指南:1. 连接开发板与PC后,在DevEco Studio中完成自动签名(Project Structure>SigningConfigs勾选选项);2. 通过两种方式运行HAP应用:直接使用DevEco Studio或hdc工具安装/更新;3. 调试时设置代码断点(Ctrl+F8),选择设备后启动Debug模式,可查看变量状态。操作涉及插件安装、命令行工具使用及IDE调试功能。
2025-05-24 11:37:07
83
原创 嵌入式鸿蒙openharmony应用开发环境搭建与工程创建实现
本文介绍了鸿蒙应用开发的基础知识,包括ArkTS语言特性、开发环境搭建和项目创建流程。重点讲解了在DevEco Studio中创建新工程的详细步骤,从模板选择到工程配置,并说明了预览器的使用方法。同时概述了Stage模型下的工程目录结构及各文件功能,为开发者提供了鸿蒙应用开发的入门指导。
2025-05-23 22:14:18
344
原创 嵌入式单片机中STM32F1演示寄存器控制方法
本文以STM32F103C8T6为例,详细介绍了如何通过操作寄存器来点亮和关闭LED灯。首先,通过查看原理图确定LED2连接的是PC13口,并选择GPIO的输出模式。接着,创建工程并编写代码,配置相关寄存器以实现LED的控制。在调试过程中,发现LED未点亮的原因是未启用APB2总线时钟,通过修改代码启用时钟后问题解决。最后,通过宏定义优化代码,使程序更易读。整个过程涵盖了从硬件连接到软件调试的完整步骤,为初学者提供了实用的操作指南。
2025-05-16 22:00:21
409
1
原创 嵌入式DAYU200开发板简介与烧录方法实现
润和HH-SCDAYU200开发板基于Rockchip RK3568芯片,集成双核心GPU和高效NPU,搭载四核64位Cortex-A55处理器,主频高达2.0GHz,采用22nm工艺。该开发板支持蓝牙、Wi-Fi、音频、视频和摄像头等功能,具备丰富的扩展接口和双千兆以太网口,适用于NVR、工业网关等多网口产品需求。核心板采用6层布线工艺,尺寸为82mm×60mm,支持多屏异显和OpenHarmony、Linux系统,适用于智能NVR、云终端、物联网网关等场景。开发板烧写方法包括安装USB驱动、打开烧写工具
2025-05-15 16:54:49
369
原创 嵌入式C语言中二级指针主要用途及其在函数参数传递应用
本文探讨了嵌入式开发中二级指针的重要性及其应用场景。二级指针(Pointer to Pointer)主要用于修改指针变量的值、传递指针数组、处理动态二维数组以及操作链表和树等数据结构。文章还分析了传值调用与传址调用的区别,指出传址调用通过传递指针地址,可直接修改原始变量,而传值调用仅操作副本。通过示例代码,展示了如何利用二级指针在函数中修改指针的指向和值。最终,文章总结了二级指针在嵌入式开发中的关键作用,强调其对于高效内存管理和复杂数据操作的重要性。
2025-05-15 09:33:58
205
原创 嵌入式C语言中如何使用成员访问运算符来操作结构体成员?
在嵌入式开发中,结构体是一种常用的数据类型,用于组织不同类型的数据。C语言提供了两种成员访问运算符:点运算符(.)和箭头运算符(->)。点运算符用于访问结构体变量的成员,而箭头运算符用于访问结构体指针指向的成员。结构体指针在函数传参中非常重要,能够避免内存拷贝,直接操作原结构体,提高效率。此外,结构体成员可以通过自增运算符++进行自增操作,支持前缀和后缀自增,灵活应对不同需求。通过合理运用这些操作,可以提升嵌入式开发中数据处理的效率和清晰度。
2025-05-15 09:18:22
293
原创 嵌入式C语言中指针的不同类型及其特点分析
C语言中的指针类型主要包括基本类型指针、函数指针、对象指针和空指针(void *)。基本类型指针指向基础数据类型,如整型、字符型等;函数指针用于存储函数地址,支持动态调用;对象指针指向结构体或联合体等复杂数据类型;空指针则是一种通用指针,需强制转换后才能使用。此外,“右左法则”是解析复杂指针声明的有效方法,通过从右向左逐步解析,可以清晰理解指针的组成。掌握这些指针类型和解析技巧,有助于避免指针错误和内存泄漏,提升代码质量。
2025-05-14 21:18:34
208
原创 嵌入式中深入理解C语言中的指针:类型、区别及应用
指针在C语言中是一个强大且灵活的工具,广泛应用于内存管理、动态数据结构的实现以及函数参数的传递等方面。本文深入分析了指针的类型与分类,包括整型、字符型、浮点型、结构体指针等,并探讨了指针与普通变量在存储方式、访问方式和使用灵活性上的区别。此外,文章还详细介绍了指针在动态内存管理、链表、树结构以及函数指针中的应用,强调了指针在提高程序效率和灵活性方面的重要性。通过深入理解指针的使用,开发者可以更好地进行嵌入式开发,编写出高效且优雅的代码。
2025-05-14 21:07:19
106
原创 嵌入式开发中的C语言常量存储与优化
本文探讨了嵌入式系统开发中常量存储与管理的重要性,详细介绍了常量的不同类型、const修饰变量的存储位置以及常量折叠和常量表达式编译优化技术。常量包括基本类型、字符串、枚举和宏定义常量,其存储位置根据作用域和生命周期可能位于常量数据段、栈或堆中。常量折叠和常量表达式编译优化通过减少运行时计算量,提升程序效率。掌握这些知识有助于开发者在资源受限的嵌入式环境中编写高效、稳定的代码。
2025-05-13 10:37:11
150
2
电机+嵌入式详细解说+各个电机分析与说明,包括常见的直流电机、异步电机、同步电机等
2024-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人