使用VCS2008编译Windriver工程

Windriver生成cpci驱动程序知识点简单讲解 本文主要是讲解CPCI驱动的知识点。本人也是在学习中,欢迎大家来交流指正。 例程使用Windriver10.21生成cpci驱动,cpci桥芯片使用的是9054。 驱动知识点说明: 1.def和__declspec(dllimport)是两种导出方式。 __declspec(dllimport):兼容性强,但是在某些编译器,例如CVI会产生识别不了的修饰符。 所以在驱动中两种 阅读详情

前面折腾了那么久,现在终于可以进入代码阶段了。遵照Windriver的quick start guide,本文也以显卡为例。

首先:打开Windriver,找到目标设备:


显卡是不需要我们安装驱动的,因此不用生成inf,直接进入下一步操作即可。

Next:在Windriver主窗口中点击生成代码按钮:


本文选取的平台是C#,VS2008;至于是x86还是x64,根据需要吧。不失一般性,本文就以x86为例。点击OK,保存工程到指定目录。


从现在开始,转战Visual Studio。

打开VCS工程以后,发现解决方案中包含了两个工程,一个是lib【这个很重要】,另一个是diag【这个无所谓啦】。由于之前选取的是x86平台,因此需要把工程的编译环境改为x86。


Windriver不愿意把欢好事做到底,直接生成的工程里面总是有这样那样的问题。

那么,接下来,要做的是管理References:在lib工程中重新添加wdapi动态库。我使用的是【windriver11.7 评估版,因此dll位于C:\WinDriver\lib\amd64\v2.0.50727\wdapi_dotnet1170.dll】


现在,lib工程就可以成功编译了。以后要开发windows应用程序,都要用到这个lib.dll。再后面的事,就是新建一个应用程序,添加lib和wdapi两个引用:


然后,就发挥想象,编写你自己的应用程序吧。最后提醒一句,不要忘了把你目标程序也改为x86,以对应前面生成VCS框架时做的选择。


再加一句:一定要确保再调试程序的时候,关闭Windriver Wizard,因为Windriver生成的程序只能保证一个实例在操作硬件。

WindRiver编译小结 编译配置 工程石键属性, Build Properties 中 Build Macros下DEFINES下设置宏定义工程右键属性,C/c++ General下Indexer下Paths and Symbol里,IncludePaths框内Build点击左侧小三角即显示工程依賴头文件路径,其中带红色x的是不存在的路径,若想要添加或删除路径点击右侧Edit进入编辑界面,即可修改路径。工程石键属性,Build Properties 中Libraries中添加想要依赖的库。工程右键属性, Build Propert 阅读详情

相关推荐

WINDRIVER 11.50

Windows driver developing tools

2018WinDriver/Driver Wizar软件PCI通信转C#WinForm最全教程

2018WinDriver/Driver Wizar软件PCI通信转C#WinForm最全教程 先打开Driver Wizar 软件->选择需要进行通信的PCI设备->Next>> 然后试一下读写能不能成功,可以的话再进行下一步。 没问题的话就进行下一步吧,代码导出 点一下右上方的 Project->Generate Code->选择C#.NET (并且确定你要的版本,不清楚的话也可以不点,直接点击OK)## 这里也直接OK就行 !!要注意的一点!! 生成的路

weixin_44599955的博客 538

win10-32位系统下的PCIE运动控制卡的驱动开发示例-基于WinDriver14.21

win10-32位系统下的PCIE运动控制卡的驱动开发示例-基于WinDriver14.21 开发环境:VS2017 WinDriver版本:14.21 x86/amd64 OS: Windows 10 32位

基于WinDriver的64位驱动开发环境配置

由于项目需要,需要将此前在XP上实现的PCIE驱动移植到WIN7上来,此前用到的是VS+DDK的方案,相对来说比较复杂。 在刚着手移植工作,我采用的是框架是WDF+VS2012的方案,但由此生成的驱动文件无法成功安装到PC机上,这让我很是郁闷。 经过了两天的挣扎后,我决定转用WINDRIVER的方法,做过WINDOWS驱动的都会清楚,WINDRIVER会使开发进度得到提升,因为它的简易性。折腾了一

nszjh的专栏 8516

优刻得首个「国产千卡智算集群」落地,支持智源千亿大模型训练

在人工智能引领的时代浪潮中,算力已成为技术进步与创新的核心驱动力。面对当下AI算力需求的飙升、高端AI芯片供应受限的挑战,加之OpenAI带来的技术封锁,唯有坚定不移的发展自主可控的国产技术方案,持续壮大国产智算集群规模,才能一路突破围追堵截,进一步促进国产大模型产业生态繁荣。集群还提供了完善高效的软件栈工具,集成多种主流的深度学习编程框架,通过测试验证,确保了对行业领先人工智能模型的高效支持,做到开箱即用,用户可快速投入模型的开发和部署,加速了其在人工智能领域的布局和发展。方面取得了显著成效。

Ucloud_TShare的博客 1473

计算机视觉三大顶会(ICCV/CVPR/ECCV)投稿指南与趋势解析

本文详细解析计算机视觉三大顶会(ICCV/CVPR/ECCV)的投稿指南与最新趋势。从基础认知到实战经验,涵盖时间线管理、选题策略、论文写作技巧及实验设计要点,帮助研究者提升投稿成功率。特别关注2024年技术融合、评估维度和伦理要求等前沿趋势,为计算机视觉领域的研究者提供实用建议。

weixin_29165725的博客 1837

驱动程序(13) 将Windriver编写的程序制成DLL供其他程序调用

制作动态链接库(DLL) 之前的操作里,我通常是将写好的程序生成exe文件,运行来看结果如何;但是实际中往往驱动程序需要被上层软件调用,比如我现在利用windriver来完成DMA传输后,传输好的数据需要提供给上层软件继续使用,这时候将我们写好的程序做成DLL就会方便很多。 1. 改变主程序的配置类型 第一步我们需要改变主程序的配置类型,选择主程序的“项目->配置属性->常规->...

a4642313的博客 2044

浏览器Cookie迁移实战:从Chrome导出导入登录态全攻略

Cookie是浏览器保存的会话凭证,服务端通过Set-Cookie将登录态种在本地。迁移Cookie本质上是把服务端认可的会话标识搬到新环境,从而免去重复输入账号密码和二次验证的麻烦。在换电脑、切浏览器或重装系统时,掌握Cookie的导出导入技术能显著提升效率。Chrome与Edge同属Chromium内核,存储结构相似,但字段差异(如Domain、SameSite、Secure)常导致迁移失败。通过浏览器扩展或CDP脚本可实现跨浏览器登录态迁移,适用于内网后台、开发环境等场景。本文从原理到实践,梳理Coo

weixin_42533120的博客 340

使用windriver编写驱动常用的几个函数

函数原型DWORD DLLCALLCONV WDC_WriteAddr32(WDC_DEVICE_HANDLE hDev, DWORD dwAddrSpace,函数原型DWORD DLLCALLCONV WDC_PciGetDeviceInfo(WD_PCI_CARD_INFO *pDeviceInfo);函数原型DWORD DLLCALLCONV WDC_PciGetDeviceInfo(WD_PCI_CARD_INFO *pDeviceInfo);

htl123123456的博客 672

AMG8833红外测温实战:在STM32F103上做个简易人体感应与温度报警器

本文详细介绍了如何在STM32F103上使用AMG8833红外测温传感器构建人体感应与温度报警系统。通过硬件连接方案、驱动代码开发、人体检测算法实现及报警系统设计,展示了如何利用8x8红外温度矩阵实现智能监测功能。文章包含实用的初始化流程、温度数据读取优化和低功耗策略,为创客项目提供完整解决方案。

weixin_33725239的博客 393

机器人控制入门

机器人控制入门 对于工科领域来说,脱离实践的学习都是肤浅的,对于控制这种强调经验的技术更是如此。如果去问一个程序员怎么学习一块技术,他必然让你去多编程。机器人领域也是。如果想把基本功打扎实,那么实践更是必不可少了。 机器人控制有三个元素:控制器(算法),执行器(电机),传感器; 控制的本质就是将规划系统的指令作为输入信息,将传感器探测得到的状态信息和导航系统的定位

彼岸花 1万+

Windriver的VCS开发环境

折腾了一整天,终于能成功编译了。话说,WinDriver真操蛋,即使最新版的V11.7,配合Win7 x64和VCS2012,生成的C#工程虽然能够编译成功,但是运行时却总是报错[WDC_PciGetDeviceInfo()]等函数都找不到;硬件设备连接无法打开,更不用说数据读写了。 难道这是试用版的限制但想想也不应该,因为其提供的演示程序C:\WinDriver\csharp.net\pci_

WavesLine的专栏 2327

多天线技术:5G波束成形&空间复用&空时编码

以提升信号的可靠性。然而,在20世纪90年代中期,研究者们惊讶地发现,多天线技术不仅仅提供分集增益,还可以开启一些单天线系统无法实现的新机遇。,我们可以将信道矩阵 ( H ) 视为一个满秩矩阵,则理论上可以建立min(𝑁𝑇,𝑁𝑅)个独立的数据流,形成一个。波束成形是5G物理层的核心技术,其本质是利用多个天线来增强特定方向上的信号,同时抑制干扰方向的信号。:物理波束成形 = 🔦 类似手电筒的聚焦光束,虚拟波束成形 = 🌊 类似水波的相干叠加。随着 5G 和 6G 时代的到来,多天线技术的作用愈发重

weixin_43199439的博客 1389

WinDriver中的函数封装成类导出DLL

在开发pcie驱动时使用WinDriver10.2.1生成的驱动代码,将wd_lib.h提供的函数封装成类后将类导出为Dll,必须为DLL工程配置WinDriver的各种所需的头文件和lib库文件(wdapi1021.lib wdapi1021_32.lib wdapi1021_wow64.lib),之前导出类时只添加了第一个lib文件,一直报错:无法识别的外部符号,添加后两个库后,编译通过,类顺...

shuixiaowei0530的博客 1135

使用 Visual Studio Code 连接 ABAP On-Premise 系统做开发的详细配置步骤

本文详细介绍了如何在Visual Studio Code中通过ABAP Development Tools扩展连接ABAP On-Premise系统。关键步骤包括:通过Ctrl+Shift+P打开命令行面板选择「ABAP: New Destination...」创建RFC连接(仅支持SSO单点登录),选择本地SAPGUI中已有的系统,输入Client ID、语言和用户名(无需密码),最后将目标系统添加到工作区即可开始开发。文章强调了企业安全考虑下仅支持SSO的设计理念,并展示了连接配置的JSON格式示例。整

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

【DaVinci Developer工具实战】03 -导入xml文件

本文档描述了 DaVinci Developer 导入数据的的具体功能 ,它适用于导入AUTOSAR SWC 模板【AUTOSAR XML 文件】 文件。

1991

CVI调用VC封装WinDriver驱动的DLL

CVI调用VC封装WinDriver驱动的DLL(PCI驱动)WinDriver生成的代码是标准C的,CVI用的也是标准C,如果用VC封装成DLL就需要注意下面几点:1.     VC中的头文件中,输出文件需要用extern “C”修饰,否则不能被CVI调用。(因为CVI是标准C)2.     调用约定必须用__stdcall,因为驱动中可能要采用win32 API。3.    

寻 3800

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java线程安全和锁机制详解

[size=large]在开始这篇blog之前应该先了解几个概念:[/size] [b]临界区[/b]: 临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待(例如:bounded waiting 等待法),有一些同步的机制必须在临界区段的进入点与离开点实现,以确保...

小虫的博客 282

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

x86下vx6.8软件wind River workbench使用说明

1、领取软件开发环境,放到c目录下,打开C:\WindRiver\workbench-3.2\wrwb\platform\x86-win32\eclipse\wrwb-x86-win32.exe 可执行软件 2、领取BSP板级支持包,把BSP存放到C:\WindRiver\vxworks-6.8\target\config 目录下。 3、打开wrwb-x86-win32.exe软件,选择Project,创建一个VxWorks Image Project工程, 输入Project name 选择Next

jxcsnd的博客 5933

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WinDriver驱动程序开发入门教程

WinDriver驱动程序开发入门教程 Windriver是jungo公司的一款高效易用的驱动开发软件,方便用户基于此开发自己的驱动程序,而不需要对windows DDK作深入的研究。 Windriver相比driverstudio使用起来更为方便,同时,它支持windows、Linux、Vxworks、winCE、Solaris等OS,对于当前流行的硬件设备,如:端口、ISA、PCI(-X, -E)、PCMCIA、USB等都有很好的支持。作为驱动开发的入门工具,windriver是很好的选择。 Incl

qq_22326895的博客 1万+

如何使用WinDriver为PCIe采集卡装驱动

如何使用WinDriver为PCIe采集卡装驱动 第一步:使用WinDriver生成驱动 1.运行Drier Wizard 2.点击New host driverproject 3.在列表中,选择待安装驱动的设备,这里选择基于PCI的Xilinx数据采集卡 4.点击Generate .INF file控件 5.在弹出的口中,可以看到待安装驱动的设备,

分享的滋味 1万+

windriver下的WDC_DMAContigBufLock函数和WDC_DMASGBufLock函数的区别

对于DMA内存的分配主要有俩种,但是不管如何目的是找到。(对于什么是dma就没必要解释了) 代开发: https://blog.youkuaiyun.com/u013372900/article/details/97004166 一般来说我们在底层分配分配一块大的内存的(所谓底层是指物理地址,而不是通过操作系统的页式管理的虚拟地址),由于Dma的底层传输的实现是基于系统总线的物理地址。...

张飞online博客 3118

关于windriver WD_NO_LICENSE错误和解决办法

工作上需要在win7上操作pci板卡,使用windriver生成C#驱动代码的方式实现。但是在用的过程出现一个奇怪的问题,每次电脑重启之后,在第一次调用windriver生成的驱动库时会报错。打开一遍windriver的driver wizard之后又不报错了。 调试发现时调用TheDeviceList()返回的对象中的init()方法时出错,错误码为536870921。去错误码定义(WD_ERROR_CODES类)里头翻了翻,这个码对应的错误是WD_NO_LICENSE。应该是由于没有注册程序导致的,在第

weixin_42694709的博客 2507

CVI直接调用WinDriver驱动

  CVI直接调用WinDriver生成基于C语言的驱动框架(PCI驱动)1.     建立CVI工程将WinDriver生成的xxx_diag.c、xxx_lib.c和xxx_lib.h加入工程。2.     将../windriver/sample/shared/pci_diag_lib.c加入工程,将../windriver/lib/wd_utils.lib库加入工程。3. 

寻 2409
上一篇: Windriver的VCS开发环境
下一篇: 打开,关闭设备
WavesLine
博客等级 码龄12年 18粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值