z-stack初始化物理地址

ZIGBEE协议栈通信——阿里云上传数据(STM32)(二) ZigBee3.0 开发指南 阅读详情

在z-stack提供的实例工程中,接通电源后都会出现LED2闪几下,LED1一直亮着。然后,调试一段时间后我,发现LED1,LED2都不亮了。

经过逐步追踪发现,灯闪烁的程序实现在zmain_ext_addr()中,它的代码如下:

static ZSEG void zmain_ext_addr( void )
{
  uint8 i;
  uint8 led;
  uint8 tmp;
  uint8 *xad;
  uint16 AtoD;

  // Initialize extended address in NV
  osal_nv_item_init( ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL );//初始化存储器
  osal_nv_read( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &aExtendedAddress );//读存储器

  // Check for uninitialized value (erased EEPROM = 0xFF)
  xad = (uint8*)&aExtendedAddress;
  for ( i = 0; i < Z_EXTADDR_LEN; i++ )
    if ( *xad++ != 0xFF ) return;//如果地址中有一个字节不是0Xff(即空)则认为物理地址有效,返回

#ifdef ZDO_COORDINATOR
  tmp = 0x10;
#else
  tmp = 0x20;
#endif
  // Initialize with a simple pattern
  xad = (uint8*)&aExtendedAddress;
  for ( i = 0; i < Z_EXTADDR_LEN; i++ )
    *xad++ = tmp++;//初始化扩展地址

  // Flash LED1 until user hits SW5
  led = HAL_LED_MODE_OFF;
  while ( HAL_KEY_SW_5 != HalKeyRead() )
  {
    MicroWait( 62500 );
    HalLedSet( HAL_LED_1, led^=HAL_LED_MODE_ON );  // Toggle the LED
    MicroWait( 62500 );
  }
  HalLedSet( HAL_LED_1, HAL_LED_MODE_OFF );

  // Plug AtoD data into lower bytes
  AtoD = HalAdcRead (HAL_ADC_CHANNEL_7, HAL_ADC_RESOLUTION_10);
  xad = (uint8*)&aExtendedAddress;
  *xad++ = LO_UINT16( AtoD );
  *xad = HI_UINT16( AtoD );

#if !defined( ZTOOL_PORT ) || defined( ZPORT ) || defined( NV_RESTORE )
  // If no support for Z-Tool serial I/O,
  // Write temporary 64-bit address to NV
  osal_nv_write( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, &aExtendedAddress );//把物理地址写入NV
#endif
}

由于我在条件编译中选择了NV_RESTORE,所以在下一次程序运行的时候就自动读取NV里面的物理地址。


ZigBee协议栈与CC2530开发:从理论到实战的全面解析 ZigBee作为一种基于IEEE 802.15.4标准的低功耗无线通信技术,其核心在于分层协议栈架构与自组网能力。协议栈从底层的物理层(PHY)和媒体访问控制层(MAC)提供基础无线连接,到网络层(NWK)实现动态路由,再到应用层(APL)支持具体业务,共同构建了稳定可靠的无线传感网络。在工程实践中,TI的CC2530片上系统与Z-Stack协议栈是实现ZigBee应用的典型平台,其中操作系统抽象层(OSAL)的事件轮询机制是任务调度的关键。掌握ZigBee技术对于开发智能家居、工业监控等低功耗物联网场景具 阅读详情

相关推荐

uboot启动之BL1阶段的分析1

BL1阶段代码的分析以start.s文件作为主要的目标,此篇博文主要对整个个流程进行分析。

cryil_0301的博客 1325

指针的初始化与地址

#include <stdio.h> #include <stdlib.h> int main(void){ int age = 2; //数组直接赋值 //定义两个指针变量指向age int *p1; int *p2; p1 = &age; p2 = &age; printf("age的地址:0x%p\n", &age); printf("p1指针的地址:0x%p\n", &p1); printf("p2指针的地址.

零界 1012

zigbee之Zstack协议栈使用

zigbee;zstack

hfh8130的博客 7796

网络初始化配置

(2)vm8 NAT模式:通过nat转发,不需要跟主机在统一网段。(1)vm0桥接模式:与主机相同网段,有属于自己的ip。(3)vm1主机模式:无需配置ip,无法与外界交流。虚拟网卡vm0、vm1、vm8。

qq_51384368的博客 630

永磁同步电机高效标定技术:从理论到实践的全面解析

本文全面解析永磁同步电机高效标定技术,从MTPA标定、弱磁区优化到初始角校准,详细介绍了理论原理和实战技巧。针对新能源汽车应用场景,提供标定系统集成要点和AI辅助优化方案,帮助工程师提升电机性能标定效率与精度。

weixin_28452161的博客 502

从零开始搭建Proxmox VE虚拟化网络:手把手教你配置桥接、VLAN和链路聚合

本文详细介绍了如何在Proxmox VE虚拟化环境中配置桥接、VLAN和链路聚合网络。通过分步指南和实战案例,帮助用户掌握Linux Bridge、VLAN隔离和Bonding技术,构建高性能、高可用的企业级虚拟化网络架构。

wind6的博客 977

zmain_ext_addr()函数研究(转)

原链接:http://bbs.feibit.com/thread-7139-1-1.html 4.4大致说了:CC2530芯片在TI出厂时已经预先烧写了 Primary IEEE address,这个64位地址是全球唯一的。这个地址在CC2530的FLASH信息页中,是只读的。但是用户貌似可以重新写这个预先烧写的Primary IEEE address。具体再来看看 Section 7....

jishublog 317

Fortran环境配置:VS2022+Intel oneAPI安装全流程指南

Fortran环境配置:VS2022+Intel oneAPI安装全流程指南

shuyisuisuinian的博客 2万+

Z-Stack分析--main函数

程序的执行都是从main函数开始,也就是说我们的程序的入口都是main函数(注:对于嵌入式开发人员来说main函数也是普通的函数,也是被调用的,那么也可以被改为其他的函数名称,这需要你自己编写启动代码),对于Z-Stack协议栈来说main函数在ZMain.c(Z-Stack\Projects\zstack\ZMain\TI2530DB)里面定义,下面我们首先分析一下main函数实现的功能,然后我

zo908111的专栏 3000

跨模态行人重识别实战:Python复现SYSU-MM01官方评估协议

本文详细介绍了如何用Python复现SYSU-MM01数据集的官方评估协议,以解决原Matlab代码在Python生态中不便使用的问题。文章深入解析了数据集的`indoor`与`all`两种评估模式,并提供了完整的Python代码实现,包括特征加载、相似度计算、Rank-k与mAP指标计算等核心步骤,确保评估结果与官方Matlab版本完全一致,助力跨模态行人重识别研究。

weixin_29081163的博客 99

当几何失效时:3D激光SLAM退化场景的本质与应对策略

本文探讨了3D激光SLAM在退化场景(如长廊、隧道等)中的挑战与解决方案。文章从数学角度分析了退化原因,指出信息矩阵秩亏导致某些方向约束缺失。主流算法采用不同策略应对:LeGO-LOAM利用地面约束与解耦优化;LIO-SAM/LVI-SAM通过多传感器融合补偿;FAST-LIO系列依赖IMU短期积分。新兴的RID-LIO方案创新性地利用激光强度信息增强约束,实验显示精度提升63.59%。研究表明,针对不同退化方向需要采用特异性补偿策略,而挖掘现有传感器的潜在信息维度是提升鲁棒性的有效途径。

Studying…… 618

Zstack中关于NV的几个问题

本文转自:http://bbs.feibit.com/thread-366-1-1.html 原文是一篇pdf文档,我给复制出来的。 我是 zigbee 的新手,嘎嘎新的新手,目前学习 CC2430+Z-stack1.4.3 那一套东西呢,至今对协议栈也是一知半解。不过在学习过程中看资料总是提到NV这个事儿, NV者, Non Volatile 也,就是掉电不丢失的存储器呗, EEPROM,

小人物专栏 3509

车载以太网:PHY(物理层)介绍

本文以TJA1101芯片为实例介绍了车载以太网PHY(物理层)组成。

kevin1499的博客 6231

Zigbee学习记录:基于Z-Stack 3.0.2的led开关控制指令和温湿度数据上报与接收

通过本次学习实践,笔者成功实现了基于Z-Stack 3.0.2的Zigbee成功实现一个简单的开关控制指令和温湿度数据上报过程。这个过程不仅加深了对Zigbee协议的理解,还提高了编程实践和问题解决的能力。未来,笔者将继续深入探索Zigbee技术的更多应用场景和优化方法,为物联网技术的发展贡献自己的力量。同时也希望读者阅读本文章末尾的问题后,能提供一些解决思路,让笔者更加深入探索Zigbee技术。

Wang2869902214的博客 1825

30天入门 SAP BTP 开发系列之三:了解 SAP BTP Global Account 的概念

90天之后 Trial 账号会被删除,该账号在 SAP BTP 上创建的内容会被清空,不过我们可以再创建一个新的 Tria 账号。本文简单介绍了 SAP BTP 里 Global Account 的概念,下一篇文章我会介绍 SAP BTP 控制台里和 Global Account 相关的一些操作。,创建 SAP BTP 的 Trial,在可选 Region 列表里,在两个可选项中二选一,选择了。或订阅合同时,SAP BTP 会在后台为其生成一个对应的。在企业拥抱云原生架构的过程中,SAP BTP 的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 999

【51单片机仿真】基于51单片机设计的温湿度采集检测系统__资料编号11

该系统通过与AT89C51单片机、LCD1602显示屏和DHT11温湿度传感器的集成,实时读取环境中的温度和湿度数据并在LCD1602上显示这些信息,其中系统初始化LCD1602显示屏、通过DHT11_receive()函数接收并校验DHT11传感器的温湿度数据、使用LCD_ShowNum()函数逐位显示湿度和温度数据并在这些数据后附加相应的单位符号,以便用户可以直观地看到当前环境的温湿度情况。

嵌入式阿齐Archie 2万+

07_Z-Stack多节点组网及终端消息上报

​ 实现两个终端与协调器组网。

nanxl1的博客 590

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

zigbee系统篇——ZStack系统抽象层详解

了解硬件和更多资料可点击:点击了解 新建一个物联网行业交流学习QQ群,感兴趣可加:928840648 =====CUT===== *** 本章学习目的 *** 1)理解Z-Stack3.0系统抽象层(OSAL)。 2)掌握OSAL的使用。 4.1 OSAL的运行过程 OSAL也就是系统抽象层,其实并不是真正意义上的操作系统,不过实现了协议栈(ZStack)运行所必需的任务调度功能、内存管理、中断管理等基本功能。为了方便学习,我们将工程进行的裁剪,去除文档和附件,只留下协议栈的组件和工程文件:.

u010119959的专栏 1927

IEM模型,地表粗糙度模拟

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

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

F-Stack发送零拷贝介绍

数据包在服务器的处理分接收和发送两个方向,收包方向因为我们自己本身的业务场景涉及收包数据很少,后续另行介绍。本文主要介绍F-Stack发包方向上当前的零拷贝处理方案、效果和应用场景的选择,发包方向上的数据拷贝目前主要为两个阶段,一是协议栈数据拷贝到DPDK的rte_mbuf中,二是应用层调用socket发送接口时会将数据从应用层拷贝到FreeBSD协议栈,下面将分别进行介...

DNSPod 547

深度学习工具包 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")

Zephyr RTOS 启动流程深度解析

分层解耦:从硬件到应用,每层职责清晰安全优先:中断禁用直到系统就绪灵活扩展:多级初始化,便于驱动扩展资源高效:main stack复用为线程栈移植到新平台调试启动问题开发设备驱动优化启动时间都有重要意义。本文档基于Zephyr v3.7源码分析。

chen_chuang_的专栏 899

6G显存AI终端的Z-Image内核定制与启动优化

Z-Image是ARM64嵌入式Linux中支持自解压与地址重定位的轻量级内核镜像格式,其核心价值在于绕过Bootloader内存搬运依赖,实现启动确定性与物理内存精准管理。在国产AI边缘设备(如昇腾、寒武纪加速卡)普遍配备4–8G设备内存的背景下,Z-Image通过CONFIG_ARM64_PA_BITS和mem=6G等关键配置,使内核早期即可识别并纳入全部显存资源,避免传统vmlinuz因Bootloader解析缺陷或initrd干扰导致的内存不可见问题。该方案显著提升启动速度、降低内存开销,并满足信创

weixin_34318326的博客 388

Candle 框架入门导读:在 Rust 中构建极简机器学习应用的第一步

Candle 是一个以性能与易用性为核心、采用极简设计理念的 Rust 机器学习框架,本文是官方 Candle 文档(`candle-book`)引言章节的完整导读。通过阅读本文,你将理解 Candle 的设计目标与特性全景,掌握从零创建项目、完成第一个张量运算与 MNIST Hello World 模型、按需启用 CUDA/Metal/MKL 后端,并借助 PyTorch 速查表快速迁移到 Ru

gitblog_00506的博客 698

MPC5500 VLE开发实战:从原理到移植的深度解析

在嵌入式汽车电子领域,代码密度优化是提升系统性能和降低成本的关键技术之一。指令集压缩技术通过引入变长编码机制,允许在程序中混合使用不同长度的指令,从而有效减少代码体积,提升指令缓存命中率。其核心原理在于对常用简单操作采用更短的编码格式,在保持语义不变的前提下,显著节省存储空间。这项技术的工程价值在于能够直接降低片上Flash资源占用,从而控制BOM成本,尤其适用于资源受限的嵌入式系统。在汽车电子控制器、工业控制等对实时性和可靠性要求严苛的应用场景中,代码密度优化技术发挥着重要作用。本文聚焦于Power Ar

weixin_34319111的博客 469

微机原理复习

摘要:本文系统介绍了8086微型计算机体系结构,重点解析了冯·诺依曼体系五大部件和总线结构。详细阐述了8086CPU内部功能部件(BIU/EU)和寄存器组,包括通用寄存器、段寄存器的特殊用途。通过标志寄存器、寻址方式和汇编指令集的讲解,结合典型程序示例(如数组求和)演示了汇编编程方法。同时深入讲解了中断系统、I/O传输方式及可编程接口芯片(8255A、8254)的应用,最后提供了常见题型的解题思路。全文系统覆盖了8086微机原理的核心知识点,既包含理论基础又注重实践应用。

DrLuffy的博客 771

kernel启动流程-start_kernel的执行_4.mm_init

目录1. 前言2. mm_initpage_ext_init_flatmeminit_debug_pageallocreport_meminitmem_init 1. 前言 本专题文章承接之前《kernel启动流程_head.S的执行》专题文章,我们知道在head.S执行过程中保存了bootloader传递的启动参数、启动模式以及FDT地址等,创建了内核空间的页表,最后为init进程初始化好了堆栈,并跳转到start_kernel执行。 本文重点介绍start_kernel的mm_init的主要流程. ke

HZero 1488
上一篇: z-stack调试之ZDApp_init
下一篇: z-stack halprocesspoll与初始化
cucmakeit
博客等级 码龄14年 30粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值