自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(193)
  • 收藏
  • 关注

原创 RT-Thread Studio配置实现温湿度上传云平台

然后我们还看到有发布和订阅的主题,我们还是用阿里云物联网平台的产品支持的topic:根据自己的需求以及topic的权限,可以自定义topic,也可以直接使用系统支持的,我们这里就选择订阅。

2025-06-13 00:30:00 609

原创 RT-Thread Studio 配置使用详细教程

它说现在仅支持I2C,但是我们想要的是SPI接口的,不满足,所以就不添加软件包到工程,但是这个软件包依然有参考意义,看一下别人是如何实现RTT下的SSD1306驱动的,可以尝试移植,这时候我们就可以点击边上的“github”把源码clone下来参考。将我们需要的代码添加到rtt studio工程之后,为了能够编译通过,我们需要将cubemx settings生成的文件夹cubemx中的一些文件或者全部文件排除构建,比如main.c,一个工程不可能存在两个同名的.c源文件,还有新生的。

2025-06-13 00:15:00 1999

原创 RT_Thread——互斥量

脱离互斥量,就是。

2025-06-12 00:30:00 875

原创 RT_Thread——事件集

脱离事件集,就是。

2025-06-12 00:30:00 787

原创 RT_Thread——信号

信号的发送者、接收者都是线程:线程发信号给线程,尚不支持中断发信号给线程。线程中可以安装好几个信号,根据需求选择使能部分信号,则这部分信号才能传达给该线程。分别创建一个接收信号函数和一个发送信号函数,在虚拟机上执行观察接收执行情况。当需要某线程进行异常处理时,如果该线程安装了某信号,则使用。如果线程需要处理某一个信号,就需要现在线程中安装该信号。如果屏蔽该信号,就该信号不会传达给安装该信号的线程。可见接收成功后打印获得信号字符,并显示获得几次信号。使用信号时,需要先安装、屏蔽/使能、发送和等待。

2025-06-11 00:30:00 830

原创 RT_Thread——信号量

信号量就像队列、邮箱一样,是用来在这种情况下我们只需要维护一个数值,使用信号量效率更高、更节省内存。

2025-06-11 00:30:00 1541

原创 RT_Thread——邮箱

使用消息队列可以传递各类大小的消息,它使用 memcpy 的方式写入消息、读出消息。如果我们只是传递很小的数据,比如一些数值,可以使用邮箱:它的效率更高。

2025-06-10 15:37:02 693

原创 RT_Thread——消息队列

消息队列可以用于"线程到线程"、“线程到中断”、"中断到线程"直接传输信息。

2025-06-10 15:36:49 826

原创 RT_Thread——线程管理(下)

在 RT-Thread_03_delete_task 的实验里,我们提到空闲线程(Idle 线程)的作用:释放被删除的线程的内存。除了上述目的之外,为什么必须要有空闲线程?一个良好的程序,它的线程都是事件驱动的:平时大部分时间处于挂起状态。有可能我们自己创建的所有线程都无法执行,但是调度器必须能找到一个可以运行的线程:所以,要提供空闲线程。空闲线程优先级最低:它不能阻碍用户线程运行空闲线程要么处于就绪态,要么处于运行态,永远不会挂起空闲线程的优先级为最低,这意味着一旦某个用户的线程变为就绪态,那么。

2025-06-09 22:07:32 746

原创 RT_Thread——线程管理(上)

在 RT-Thread_04_task_priority 实验中,如果把线程 3 中的 rt_thread_delay 调用注释掉,那么线程 1、线程 2 根本没有执行的机会。但不同于裸机系统,RTOS 存在多个线程,每个线程是独立互不干扰的,因此需要为每个线程都分配独立的栈空间,这就是线程栈。它存放线程的一些信息,例如优先级、线程名称、线程状态等,也包含线程与线程之间连接用的链表结构,线程等待事件集合等。rt_thread 描述了一个线程执行的运行环境,也描述了这个线程所处的优先等级。

2025-06-09 22:07:19 1104

原创 RT_Thread——内存管理

内存的动态管理是 C 程序的知识范畴,并不属于 RT-Thread 的知识范畴,但是它跟 RT-Thread 关系是如此紧密,所以我们先了解它。使用内存的动态管理功能,简化了程序设计:不再需要小心翼翼地提前规划各类对象,简化API 函数的涉及,甚至可以减少内存的使用。当系统内存比较大,我们可以提前分配好若干大小的内存块,直接供给线程使用,可以一定程度的提高效率,但会浪费一些内存。小内存管理算法需要频繁的分配、释放内存,可能会影响系统效率。在嵌入式系统中,除了芯片内部的内存,可能还会外扩内存。

2025-05-21 23:32:01 885

原创 RT_Thread——快速入门

以RT-Thread 源码(V3.1.5)为例,它的目录如下:主要涉及3个目录:以理解、使用RT-Thread 为目标的话,最核心的文件只有5个:这些文件的作用列表如下:移植RT-Thread,包含CPU 部分移植和BSP 部分移植。CPU 部分移植就是移植libcpu 目录,主要涉及 和。比如: 和 ,这表示 Cortex-M3 架构在 RVDS 或Keil 工具上的移植文件如果RT-Thread 还没支持你使用的CPU,你才需要实现这两个文件。一般来说,对于大部分的CPU, RT-Thread都已经支持

2025-05-21 18:58:08 1397

原创 基于STM32的智能储物柜(手机APP / 蓝牙APP)

这里有两个版本,一个是触摸屏,另一个是0.96寸oled➕矩阵按键,他们除了这里有所区别,其他地方都是完全一模一样的,我们就以0.96寸oled➕矩阵按键版本的进行讲解。0.96寸oled➕矩阵按键实现触摸屏实现:基于STM32的智能物流柜二、硬件实现下载资源包,可以获得存放main函数以及系统文件和中断文件。存放硬件驱动文件。SYSTEM:存放系统初始化文件。CORE:存放内核驱动文件以及STM32启动文件。FWLIB:标准库移植文件。

2025-04-15 16:37:50 1326

原创 基于STM32的智能农业大棚(阿里云平台)

需要实物的可以私信博主或者在文章最下方添加好友。目录一、项目介绍和演示视频二、硬件需求准备三、硬件框图四、CubeMX配置1. 按键、蜂鸣器GPIO口配置2. ADC输入配置3. IIC——驱动OLED4. DHT11温湿度读取5. PWM配置——光照灯、水泵、风扇6. 串口——esp8266模块7. 定时器配置——按键消抖所需五、代码框架1. 菜单实现思路2. OLED驱动3. 按键消抖4. DHT11温湿度驱动5. 光照强度、土壤湿度ADC转换6. esp8266连接阿里云。

2025-04-15 16:34:39 1041

原创 基于STM32的火灾报警系统(手机APP / 蓝牙APP)

需要实物的可以私信博主或者在文章最下方添加好友。目录前言一、项目介绍和演示视频二、硬件实现1. 硬件资料2. 原理图和PCB三、软件实现1. 源码框架1.1 定义各种宏1.2 模块上电等待稳定1.3 模块初始化1.4 网络配置1.5 显示主界面1.6 进入循环1.7 处理信息1.8 网络参数更新2. 源码示例该项目实现内容如下:系统以STM32微控制器为核心,通过集成多种火灾探测传感器、通信模块和报警装置,构建了一个完整的火灾报警系统。

2025-04-15 16:25:03 745

原创 基于STM32的智能家居系统(单片机毕设)

需要实物的可以私信博主或者在文章最下方添加好友。目录目录前言一、项目介绍和演示视频二、硬件实现1. 材料材料2. 原理图和PCB三、软件实现1. 代码解析1.1 main函数1.4 初始化函数2. 机智云平台搭建以及代码移植2.1 APP制作2.2 给ESP8266模块烧录固件2.3 代码移植2.4 总结3. SNR8016VR_DEV智能语音模块3.1 智能公元平台3.2 创建产品3.3 配置语音模块3.4 生成SDK固件烧录。

2025-04-15 16:12:42 1064

原创 基于STM32的火灾报警系统(阿里云平台 / 机智云平台)

​需要实物的可以私信博主或者在文章最下方添加好友。项目实物图:​​项目演示视频:基于STM32的火灾报警系统(阿里云平台)

2025-04-15 16:09:52 1125

原创 基于STM32的环境监测预警系统(单片机毕设)

需要实物的可以私信博主或者在文章最下方添加好友。基于STM32的家庭/室外环境监测系统(单片机毕设)主控为stm32f103c8t6。使用DHT11温湿度传感器和MQ-2烟雾传感器,读取并实时刷新在0.96寸OLED屏幕上,同时通过蓝牙模块HC-05使用串口通信将数据上传到上位机(自制蓝牙APP)。可手动控制蜂鸣器以及电机作为报警器和风扇;在自动预警模式下,监测到温度高出设定的阈值后打开风扇降温;当监测到烟雾浓度高出设定阈值后将关闭风扇防止火情蔓延,并开启蜂鸣器报警,上位机同步更新报警状态。

2025-04-15 16:05:21 1083

原创 单片机中的socket封装

在“at_socket_demo\rt-thread\components\net\at\at_socket\at_socket.h”中,有如下定义:这就是socket编程的常用接口。char *name;/* WIFI模块的名字 *//* 发送AT命令前需要先获得这个锁 *//* 发送AT命令后等待这个信号量(等待AT命令的回应) *//* 存放AT命令的回应数据 *//* AT命令回应数据的长度 *//* AT命令回应的数据有多少行 *//* AT命令的回应是OK还是ERR */

2025-03-06 15:45:01 733 1

原创 W800 模块AT命令体验

这使得:上图里“4.2”发送了“1234567890”十个字符,但是“5”那里只显示“123456789”九个字符。这使得:上图里“4.2”发送了“1234567890”十个字符,但是“5”那里只显示“123456789”九个字符。这使得:上图里“4.2”发送了“1234567890”十个字符,但是“5”那里只显示“123456789”九个字符。缺点就是勾选“发送新行”时发送的是2个字符:回车、换行,无法只发送回车符。缺点就是勾选“发送新行”时发送的是2个字符:回车、换行,无法只发送回车符。

2025-03-06 01:08:37 845

原创 基于STM32+FreeRTOS的四轴机械臂

该项目是基于FreeRTOS实时操作系统,主控为 STM32F103C8T6 开发板 ,机械臂为四轴分别被四个舵机控制。本项目实现了 3 种控制方法,分别为摇杆控制、示教器控制和串口蓝牙控制,采用8路ADC采集按键摇杆传感器和旋钮电位器的模拟量并由DMA搬运数据,可自制手机蓝牙APP或者直接使用官方手机蓝牙助手作为上位机,USART串口蓝牙实时收发信息,IIC驱动OLED屏幕实时显示机械臂移动张爪夹爪信息,人为控制抓取目标物。

2025-03-04 00:03:40 1321

原创 网络通信概述

所有的数据传输,都有三个要素:源、目的、长度。怎么表示源或者目的呢?请看下图:所以,在网络传输中需要使用“IP和端口”来表示源或目的。此函数用于创建一个套接字。domain是网络程序所在的主机采用的通讯协族(AF_UNIX 和AF_INET 等)。AF_UNIX只能够用于单一的Unix 系统进程间通信,而AF_INET 是针对Internet 的,因而可以允许远程通信使用。type是网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等)。

2025-03-04 00:03:17 661

原创 Ubuntu入门操作

Shell的意思是“外壳”,在Linux中它是一个程序,比如/bin/sh、/bin/bash等。它负责接收用户的输入,根据用户的输入找到其他程序并运行。比如我们输入“ls”并回车时,shell程序找到“ls”程序并运行,把结果打印出来。Shell有很多种实现,我们常用bash。

2025-02-08 12:56:12 2323 1

原创 异常与中断(下)

② 清除EXTI中断,如果不清除中断,当按下按键后松手会一直触发中断,而清除中断需要从根源开始,GPIO中没有相关寄存器,所以从EXTI开始清除。在这里主要做两件事:① 使能NVIC,让中断能够发送给CPU,而发送过来的中断为EXTI0,EXTI0对应异常向量表的第六项,将其设置为1即可;多个中断源汇聚到NVIC,NVIC的职责就是从多个中断源中取出优先级最高的中断,向CPU发出中断信号。多个中断源汇聚到NVIC,NVIC的职责就是从多个中断源中取出优先级最高的中断,向CPU发出中断信号。

2025-01-01 20:45:12 787 1

原创 异常与中断(中)

要想深入理解异常处理,需要写程序来验证。本节课程故意执行一条未定义的指令,让它触发异常。ARM Cortex-M3与Cortex-M4权威指南.pdfPM0056.pdf复制“E:\ARM\doc_and_source_for_mcu_mpu\STM32MF103\daima\relocate\01_uart_question”修改为“01_undefined”。

2025-01-01 20:44:55 899

原创 异常与中断(上)

编译程序时,我们会先设置好异常向量表,程序开始运行,当运行到CMP指令时发生中断,CPU终止BLEQ指令的运行,会先去处理中断(irq):CPU会切换进入irq模式(若发生异常则进入各类异常对应的模式),接着CPU去异常向量表中得到一条指令并去执行该指令(注意与M3/M4的区别:这里是指令,而M3/M4是函数地址),该指令会一条跳转指令,会跳转去执行某个函数,在函数中首先会保存现场,接着分辨中断源并去处理中断,最后是恢复现场。如果C函数要用到这些寄存器,就要把它们保存到栈里,在函数结束前在从栈中恢复它们。

2025-01-01 20:44:32 1053

原创 代码重定位详解

由图可见,g_char2指向ROM,且表现为只读,所以能被成功打印,而g_char1指向内存RAM,该区域是可读可写的,而我们对于内存未进行赋值,所以当访问到g_char1指向的地址时,就会打印乱码(该内存中的任意值)。为了研究该问题,我们写了一个string.c和string.h,里面是打印函数,我们将该文件包含进该工程中,查看g_char1和g_char2的地址。可以看见,我们在定义了g_char1和g_char2(定义为常量)后,分别打印时g_char1显示的是乱码,而g_char2显示正常。

2025-01-01 20:43:08 1022

原创 Makefile简明学习教程

比如:

2025-01-01 20:42:52 1771

原创 Keil中的gcc

C/C++源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些东西输出到一个“.i”文件中等待进一步处理。链接就是将上步生成的OBJ文件和系统库的OBJ文件、库文件链接起来,最终生成了可以在特定平台运行的可执行文件。编译就是把C/C++代码(比如上述的“.i”文件)“翻译”成汇编代码。

2025-01-01 20:42:28 1648

原创 必备汇编编程知识

C为了方便人类方便使用,发明的高级语言,要转换为汇编。汇编为了解放人类的记忆,发明的“助记符”,不用去记各类机器码。最终要转换为机器码。机器码给CPU使用UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。打印调试信息;外接各种模块:GPS、蓝牙;串口因为结构简单、稳定可靠,广受欢迎。通过三根线即可,发送、接收、地线。TxD线把PC机要发送的信息发送给ARM开发板。最下面的地线统一参考地。

2025-01-01 20:42:16 698

原创 ARM架构

一开始,ARM公司发布两类指令集:① ARM指令集,这是32位的,每条指令占据32位,高效,但是太占空间② Thumb指令集,这是16位的,每条指令占据16位,节省空间要节省空间时用Thumb指令,要效率时用ARM指令。一个CPU既可以运行Thumb指令,也能运行ARM指令。怎么区分当前指令是Thumb还是ARM指令呢?程序状态寄存器中有一位,名为“T”,它等于1时表示当前运行的是Thumb指令。假设函数A是使用Thumb指令写的,函数B是使用ARM指令写的,怎么调用A/B?

2025-01-01 20:42:02 1084

原创 全场景——(十一)综合实现

文章目录一、产品框架1.1 硬件框架1.2 设计思路1.2.1 上位机如何定位到传感器1.2.2 上位机如何读写传感器1.2.3 中控如何读写传感器1.2.4 上位机如何发送映射关系、传输固件1.2.5 上位机界面1.3 软件框架二、改造libmodbus 实现文件传输2.1 分析Write File Record 功能2.2 实现Write File Record2.3 UART 驱动严重Bug2.4 实现文件传输三、读写任意传感器3.1 上机演示3.1.1 接线3.1.2 烧写程序3.1.3 使用3.2

2025-01-01 20:41:41 709

原创 全场景——(八)低成本 Modbus 传感器的实现

Modbus 传感器开发套件共有三个, 三个板子的使用的主控方案是 STM32F030芯片,硬件接口资源如下图所示:开关量模块温湿度变送器模块环境检测模块。

2024-12-02 23:00:00 1513

原创 全场景——(九)访问多个传感器及程序改进

现象:H5开发板的屏幕上显示三个传感器的按键和光敏、可调电阻阻值以及温湿度,同时打开modbus poll软件,连接H5后能控制相应传感器的对应寄存器,比如将开关量传感器的LED对应的寄存器写入1并设为on,则LED亮,并且三个传感器的数值会显示在modbus poll软件上。接上电源后三个传感器的LED1会闪烁,同时H5开发板的LCD上打印了三个传感器的相关数据:开关量传感器的按键状态、环境传感器的可调电阻以及光明电阻的值、温湿度传感器的温度以及湿度的值。上位机怎么去访问接在H5上的其他3个传感器?

2024-12-02 23:00:00 777

原创 全场景——(十)程序升级

本节源码为“E:\QuanCJ\create_firmware_info”。下载协议可以自己定义,根据使用流程定义如下:发出“1”字符给上位机先发出5个“0x5a”数据给下位机,用于同步再发送固件信息。//版本号//长度//加载地址//校验码(上位机发送校验码给下位机 下位机接收到bin文件后算出校验码 与上位机发来的进行对比)//文件名注意:为了方便在串口里操作,上位机发送uint32_t的整数时,先发送高字节(大字节序)。发出“2”字符给上位机。

2024-12-02 23:00:00 1597

原创 C语言基础复习

在C语言中,宏定义是一种预处理指令,用于将一个标识符(宏名)替换为指定的字符串。这个过程称为“宏展开”或“宏替换”。宏定义是通过使用#define 预处理命令来完成的。宏定义主要有以下作用:① 提升易读性:比如② 便于批量修改:比如# define 宏名 字符串其中,宏名是你给标识符起的名字,而字符串可以是常数、表达式、格式串等。在预处理阶段,对程序中所有出现的“宏名”,预处理器都会用宏定义中的字符串去替换,这称为“宏替换”或“宏展开”。

2024-11-04 15:40:15 1236 1

原创 深入了解点灯程序

GPIO: General-purpose input/output,通用的输入输出口。

2024-10-24 00:00:00 897 3

原创 嵌入式处理器详解

主芯片内部有ROM,ROM程序协助从非XIP设备启动。以SD卡启动为例。而CPU只能运行XIP设备中的程序ROM程序做什么?显然:ROM需要把SD卡上的程序读到内存里(片内RAM或是片外的DDR)ROM程序要做的事情:a. 初始化硬件初始化时钟,提高CPU、外设速度初始化内存:DDR需要初始化才能使用初始化其他硬件,比如看门狗、SD卡等b. 从外设把程序复制到内存b.1 支持那么多的启动方式,SD卡、SPI FLASH、USB DISK,怎么选择?

2024-09-20 11:58:28 1353 2

原创 全场景——(七)libmodbus 使用

在libmodbus开发库中,为了方便数据处理在 modbus.h 文件中定义了一系列数据处理宏。>>80xFF0xFF当然,可以参照 float 类型的处理方法,继续定义其他多字节类型的数据例如int32_t、uint32_t、 int64_t、uint64_t 以及 double 类型的读写函数。

2024-08-30 00:30:00 987

原创 全场景——(六)Moubus 功能码详解

以主设备(左边)为例,发送(Tx)数据中第一个字节01为设备地址,第二个字节01表示功能码,第三、四个字节00 00表示起始地址,第五、六个字节00 0A表示要读取多少个位寄存器,第七、八个字节BC 0D为校验码。需要特别注意的是,Modbus的保持寄存器和输入寄存器是以字 (Word) 为基本单位的(1Word=2Byte),所以如果读取保持寄存器地址为40001开始的一个16位 (bit) 的无符号数,那么返回2字节,并可以从40002开始读取下一个16位的无符号数。数据字段中为逻辑1的位对应ON;

2024-08-30 00:00:00 944

The Python programming language.zip

The Python programming language

2024-07-09

The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#).zip

The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

2024-07-09

Scientific computing with Python..zip

The fundamental package for scientific computing with Python.

2024-07-09

Bayesian Modeling and Probabilistic Programming in Python.zip

Bayesian Modeling and Probabilistic Programming in Python

2024-07-09

GPU programming in Python..zip

Productive, portable, and performant GPU programming in Python.

2024-07-09

Minimal examples of data structures and algorithms in Python.zip

Minimal examples of data structures and algorithms in Python

2024-07-09

Python serial port access library.zip

Python serial port access library

2024-07-09

PRML algorithms implemented in Python.zip

PRML algorithms implemented in Python

2024-07-09

The Python package installer.zip

The Python package installer

2024-07-09

ReactiveX for Python.zip

ReactiveX for Python

2024-07-09

Python ProxyPool for web spider.zip

Python ProxyPool for web spider

2024-07-09

Optional static typing for Python.zip

Optional static typing for Python

2024-07-09

Task scheduling library for Python.zip

Task scheduling library for Python

2024-07-09

Python Cheat Sheet.zip

Python Cheat Sheet

2024-07-09

The uncompromising Python code formatter.zip

The uncompromising Python code formatter

2024-07-09

The Python micro framework for building web applications..zip

The Python micro framework for building web applications.

2024-07-09

Python decompiler.zip

Python decompiler

2024-07-09

Python SQL Parser and Transpiler.zip

Python SQL Parser and Transpiler

2024-07-09

Video editing with Python.zip

Video editing with Python

2024-07-09

Python website crawler..zip

Python website crawler.

2024-07-09

Python Imaging Library (Fork).zip

Python Imaging Library (Fork)

2024-07-09

Python Productivity for ZYNQ.zip

Python Productivity for ZYNQ

2024-07-09

Recipes for using Python's pandas library.zip

Recipes for using Python's pandas library

2024-07-09

Systematic Trading in python.zip

Systematic Trading in python

2024-07-09

Serverless Python.zip

Serverless Python

2024-07-09

Python datetimes made easy.zip

Python datetimes made easy

2024-07-09

Cookiecutter template for a Python package..zip

Cookiecutter template for a Python package.

2024-07-09

Hammer DDos Script - Python 3.zip

Hammer DDos Script - Python 3

2024-07-09

Image processing in Python.zip

Image processing in Python

2024-07-09

Sequence-to-Sequence Toolkit written in Python..zip

Facebook AI Research Sequence-to-Sequence Toolkit written in Python.

2024-07-09

Python library for processing Chinese text.zip

Python library for processing Chinese text

2024-07-09

Python for Windows (pywin32) Extensions.zip

Python for Windows (pywin32) Extensions

2024-07-09

Survival analysis in Python.zip

Survival analysis in Python

2024-07-09

Python Crypto Bot (PyCryptoBot).zip

Python Crypto Bot (PyCryptoBot)

2024-07-09

Python tools for geographic data.zip

Python tools for geographic data

2024-07-09

Make Python great again.zip

Make Python great again

2024-07-09

ggplot port for python.zip

ggplot port for python

2024-07-09

The Python Cryptography Toolkit.zip

The Python Cryptography Toolkit

2024-07-09

Zipline, a Pythonic Algorithmic Trading Library.zip

Zipline, a Pythonic Algorithmic Trading Library

2024-07-09

Simple Python style checker in one Python file.zip

Simple Python style checker in one Python file

2024-07-09

空空如也

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

TA关注的人

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