自定义博客皮肤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)
  • 资源 (1)
  • 收藏
  • 关注

原创 makefille ---- 王者篇

文章目录前言一、makefile的作用二、项目文件框架三、源码编写与解析前言本文所写代码是基于linux下的编程一、makefile的作用什么是makefile?makefile就是一个名字为makefile的文件。makefile的作用是什么?“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Vis.

2021-10-12 19:30:31 258

原创 makefile ----最终版

文章目录前言一、文件二、makefile的升级前言本文所写代码是基于linux下的编程一、文件a.c#include <stdio.h>#include "a.h"int main(){ printf("hello, world!\n"); printf("A= %d\n", A); test_fun(); return 0;}b.c#include <stdio.h>#include "a.h"int test_fun(){ prin.

2021-10-11 17:13:58 316

原创 makefile ----加强版

文章目录前言一、文件二、makefile的升级前言本文所写代码是基于linux下的编程一、文件a.c#include <stdio.h>#include "a.h"int main(){ printf("hello, world!\n"); printf("A= %d\n", A); test_fun(); return 0;}b.c#include <stdio.h>#include "a.h"int test_fun(){ prin.

2021-10-11 15:14:08 219

原创 makefile ----升级版

文章目录前言一、文件二、makefile的升级前言本文所写代码是基于linux下的编程一、文件a.c#include <stdio.h>#include "a.h"int main(){ printf("hello, world!\n"); printf("A= %d\n", A); test_fun(); return 0;}b.c#include <stdio.h>#include "a.h"int main(){ printf("h.

2021-10-11 15:01:54 228

原创 makefile ---- 引入

文章目录前言一、程序的编译过程二、文件的编译链接示例三、makefile的引入前言本文所写代码是基于linux下的编程一、程序的编译过程预处理 : #开头的命令称为预处理,一般预处理主要做的工作是检查语法和把包含的文件包含进来和宏展开。编译 : 把.c文件转换为.s汇编文件。汇编 : 把.s文件转换为.o二进制文件(机器码)。链接 : 把全部的.o文件和库文件链接起来变成可执行程序。ps: 编译hello.c下面这条命令会一次性把上面四个步骤给做好。gcc -o hello he.

2021-10-11 14:21:24 219

原创 网络编程 ---- UDP

文章目录前言一、UDP原理二、UDP编程步骤三、代码编写四、代码结果分析前言本文所写代码是基于linux下的编程一、UDP原理UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。使用UDP传输数据时,由应用程序根据需要提供报文到达确认、.

2021-10-05 16:16:24 131

原创 网络编程 ---- TCP

文章目录前言一、TCP原理二、TCP编程步骤三、代码编写四、代码结果分析前言本文所写代码是基于linux下的编程一、TCP原理TCP:Transmission Control Protocol传输控制协议,TCP协议是一个面向连接的、可靠的、基于字节流的传输层协议。TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?TCP三次握手执行过程:首先,服务端和客户端都是处于CLOSED状态的,然后服务端启动,监听端口,状态变为LISTEN(监听)状态。客户端为了请求资源,.

2021-10-04 21:11:41 1684

原创 linux驱动 ---- i2c总线驱动(eeprom)

文章目录前言一、IIC驱动程序框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、IIC驱动程序框架分析内核中 I2C 的处理已经做好了,我们只需要做设备驱动程序相关的内容。总线处理好了 I2C 协议,即总线知道如何收发数据,而不知道数据的含义,我们要做的只是设备相关层的代码 , 例如提供设备的地址和要存取的数据和地址 。I2C 协议中,先发出 7bit“设备地址”,然后是 1 位“写”或“读”的标志位。然后接着是每发出 8 位数据有一个 ACK 位。总线层: .

2021-07-26 17:49:21 595

原创 linux驱动 ---- 网卡(虚拟)

文章目录前言一、网卡驱动程序框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、网卡驱动程序框架分析只要把上层的数据发给网卡,从网卡来的数据构造成包给上层即可。网卡只需要“socket”编程,不需要打开某设备。驱动程序都是以面向对象的思想写的,都有相关的结构体。。程序编写步骤:1,分配某结构体:net_device2,设置结构体。①,提供一个发包函数:hard_start_xmit()②,提供收包的功能 : net_interrupt(int ir.

2021-07-24 21:54:55 263

原创 linux驱动 ---- 块设备NorFlash

文章目录前言一、NorFlash驱动框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、NorFlash驱动框架分析NorFlash可以和内存一样进行读,但写就比较麻烦需要先对一些地址发送命令,才可以进行写操作,在linux内核中对NorFlash驱动程序进行了封装,mtd层下主要是NorFlash和NandFlash,在上一篇NandFlash驱动中,有NandFlash协议,这个协议知道怎么发什么数据,发什么命令然后就可以进行读和写,但不知道怎么发,怎么发涉及底层硬件.

2021-07-23 18:35:22 516 1

原创 linux驱动 ---- 块设备NandFlash

文章目录前言一、NandFlash驱动框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、NandFlash驱动框架分析NandFlash驱动的编写我们只需要编写底层的代码,例如开启时钟,设置与时钟频率相关的参数,怎么发数据或者命令,怎么判断发数据已经完成,选中芯片等等,这些底层的访问,内核无法进行封装,内核只对NandFlash的相关协议进行封装,知道发什么,但具体需要用哪些引脚或者是寄存器去发或者收,这些需要我们来编写,主要涉及两个结构体nand_chip和mtd_.

2021-07-21 14:38:50 297

原创 linux驱动 ----块设备驱动程序框架

文章目录前言一、块设备驱动框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、块设备驱动框架分析块设备驱动程序不能和字符设备驱动程序一样读写,那样子会浪费很多时间和降低硬件的寿命,所以块设备的读写过程需要一个电梯算法来规划,把读写放入队列,一次性进行读,再写,或者写再读,不会出现读写读写交替出现。程序编写步骤:1,以面向对象的思想分配 gendisk 结构体。用 alloc_disk 函数。2,设置 gendisk 结构体:①分配/设置一个队列:reques.

2021-07-10 21:59:33 528

原创 linux驱动 ---- USB驱动框架

文章目录前言一、usb驱动框架分析二、源码实例分析(鼠标)三、实验结果前言本文基于S3C2440开发板。一、usb驱动框架分析USB 总线驱动程序,在接入 USB 设备时,会帮我们构造一个新的 usb_dev 注册到“usb_bus_type”里去。这部分是内核做好的。我们要做的是,构造一个 usb_driver 结构体,注册到“usb_bus_type”中去。在“usb_driver”结构体中有“id_table”表示他能支持哪些设备,当 USB 设备能匹配 id_table 中某一个.

2021-07-09 15:25:26 894

原创 linux驱动程序 ---- 触摸屏

文章目录前言一、触摸屏驱动二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、触摸屏驱动输入子系统其实就是一个文件input.c,Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,为了让上层app使用相同的方法获取不同的输入设备数据,引入了输入子系统的概念,input子系统解决了不同的输入类设备的输入事件与应用层之间的数据传输,使得应用层能够获取到各种不同的输入设备的输入事件,input输入子系统能够囊括所有的不同种类的输入设备,在.

2021-07-08 14:53:49 1779

原创 linux驱动 ----LCD驱动框架

文章目录前言一、lcd驱动框架分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、lcd驱动框架分析所谓的lcd驱动框架,其实就是一个文件fbmen.c,这个文件里面封装了常用的lcd驱动程序框架,如注册驱动程序和与lcd相关的较为稳定的代码,这个框架,会创建设备类,但不会在该类下创建设备,这个需要有真正的设备内容,才能创建,这个真正的设备内容就是需要我们去编写的lcd驱动,想要在这个框架下写自己的驱动代码,也就是说想要用"fbmem.c"这一套代码时,就要按上图的框架来写.

2021-07-06 20:10:47 504 1

原创 输入子系统 ---- input.c

文章目录前言一、输入子系统分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、输入子系统分析输入子系统其实就是一个文件input.c,Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,为了让上层app使用相同的方法获取不同的输入设备数据,引入了输入子系统的概念,input子系统解决了不同的输入类设备的输入事件与应用层之间的数据传输,使得应用层能够获取到各种不同的输入设备的输入事件,input输入子系统能够囊括所有的不同种类的输入.

2021-07-06 16:57:19 271

原创 字符设备驱动 ---- bus总线,device和driver模型

文章目录前言一、bus总线分析二、源码实例分析三、实验结果前言本文基于S3C2440开发板。一、bus总线分析bus总线是一条虚拟总线,其实就是一种机制,把驱动程序进行封装,变得更容易移植和修改,linux内核提供这种机制,我们只需要实例化两个结构体platform_device xxx_device和platform_driver xxx_driver,再使用两个注册函数platform_driver_register(&xxx_driver)和platform_device_un.

2021-07-04 22:29:05 501 2

原创 字符设备驱动 ---- poll机制

文章目录前言一、poll机制分析二、用户程序到驱动程序的过程分析三、中断和poll的结合前言本文基于S3C2440开发板。一、poll机制分析所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用 open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。对于系统调用 poll 或 select,它们对应的内核函数都是 sys_poll。分析 sys_poll,即可理.

2021-07-01 17:17:43 118

原创 linux驱动程序 ---- 按键中断

文章目录前言一、原理图二、芯片手册三、驱动程序四、驱动程序的测试五、结果分析前言本文基于S3C2440开发板。一、原理图二、芯片手册三、驱动程序button_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#incl.

2021-06-30 19:03:06 193

原创 Linux 异常处理体系结构

文章目录前言一、Linux 异常的作用二、异常结构体系前言本文基于S3C2440开发板。一、Linux 异常的作用打断cpu的正常运行流程,做一些其他事情,比如中断,未定义指令,之前说的用户程序使用open.read,write等等函数打开字符设备,最终是引起swi异常,也就是软件中断指令,进入内核态,调用我们的驱动程序。二、异常结构体系①异常发生的时候,就会停止当前的正常流程,自动跳转到异常向量表。②异常向量就是一些被安放在固定位置的代码,发生异常时就会自动执行这些固定位置上的指令.

2021-06-30 18:34:06 217

原创 linux驱动程序 ---- 加强版led

文章目录前言一、原理图二、芯片手册三、驱动程序四、驱动程序的测试五、结果分析前言本文基于S3C2440开发板。一、原理图二、芯片手册三、驱动程序利用次设备号,分辨出是哪一个led,对单个led进行操作。led_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include .

2021-06-14 10:21:20 141

原创 linux驱动程序 ---- led

文章目录前言一、原理图二、芯片手册三、驱动程序四、驱动程序的测试五、结果分析前言本文基于S3C2440开发板。一、原理图二、芯片手册三、驱动程序led_drv.c#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include &.

2021-06-13 19:46:13 115

原创 开发板挂载nfs的方法

文章目录前言一、虚拟机 Linux、开发板 、PC电脑互相ping通二、开发板挂载nfs的两种方法①手动挂载②自动将nfs挂载为根文件系统。前言本文基于S3C2440开发板。一、虚拟机 Linux、开发板 、PC电脑互相ping通首先我的pc电脑是连接无线网络,也就是说用的是无线网卡,但我的开发板与pc之间用网线连接,用的是有线网卡,所以我们需要设置虚拟机linux用桥接模式,同时使用有线网卡进行桥接。三者要处于同一网段。①用网线连接电脑和开发板,打开电脑的网络适配器,修改有线网卡的ip.

2021-06-13 12:42:58 3283 1

原创 应用程序、库、内核、驱动程序的关系

文章目录前言一、Linux软件系统的层次关系二、各层软件系统之间的协作关系前言本文基于S3C2440开发板。一、Linux软件系统的层次关系从上到下,一个软件系统可以分为应用程序,库,内核,驱动程序。开发人员可以专注于自己熟悉的部分,相对于邻接层,只需要了解它的接口,不必关心它的实现细节。二、各层软件系统之间的协作关系应用程序使用库提供的open,read,write函数打开我们的设备文件。库根据open,read,write函数传入的参数执行"swi"指令,这条指令引发CPU异.

2021-06-09 16:40:36 456

原创 linux系统移植与开发

文章目录前言1 、第一次拿到开发板需要做什么1.1 、 开发板启动方式,接线方法1.2 、 开发板驱动安装2、U-BOOT的修改和完善2.1、简单的源码修改2.1.1、串口输出欢迎图案和语句2.1.2、lcd屏输出欢迎图案和语句2.2、增加u-boot命令3、内核裁剪3.1、裁剪过程3.2、裁剪方法和总结4、根文件系统制作,简单应用程序开发移植4.1、根文件系统制作4.2、sqlite移植4.2.1、sqlite移植方法4.2.2、基于sqlite的简单应用程序开发4.3、简单交互式应用开发4.3.1、驱.

2021-06-09 12:53:18 1439 1

原创 简单的Linux字符设备驱动程序框架

文章目录前言一、file_operations二、register_chrdev三、open函数四、led应用函数五、led在主函数的应用方法前言本文基于S3C2440开发板。一、file_operationsfile_operations是字符设备驱动程序中最重要的数据结构。它是一个结构体,这个结构体的内容包含很多东西,整体由函数指针构成,这里需要特别关注的就是 read write open 这三个函数指针,是整个驱动程序的核心。struct file_operations { .

2021-06-08 20:36:30 116

原创 蓝桥杯嵌入式国赛 ---- 第十一届试题解析

文章目录前言一、试题二、需要用到的模块1.LED2.按键3.ADC4.定时器3输出pwm5.定时器2捕获2路pwm频率三、主函数逻辑设计四、 代码测试结果图前言**本程序设计是基于嵌入式开发板CT117E,stm32f103RBT6。如果对哪个模块的代码不理解可以点开我的博客查看各个模块的编写思路。一、试题二、需要用到的模块1.LED代码如下:led.c:#include "led.h"void led_init(void){ GPIO_InitTypeDef GPI.

2021-06-03 14:11:29 1027 1

原创 蓝桥杯嵌入式国赛 ---- 第十届试题解析

文章目录前言一、试题二、需要用到的模块1.LED2.按键3.ADC4.定时器3捕获PWM25.ds18b20测量温度6.i2c对eeprom的存取7.数码管显示8.串口三、主函数逻辑设计四、 代码测试结果图前言**本程序设计是基于嵌入式开发板CT117E,stm32f103RBT6。如果对哪个模块的代码不理解可以点开我的博客查看各个模块的编写思路。一、试题二、需要用到的模块1.LED代码如下:led.c:#include "led.h"void led_init(voi.

2021-05-31 21:56:49 2163 5

原创 蓝桥杯嵌入式国赛 ---- 第九届试题解析

文章目录前言一、试题二、需要用到的模块1.LED2.ADC按键3.ADC4.串口5.i2c对eeprom的存取三、主函数逻辑设计四、 代码测试结果图前言**本程序设计是基于嵌入式开发板CT117E,stm32f103RBT6。如果对哪个模块的代码不理解可以点开我的博客查看各个模块的编写思路。一、试题二、需要用到的模块1.LED代码如下:led.c:#include "led.h"void led_init(void){ GPIO_InitTypeDef GPIO_.

2021-05-30 20:59:55 760

原创 蓝桥杯嵌入式国赛 ---- 第八届试题解析

文章目录前言一、试题二、需要用到的模块1.LED2.按键3.ADC4.定时器2捕获5.定时器3产生pwm6.i2c对eeprom的存取三、主函数逻辑设计四、 代码测试结果图前言**本程序设计是基于嵌入式开发板CT117E,stm32f103RBT6。如果对哪个模块的代码不理解可以点开我的博客查看各个模块的编写思路。一、试题二、需要用到的模块1.LED代码如下:led.c:#include "led.h"void led_init(void){ GPIO_Init.

2021-05-24 22:24:19 1161

原创 蓝桥杯嵌入式国赛 ---- 两路占空比可变pwm捕获

文章目录前言一、原理图二、由原理图得到的信息三、占空比可变pwm捕获初始化四、占空比可变pwm捕获在主函数的应用方法前言本文是基于嵌入式开发板CT117E,stm32f103RBT6。一、原理图二、由原理图得到的信息两个频率可调的PULS1,PULS2。两个占空比可调的PWM1,PWM2。PULS1-----PA1;PULS2-----PA2;PWM1 -----PA6;PWM2 -----PA7;三、占空比可变pwm捕获初始化capture.c#include "cap.

2021-05-23 15:32:08 689 2

原创 蓝桥杯嵌入式国赛 ---- 两路ADC测量

文章目录前言一、原理图二、由原理图得到的信息三、两路adc初始化四、两路adc的应用函数五、两路adc在主函数的应用方法前言本文是基于嵌入式开发板CT117E,stm32f103RBT6。一、原理图二、由原理图得到的信息两条模拟信号线AO1,AO2。AO1与PA4连接,AO2与PA5连接。三、两路adc初始化2adc.c#include "2adc.h"void adc_2_init(void){ ADC_InitTypeDef ADC_InitStructure; .

2021-05-23 15:14:56 379

原创 蓝桥杯嵌入式国赛 ---- TRDO & TRAO 光敏电阻

文章目录前言一、原理图二、由原理图得到的信息三、光敏电阻初始化四、光敏电阻应用函数五、光敏电阻在主函数的应用方法前言本文是基于嵌入式开发板CT117E,stm32f103RBT6。一、原理图二、由原理图得到的信息一个数字信号线DO和一个模拟信号线AO。DO与PA3连接,AO与PA4连接。电路方程(VDD - AO(化成以V为单位)) / 10K = (AO(化成以V为单位) - GDN) / R47。VDD=3.3,GDN=0,代进方程,求解R47 = AO*10 / (3.3-AO.

2021-05-22 21:40:31 753

原创 蓝桥杯嵌入式国赛 ---- LIS302DL加速度传感器

文章目录前言一、原理图二、由原理图得到的信息三、LIS302DL初始化五、LIS302DL在主函数的应用方法前言本文是基于嵌入式开发板CT117E,stm32f103RBT6。一、原理图二、由原理图得到的信息SCL,SDL用I2C协议进行通信。INT1,INT2,两个中断控制引脚。SCL,SDA,INT1,INT2分别是PA4,PA5,PA6,PA7。三、LIS302DL初始化i2c.c#include "stm32f10x.h"#include "i2c.h"/** I2.

2021-05-22 14:26:59 697

原创 蓝桥杯嵌入式国赛 ---- DS18B20温度传感器

文章目录前言一、原理图二、由原理图得到的信息三、DS18B20初始化四、ds18b20在主函数的应用方法前言本文是基于嵌入式开发板CT117E,stm32f103RBT6。一、原理图二、由原理图得到的信息一个端口TDQ。与PA6连接。三、DS18B20初始化ds18b20.c#include "stm32f10x.h"#include "ds18b20.h"#define delay_us(X) delay((X)*72/5)void delay(unsigned .

2021-05-22 10:05:46 963 1

原创 蓝桥杯嵌入式国赛 ---- DHT11温湿度传感器

文章目录前言一、原理图二、由原理图得到的信息三、DHT11初始化四、DHT11在主函数的应用方法前言本文是基于嵌入式开发板CT117E,stm32f103RBT6。一、原理图二、由原理图得到的信息只有一个口 HDQ。与PA7连接。三、DHT11初始化dht11.c#include "stm32f10x.h"#define delay_us(X) delayd(X*72/5)void delayd(unsigned int n){ while (n--);}v.

2021-05-22 09:51:32 978

原创 蓝桥杯嵌入式国赛 ---- ADC按键

文章目录前言一、原理图二、由原理图得到的信息三、ADC按键初始化四、ADC按键应用函数五、ADC按键在主函数的应用方法前言本文是基于嵌入式开发板CT117E,stm32f103RBT6。一、原理图二、由原理图得到的信息各个按键连接的电阻的阻值不一样。按键按下电路连通。电路连通后,每个按键按下的adc值都不一样,通过这个去判断是哪个按键按下。根据自己开发板测得的数据,进行代码的编写,不用死记硬背各个按键按下的adc值。三、ADC按键初始化adc_key.c#include "a.

2021-05-14 10:29:55 653 1

原创 蓝桥杯嵌入式国赛 ---- 数码管

文章目录前言一、原理图二、由原理图得到的信息三、seg初始化四、seg应用函数五、seg在主函数的应用方法前言本文是基于嵌入式开发板CT117E,stm32f103RBT6。一、原理图二、由原理图得到的信息原理图重点关注的有三个口 :SER,SCK,RCLK。原理图的U1,U2,U3数据段互相连在一起。数码管是共阴数码管。所以是输入高电平有效。SER: 74LS595串行数据输入引脚。主要用于输入高电平或者低电平。SCK: 4LS595串行存储时钟输入引脚。主要用于使能移位,如.

2021-05-12 10:42:31 471

原创 嵌入式系统上电后程序的运行过程

文章目录前言一、ROM 与 RAM1.1 ROM1.2 RAM二、两类嵌入式系统2.1 无操作系统2.1 有操作系统三、NAND FLASH 与 NOR FLASH3.1 NAND FLASH3.2 NOR FLASH四、开始执行代码的地址五、上电后怎么执行我们的程序六、总结前言微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的入口地址在.

2021-04-24 18:06:25 1833 1

原创 蓝桥杯嵌入式 ---- 第十一届省赛第二场试题解析

文章目录前言一、试题二、需要用到的模块1.LED2.按键3.ADC4.定时器3 产生pwm5.定时器2 捕获pwm(不需要)三、主函数逻辑设计四、 总结①两路不同的pwm占空比②PWM占空比的不断变化③手上没有测pwm的工具前言本程序设计是基于嵌入式开发板CT117E,stm32f103RBT6。如果对哪个模块的代码不理解可以点开我的博客查看各个模块的编写思路。一、试题二、需要用到的模块1.LED代码如下:led.c:#include "led.h"void led.

2021-04-17 13:07:59 861

蓝桥杯嵌入式全程学习记录.7z

省赛国赛的各个模块历程代码 和各界程序题的代码

2021-06-06

空空如也

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

TA关注的人

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