ARM核心及体系结构的关系

嵌入式 Linux 面试核心知识 本文详细解析嵌入式Linux系统核心知识,涵盖启动流程、内存管理、驱动开发、中断处理及体系结构五大模块。在启动流程方面,深入剖析U-boot两阶段启动机制和Linux内核初始化过程;内存管理部分系统讲解虚拟/物理地址映射及内核内存分配函数差异;驱动开发章节详细阐述字符设备注册、中断处理及I/O控制实现;中断处理模块解析上下半部机制与原子操作实现;体系结构部分重点分析ARM架构特性及Linux用户态/内核态交互原理。全文通过对比表格、代码示例和流程图,全面呈现嵌入式Linux系统的关键技术实现与优化方法。 阅读详情

在学习ARM体系架构(英文名:ARM Architecture Reference Manua)的时候,我突然产生了一个想法:ARM从诞生到现在也有这么多年了,它的体系架构也是不断发展更新的,相对应的在产品开发中针对不对核心版本有哪些具体的应用呢?不说全部的,如果对常用的有一个大概的总结就达到目的了。通过一番搜索罗列了一些,有些是本人在实际开发中使用的、有些是和网友在进行技术交流中了解的、而有些只是听说并没有直观概念,相关的介绍也是来自网络。由于一个人所知毕竟有限,也不可能列出所有的。

一、关系图

核 心

体系结构

常见CPU

ARM1

V1

 

ARM2

V2

 

ARM2As、ARM3

V2a

 

ARM6、ARM600、ARM610、ARM7、ARM710

V3

ST的

StrongARM、ARM8、ARM810

V4

Intel的SA1110:StrongARM 

ARM7TDMI、ARM710T、ARM720T、ARM740T、ARM9TDMI、ARM920T、ARM940T

V4T

Philips的LPC210x:ARM7TDMI
Samsung的S3C2440:ARM920T
Cirrus Logic的EP930X:ARM920T
Marvell的PXA310:ARM920T

ARM9E-S、ARM10TDMI、ARM1020E

V5TE

Samsung的S3C2450:ARM926EJ

ARM1136J(F)-S、ARM1176JZ(F)-S、ARM11 MPCore

V6

SiRFprima/A4:ARM1136

Freescale的MX31:ARM1136J(F)-S
Samsung的S3C6410:ARM1176JZ(F)-S

ARM1156T2(F)-S

V6T2

 

ARM Cortex-M、ARM Cortex-R、ARM Cortex-A

V7

ST的STM32F10X:ARM Cortex-M3
Samsung的
S5PC100:ARM Cortex-A8
TI的OMAP3530:ARM Cortex-A8

二、目前常见的指令集的说明:
ARMv4:它只支持 32 位 ARMv4 指令
ARMv4T:“T”代表 Thumb(16 位指令模式)
ARMv4I:“I”代表交互作用 (Interworking)。它允许 32 位指令和 16 位指令共存
一些经常出现的CPU支持的指令类型:
XScale:支持ARMv5指令,当然也支持ARMv4指令
StrongARM:支持 ARMv4 指令ARMv4I指令。
ARM920T等:通常支持这三个变种

三、待完成:各款产品主要特点、主要应用领域、实际产品
如:PXA310
主要特点:
1、处理高达624 MHz的更快的最终用户体验,如提供丰富的网络内容,和可扩展的余量的多任务处理与先进的3G应用模式。
2、集成无线英特尔 降低SpeedStep技术的MIPS / mW的功率效率,提供超长电池寿命。
3、集成的硬件视频加速和硬件安全/的DRM处理VGA视频播放和摄像功能,视频电话和数字电视。
4、加强周边的速度和功能,如支持相机传感器高达5百万像素(议员)和蓝牙v2.0的EDR
应用领域:专门为手持设备、GPS 定位系统、无线手持和其他消费类电子设备而设计
实际产品:SGH-i780

ARM1136J、ARM1156T2和ARM1176JZ
ARM11处理器是为了有效的提供高性能处理能力而设计的。该系列主要有ARM1136J,ARM1156T2和ARM1176JZ三个内核型号
ARM11处理器系列可以在使用130nm代工厂技术、小至2.2mm2芯片面积和低至0.24mW/MHz的前提下达到高达500MHz的性能表现。ARM11处理器系列以众多消费产品市场为目标,推出了许多新的技术,包括针对媒体处理的SIMD,用以提高安全性能的TrustZone技术,智能能源管理(IEM),以及需要非常高的、可升级的超过2600 Dhrystone 2.1 MIPS 性能的系统多处理技术。
   下面对几个ARM处理器内核做了简单的介绍。可以注意到,随着处理器内核技术的发展,处理器的速度越来越快,其主要得益于ARM流水线的技术发展。
   ARM1176JZF-S可综合处理器专门针对包括数字电视、机顶盒、游戏机以及手机在内的消费及无线产品。这一处理器采用了ARM Jazelle® Java加速技术、ARM TrustZone®技术(专门针对为运行开放式操作系统例如Symbian OS、Linux和Windows CE的消费产品提供安全性能的关键技术)以及一个矢量浮点(VFP)协处理器(为嵌入式3D图像提供强大的加速功能)。
DSP功能:
DSP(digital singnal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或1的数字信号,再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片
目前有很多应用要求多处理器的配置(多个ARM内核,或ARM+DSP的组合),ARM11处理器从设计伊始就注重更容易地与其他处理器共享数据,以及从非ARM的处理器上移植软件。此外,ARM还开发了基于ARM11系列的多处理器系统——MPCORE(由二个到四个ARM11内核组成)。

嵌入式面试核心突破:一周构建系统知识体系,告别死记硬背 在嵌入式系统开发领域,构建坚实的计算机体系结构与操作系统原理知识体系是工程师的核心竞争力。理解从CPU流水线、内存管理到实时操作系统(RTOS)任务调度的底层原理,是将零散技术点串联起来的关键。这些原理不仅决定了代码的执行效率与可靠性,更是解决中断处理、优先级反转、外设驱动等实际工程问题的理论基础。通过深入剖析volatile关键字与内存屏障在多核并发中的作用,以及RTOS中互斥量与优先级继承机制如何保障实时性,工程师能够设计出更稳定、高效的嵌入式软件。本文聚焦于嵌入式面试中最能体现功底的硬核考点,旨在帮助 阅读详情

相关推荐

ARM体系结构的命名规则

每个ARM处理器都有一个特定的指令集架构,而一个特定的指令集架构又可以由多种处理器实现。 ARM产品通常以ARM【x】【 y 】【z】【 T 】【 D 】【 M 】【I】【 E 】【J】【 F 】【 -S】形式出现。ARM体系结构的命名规则x 系列,号如ARM7、ARM9y 存储管理/保护单元z CacheT Thumb16位译码器D JTAG调

虚拟化开发 6266

一小时教你学会 ARM 架构

本文来自作者 刘盼 在 GitChat 上分享,「阅读原文」查看交流实录 「文末高能」 编辑 | 奕迅 架构的演变历史 我们首先介绍 ARM Ltd,这里先说的是公司而不是架构。ARM 的发展历史非常久远,超乎许多人的想象。 首先,我们提供一些背景信息,ARM 成立于20世纪90年代末,从另一家位于剑桥的公司分拆而来,那家公司叫做 Acorn Computers,曾经

技术杂谈 4万+

如何使用Mondo Rescue备份及恢复Linux系统(制作ISO镜像,成功恢复)

PVE 虚拟机。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 3680

【ARM】(1)架构简介

ARM内核与架构、演进历史、ARMv8基础知识

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 5221

初识安卓系统

简单介绍安卓系统,包括安卓系统的定义,安卓系统体系结构,安卓系统的优缺点,安卓系统版本与处理器等内容。

qq_30999865的博客 3007

mondo rescue3.2.1-1

该资源实用于redhat6.5版本的系统,如果你不是redhat6的版本,请自行去官网下载安装包

CentOS7下使用Mondo Rescue实现系统全备份

CentOS7下使用Mondo Rescue实现系统全备份

yunzhonghefei的博客 813

压电阀控制器设计-总章

本文章用于回顾记录本人制作压电阀控制器的关键技术,本人所制作压电阀控制器已经上市得到应用,特在此对一些关键技术进行回顾记录,欢迎从事压电控制及压电阀相关人员一起讨论

qq_42712859的博客 849

如何使用Mondo救援故障恢复工具克隆和备份Linux系统

原文链接:http://www.tecmint.com/how-to-clone-linux-systems/ Mondo Rescue是一个开源免费的故障恢复和备份工具,用户可以轻松地创建系统的完整(Linux或Windows)克隆或备份的ISO镜像,可以将这些镜像存放在CD、DVD、磁带、USB设备、硬盘和NFS上。Mondo Rescue还可以用来快速恢复或者重新部署工作镜像到其他

yang1982_0907的专栏 1万+

多智能体强化学习之值函数分解:VDN、QMIX、QTRAN系列优缺点分析(转载)

关于多智能体强化学习中VDN,QMIX,QTRAN三个算法再值分解方向的研究成果。三个算法呈递进关系

qq_33328642的博客 5859

ISP图像处理Verilog仿真框架搭建(附代码)

基于Verilog的图像处理仿真框架搭建

路漫漫其修远兮,吾将上下而求索 1898

2.8-中断处理

ARM架构采用精密的中断优先级管理系统,通过活动优先级和运行优先级机制处理中断请求。系统提供多种专用指令(如GICR_CDIA、GIC_CDEOI等)实现中断确认、优先级调整和停用功能。中断状态机包含挂起、确认、停用等状态转换,关键特性包括优先级比较机制、活动状态设置限制等。GICv5简化了优先级管理,移除了GICv3的二进制点寄存器。整个系统确保只有高优先级中断能被及时处理,同时支持多优先级中断并发。

baron-周贺贺-代码改变世界ctw 280

python 爬虫 xpath 存储到数据库

参考

我是张先生 1289

ARM体系结构与编程教程资源下载:掌握ARM核心技术的最佳伴侣

ARM体系结构与编程教程资源下载:掌握ARM核心技术的最佳伴侣 【下载地址】ARM体系结构与编程教程资源下载 《ARM体系结构与编程》是一本由杜春雷编著的经典教程,深入解析了ARM处理器的内部结构、指令集、编程模型及开发工具的使用。本书通过实例分析与实际操作,帮助读者全面掌握ARM体系结构的核心知识与编程技巧。本开源项目...

gitblog_06762的博客 1186

抖音批量取消关注神器:5行JS代码搞定,告别手动操作(附详细步骤)

本文介绍了一种利用JS脚本在抖音创作者平台批量取消关注的高效方法。通过浏览器开发者工具执行简单的JavaScript代码,即可自动化模拟点击操作,快速清理大量关注列表,告别繁琐的手动操作。文中提供了详细的步骤和核心代码,适合有一定技术基础的用户参考。

weixin_29009971的博客 596

AI 推理与服务(AI Inference and Serving)

AI 推理和服务是现代分布式系统中的重要组成部分。通过合理应用 AI 推理和服务的最佳实践,可以显著提高系统的智能性和用户体验。本章介绍了 AI 推理和服务的核心概念、最佳实践以及在分布式系统中的应用,希望这些内容能帮助您构建更智能、更高效的分布式系统。

蜗牛沐雨 1382

ARM体系结构及接口技术

arm体系结构与接口技术基础讲解

hallocounty的博客 1637

STM32F407驱动OV2640摄像头全栈解析:DCMI+DMA+SCCB协同设计

图像采集是嵌入式视觉系统的基石,其核心在于传感器与MCU间的数据通路构建。原理上需理解并行接口(如DCMI)的硬件同步捕获机制、串行控制总线(如SCCB/I²C)的寄存器级配置逻辑,以及DMA在高吞吐数据搬运中的关键作用。技术价值体现在解放CPU、保障实时性、降低功耗,并支撑JPEG压缩与RGB565直显等差异化应用。典型场景包括智能终端实时预览、低带宽图像上传、工业现场视频监控及教学实验平台搭建。本文以STM32F407与OV2640集成实践为载体,深入剖析DCMI时序约束、SCCB软件模拟实现及DMA循

weixin_36151775的博客 180

ARM——体系结构

计算机体系结构:冯诺伊曼 哈佛。

m0_71703182的博客 2056

MATLAB 控制 E4438C 信号源的研究

通过 MATLAB,我们可以实现对 E4438C 的远程控制,从而实现更高的自动化和可编程性。总结起来,通过使用 MATLAB 和 Instrument Control Toolbox,我们可以轻松地控制 E4438C 信号源并生成各种类型的信号。需要注意的是,以上代码仅为示例,实际应用中可能需要根据具体情况进行更详细的配置和错误处理。此外,MATLAB 还提供了一系列函数和命令,可用于控制 E4438C 信号源的其他功能,如频率调谐、功率设置、调制设置等。您可以根据自己的需求进行相应的配置和控制。

RswtPerl的博客 1014

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ARM体系结构与编程学习资源:全面掌握ARM核心技术与编程技巧

ARM体系结构与编程学习资源:全面掌握ARM核心技术与编程技巧 去发现同类优质开源项目:https://gitcode.com/ 在当今嵌入式系统与移动设备的设计中,ARM体系结构因其高性能、低功耗的特点而占据重要地位。本文将为您推荐一套全面的《ARM体系结构与编程》学习资源,帮助您深入理解并掌握ARM的核心技术和编程方法。 项目介绍 《ARM体系结构与编程》学习资源基于杜春雷先生的同名经典图书,...

gitblog_06718的博客 970

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ARM体系结构

ARM体系结构 今天学习的是ARM体系结构。以前只知道ram是随机存取存储器的意思,还不知道有体系结构这么一回事。虽然也认真听讲,但还是云里雾里的,概念很模糊。在网上发现一篇关于ARM的文章,写的不错。 ARM 体系结构   Q: ARM 是什么? A: ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为

jonnyqian的专栏 1189

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ARM介绍及其体系结构

概括起来,ARM具有以下三种含义:① ARM是一家公司的名称,1991年成立于英国剑桥,是一个在全球半导体行业技术领先的公司,其主要业务是设计16位和32位嵌入式处理器。② ARM是一项技术的名称,是一种Advanced RISC Machines 32位RISC(精简指令集)处理器体系结构,就像8086架构是一种CISC体系结构一样。③ ARM是一类微处理器芯片或产品的统称,是采用ARM技术开发的RISC处理器的统称。

2401_85409229的博客 2347
上一篇: wince5下生成graphedt的方法
下一篇: 结合romimage来分析WINCE下的PE文件特点
alien75
博客等级 码龄25年 195粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值