DM368开发 –IPNC 设置过程[通俗易懂]

DM368开发 –IPNC 设置过程[通俗易懂]第一步: IPNC 安装:安装软件包,解压后包含以下组件:1. IPNC_RDK_DM36x_Version3.1.0.tar.gz:这是linux tar文件,需要解压在linux机器。这是主要tar文件IPNC RDK安装。这个包含在以下文件 预构建二进制文件Dm36x平台 配套文献 源代码构建IPNC的RDK所需 硬件包和BoM,图表和Gerber文件        实用程序文件像凝

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

参看:Appro DM36x IPNC 4.0 开发环境配置

第一步: IPNC 安装:

安装软件包,解压后包含以下组件:

1. IPNC_RDK_DM36x_Version3.1.0.tar.gz:

这是linux tar文件,需要解压在linux机器。这是主要tar文件IPNC RDK安装。这个包含在以下文件

预构建二进制文件Dm36x平台

配套文献

源代码构建IPNC的RDK所需

硬件包和BoM,图表和Gerber文件

        实用程序文件像凝胶,Nand-programmer等等

2. ImageTuningTool_DM36x_Version2.1.0.zip:

这是一个图像优化工具软件包用于优化IPNC图像质量。需要解压缩和用于Windows电脑。它包含以下

图像优化工具安装程序(imagetunningtool – 2.1安装程序

MCR安装程序(MCRInstaller.exe)。这个需要安装安装图像优化工具

3. GUI_VideoPlayer_SDK_Version2.0.30.zip:

这个SDK工具集,需要开发web GUI屏幕和ActiveX的播放器。这需要解压缩和用于Windows电脑。

GUI文件夹包含所有源代码、文档和公用事业构建web GUI屏幕

播放器文件夹包含所有源代码,文档和msys依从者/公用事业需要构建ActiveX视频播放器

业务Model-v3.1 GUI。pdf包含详细的业务TI和GoDB科技之间的模型

4. UserGuide_IPNC_RDK_DM36x.pdf:

业务Model-v3.1 GUI。pdf包含详细的业务TI和GoDB科技之间的模型

5. Release_Notes_IPNC_RDK_DM36x.pdf:

细节特征补充说,已知问题,版本细节,bug修复等

IPNC_RDK_DM36x_Version3.1.0.tar.gz的安装流程:

1. 拷贝IPNC_RDK_DM36x_Version3.1.0.tar.gz 到你的linux系统安装目录

2. 使用下面的命令将文件解压

tar  -zxvf IPNC_RDK_DM36x_Version3.1.0.tar.gz

成功将命令解压,文件将生成

Appro_IPNC_RDK_DM36x_v3.1.0.tar.gz

OpenSrc_IPNC_RDK_DM36x_v3.1.0.tar.gz

PrivateTI_IPNC_RDK_DM36x_v3.1.0-Linux-x86-Install.bin

3. 运行文件 “PrivateTI_IPNC_RDK_DM36x_v3.1.0-Linux-x86-Install.bin”

通过安装保护在一个特定的安装目录。

./PrivateTI_IPNC_RDK_DM36x_v3.1.0-Linux-x86-Install.bin

他将会安装 PrivateTI_IPNC_RDK_DM36x_v3.1.0.tar.gz 在选择的位置

用户需要接受许可成功安装

4. 提取/解压文件 “PrivateTI_IPNC_RDK_DM36x_v3.1.0.tar.gz” 在安装目录

 tar  -zxvf PrivateTI_IPNC_RDK_DM36x_v3.1.0.tar.gz

5. 提取/解压文件 “OpenSrc_IPNC_RDK_DM36x_v3.1.0.tar.gz” 上面的步骤安装目录的上面

  tar  -zxvf OpenSrc_IPNC_RDK_DM36x_v3.1.0.tar.gz

6. 提取/解压文件 “Appro_IPNC_RDK_DM36x_v3.1.0.tar.gz” 上面的步骤安装目录的上面

  tar  -zxvf Appro_IPNC_RDK_DM36x_v3.1.0.tar.gz

需要这个将三个文件放到一起解压,如此才能合并. 到此安装完成。

第二步: 修改下面位置的 Rules.make 

<installDir>/Source/ipnc_rdk

如:/Release/Source/ipnc_rdk 

参考下面的设置

#SYSTEM := EVM

SYSTEM := IPNC

#这是用于选择硬件平台

 

#IPNC_PLATFORM := DM365

IPNC_PLATFORM := DM368

#这是用于选择芯片ID

 

#FILESYS_MODE := NFS

FILESYS_MODE := NAND

#这是用于选择模式运行的文件系统

 

IMGS_ID := IMGS_MICRON_MT9P031_5MP

#这是选择使用的传感器类型


13)如果你的登录并不是root模式,然后使用以下命令登录在安装过程中避免错误 

(我的是root模式登录的不需要修改了)

chmod -R a+rwx < IPNC_INSTALL_DIR >

chown -R <useracct> < IPNC_INSTALL_DIR >

where,

< useracct > 是你的宿主LINUX电脑上用户的登录ID。

< IPNC_INSTALL_DIR > 您设置的目录在 Rules.make.


14) 移动到Rules.make所在的安装目录

cd $(IPNC_INSTALL_DIR)/ipnc_rdk

例如: cd/Release/Source/ipnc_rdk


15) 使用下面的命令编译:

make sysall

 

他会拷贝到linux 内核 < TFTP_HOME > 目录下生成“uImage_ipnc_dm36x”.

此外,它使波形的的副本到 ti davinci/arch/arm/boot/ 目录下的文件 uImage.

同时,也会将所有IPNC文件可执行文件复制到文件系统,提到到输出目录位于(EXEC_DIR)设置

$(installDir)/Rules.make


说明:可以使用以下命令基于期望的功能:

IPNC增量构建的应用程序 — “make”

清除IPNC应用程序构建 — “make clean”

重建整个IPNC应用程序 —  “make all”

对于增量Linux构建  — “make lsp”

清除Linux构建 —  “make lspclean”

重建整个Linux —  “make lspall”

对于增量DVSDK构建 —  “make dvsdk”

清除DVSDK构建 — “make dvsdkclean”

重建整个DVSDK — “make dvsdkall”

增量构建的系统 — “make sys”

干净的系统构建 —  “make sysclean”

重建整个系统 —  “make sysall”

 

“make”命令将只包括构建IPNC应用程序。

“av_capture”和“ipnc_app”文件夹中。它还将复制所有IPNC文件可执行文件到文件系统

“sysall” ,”sysclean” and “sys” 构建选项将构建DVSDK,Linux和IPNC应用程序

 

17)可以使用以下命令生成的文件系统:

make squashfs

这将从< TFTP_HOME > 目录下复制的文件系统 “ipnc_dm36x_squashfs”

PS: 整个包是安装了ubuntu 10.04 LTS的构建和测试在主机电脑

我们建议用户检查之前,创建一个链接后安装Linux操作系统电脑方面避免编译时错误

执行make sysall 出现错误,显示交叉编译器没有安装

第三步:安装CCS交叉编译器 arm_v5t_le-

下载链接:http://pan.baidu.com/s/1hrwP5Uc 密码:ydpk

执行安装:(选择安装在 /opt/mv_pro_5.0.0目录下

./mvl_5_0_demo_sys_setuplinux.bin 

解压tar -xvf mvltools5_0_0801921_update.tar.gz 

最后查看 ls  /opt/mv_pro_5.0.0/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-gcc  

第四步: 设置交叉编译器环境变量:

cd /root  

gedit .bashrc 

在最后一行添加:

PATH=”/opt/mv_pro_5.0.0/montavista/pro/devkit/arm/v5t_le/bin:

/opt/mv_pro_5.0.0/montavista/pro/bin:

/opt/mv_pro_5.0.0/montavista/common/bin:$PATH”

保存

source  .bashrc  //命令立即生效

第五步: 修改配置文件Rules.make

进入/home/zslf/dm368/dvsdk_dm368_4_02_00_06/psp/Release/Source/ipnc_rdk# 

执行 gedit Rules.make 

更改第75行,将

BUILD_TOOL_DIR     := /data/datalocal_videoapps01/ipnc_tools/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le

改为:BUILD_TOOL_DIR     := /opt/mv_pro_5.0.0/montavista/pro/devkit/arm/v5t_le

自动编译uboot

切换到【解压目录】/Release/Source/ipnc_rdk下使用下列命令编译安装:

make uboot clean

make uboot

编译完成后,会自动将uboot_xxxx.bin文件复制到【解压目录】

/Release/Source/ipnc_rdk/Rules.make文件中

TFTP_HOME所标示的tftp目录下。

手动编译 uboot

切换到【解压路径】/Release/Source/dvsdk_ipnctools/ipnc_psp_03_21_00_04/u-boot目录下

使用下列命令编译uboot:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- davinci_dm368_ipnc_config

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

手动内核编译

切换到【解压路径】/Release/Source/dvsdk_ipnctools/ipnc_psp_03_21_00_04/ti-davinci目录,使用命令:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- distclean

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- clean

清空源配置文件和原编译文件;

使用下列命令之一复制默认的配置文件:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- davinci_dm368_ipnc_defconfig

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- davinci_dm368_ipnc_defconfig_nand

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- davinci_dm368_ipnc_defconfig_nfs

使用下列命令修改配置:

make  ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- menuconfig

使用下列命令进行内核编译:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

编译时,如果提示无规则生成csl.o/ drv.o / edmak.o / irqk.o / dm365mmap.o / cmemk.o,请将编译好的csl.o& drv.o & edmak.o & irqk.o & dm365mmap.o &cmemk.o文件复制到【解压路径】Release/Source/dvsdk_ipnctools/ipnc_psp_03_21_00_04/ti-davinci/drivers/char/目录下,这些文件请到【解压路径】

/Release/Source/dvsdk_ipnctools/linuxutils_2_26_02_05/packages/ti/sdo/linuxutils/目录和【解压路径】/Release/Source/dvsdk_ipnctools/dm365mm-module_01_00_03/module/目录和【解压路径】/Release/Source/ipnc_rdk/av_capture/framework/目录去找。

编译完成后,内核文件uImage在【解压路径】

/Release/Source/dvsdk_ipnctools/ipnc_psp_03_21_00_04/ti-davinci/arch/arm/boot下。

/home/zslf/dm368/dvsdk_dm368_4_02_00_06/psp/IPNC/Source/ipnc_rdk# make sysall

然后编译的时候会出错

find . -name drv_audio.c

./av_capture/framework/drv/usermod/src/drv_audio.c

我将这个alsa/asoundlib.h 注释掉再试试

在ipnc_app/sys_server/src/av_server_ctrl.c

有两个参数pConfig -> nVideocodecmode 和pConfig -> nVideocodecres

其中,pConfig -> nVideocodecmode是设置编码方式的,

      pConfig -> nVideocodecres   是设置分辨率信息的

例如: ./av_server.out DM368 NTSC 1080P H264 4000000 VBR AUTO MENUOFE & InitAV_Server begin

应用程序编译完生成文件在  /opt/ipnc_rdk/target/filesys/opt/ipnc

执行脚本

#! /bin/sh

DVEVMDIR=/opt/ipnc

cd  $DVEVMDIR

./system_server &

$DVEVMDIR/beforeloadkmodule.sh

$DVEVMDIR/loadkmodules.sh

$DVEVMDIR/loadmodules_ipnc.sh

ifconfig lo 127.0.0.1

cd  $DVEVMDIR

./boot_proc 1

$DVEVMDIR/autorum.sh

mount devpts /dev/pts -t devpts


ifconfig lo 127.0.0.1

就是系统本身的IP。可在没联网情况下用于网络测试。

比如我的电脑做为网页服务器,但我没联网,没有内网和外网IP。就可以在浏览器中输入127.0.0.1测试。

 

1. 内核添加MT9P031  

make menuconfig   

Prompt: mt9p031 support      Location:                                                                                                        -> Kernel configuration                                                                                             -> Device Drivers                                                                                                   -> Multimedia support (MEDIA_SUPPORT [=y])                                                                          -> Video capture adapters (VIDEO_CAPTURE_DRIVERS [=y])

 

2. 在 /arch/arm/mach-davinci/board-dm368-leopard.c:下的 static struct vpfe_subdev_info vpfe_sub_devs

添加MT9P031

uboot启动信息

(11设置U.boot参数:

#setenv bootargs console=ttyS0.1 15200n8 rw mem254M vide02 davincifb:vidO=

OFF:vidl=OFF:osd0=720x576x 1

6,4050K dm365_imp.opermode=O davinci—

capture.device_type2l vpfe_capture.interfaee=l vpfe_capture.con_bufsize=6291456

root=/dev/nfsnfsroot=192.168.0.138:/root/targeffs ip=192.168.0.60:192. 168.0.1:

255.255.255.0

注意,这里需要设置oper mode为0,表示IPIPE Resizer的模式为Continuous Mode,

同时设置device 为1,表示采集设备为.type MT9P031


 vpfe_capture.interface=2

 for TVP7002 (default)

  vpfe_capture.interface=1

 for Micron sensor – MT9T031

  vpfe_capture.interface=0

 for TVP5146


davinci_capture.device_type=0表示使用TVP5146采集

davinci_capture.device_type=1表示使用MT9P031采集,

davinci_capture.device_type=2表示使用TVP7002采集


问题解决:

我是在内核中去除掉的,在board-dm368-ipnc.c文件中:

static struct davinci_nand_pdata davinci_nand_data = {

        .parts                  = davinci_nand_partitions,

        .nr_parts               = ARRAY_SIZE(davinci_nand_partitions),

        //.ecc_mode             = NAND_ECC_HW,

        .ecc_mode               = NAND_ECC_NONE,

        .options                = NAND_USE_FLASH_BBT,

        .ecc_bits               = 4,

};


IPNC 设置

Hi Marko,

Thanks for your help.  Late last night I tried the same thing, and deleting the .depend file worked.  I only had one.  For the benefit of those about to try SDK 5.0, here are the steps needed from a clean Linux install (I used Ubintu 12.04):

For the benefit of those seeking help later, the following are the steps needed in addition to the User’s Guide to build the SDK:

1) Install Ubuntu 12.04 LTS 32-bit (didn’t try the 64-bit version)

2) Install Bison (needed to build SDK)

3) Install Flex (needed to build SDK)

4) Install acl library (needed to build file system) (sudo apt-get install libacl1-dev)

5) Install zlib library (needed to build file system) (sudo apt-get install zlib1g-dev)

6) Install lzo library (needed to build file system) (sudo apt-get install liblzo2-dev)

7) Install uuid library (needed to build file system) (sudo apt-get install uuid-dev)

8) Enable “su” (sudo passwd root)

9) Install SDK per instructions in User’s Guide

10) Version 5.0 of the SDK includes a hidden file that will cause your build to fail.  Using whatever file manager your choose (for example, Nautilus under Ubuntu 12.04), enable viewing of hidden files (View | Show Hidden Files), navigate to <whatever your IPNC install directory>/Source/ipnc_rdk/ipnc_app/network/boa-0.94.13/src.  Locate the file .depend and delete ONLY this one file.

10) As “su”, move to your target directory, (cd <whatever your IPNC install directory>/Source/ipnc_rdk/target), and un-tar the filesystem (tar -zxvf filesys_ipnc_dm36x.tar.gz)

11) As “su”, run “make sysall” per the instructions in the User’s Guide.

11) If the make fails with uImage not being built, the mkimage file cannot be accessed. As “su”, cp <whatever your IPNC install directory>/dvsdk_ipnctools/ipnc_psp_03_21_00_04/u-boot/tools/mkimage /usr/bin/mkimage  (note: the name of the ipnc_psp directory in this command may change based on version number, see Rules.make

12) re-run “make sysall”  (if necessary)

13) After the “make sysall” completes, the file system needs to be built.  The User’s Guide indicates this can be done with “make ubifs”, however the makefile for this is broken.  “make ubifsall” was an option in Version 4.1 of the SDK, but this has been removed, as the binaries for creating the file system have been pre-built and no source is provided.  These binaries are not true Linux executables and do not accept leading path names, which breaks the makefile.  My workaround is to copy the binaries mkfs.ubifs and ubinize from <whatever your IPNC install directory>/Source/ipnc_rdk/target/mtd-utils/64bit to <whatever your IPNC install directory>/Source/ipnc_rdk, and edit the makefile located in <whatever your IPNC install directory>/Source/ipnc_rdk as follows:

Under the label ubifs:

Change this –

ubifs: 

ifeq ($(HARDWARE_CFG), dm365) 

    $(UBIFS_PATH)/mkfs.ubifs -r  $(TARGET_FS) -m 512 -e 15360 -c 1662 -o ubifs.img 

    $(UBIFS_PATH)/ubinize -o $(SYSTEM_CFG)_$(HARDWARE_CFG)_ubifs -m 512 -p 16KiB  $(HARDWARE_CFG)_ubinize.cfg 

else 

    $(UBIFS_PATH)/mkfs.ubifs -r $(TARGET_FS) -m 2048 -e 126976 -c 313 -o ubifs.img 

    $(UBIFS_PATH)/ubinize -o $(SYSTEM_CFG)_$(HARDWARE_CFG)_ubifs -m 2048 -p 128KiB  $(HARDWARE_CFG)_ubinize.cfg 

endif 

To this –

ubifs: 

ifeq ($(HARDWARE_CFG), dm365) 

    mkfs.ubifs -r  $(TARGET_FS) -m 512 -e 15360 -c 1662 -o ubifs.img 

    ubinize -o $(SYSTEM_CFG)_$(HARDWARE_CFG)_ubifs -m 512 -p 16KiB  $(HARDWARE_CFG)_ubinize.cfg 

else 

    mkfs.ubifs -r $(TARGET_FS) -m 2048 -e 126976 -c 313 -o ubifs.img 

    ubinize -o $(SYSTEM_CFG)_$(HARDWARE_CFG)_ubifs -m 2048 -p 128KiB  $(HARDWARE_CFG)_ubinize.cfg 

endif 

Saving the makefile and running “make ubifs” as “su” will now produce the file system, placing it in the proper directory based on your architecture.

I hope this helps…

tftpboot 0x80700000 ubl_432arm_340ddr_ipnc_dm368.bin

nand erase 0x080000 0x08000

nand write 0x80700000 0x080000 0x08000

 

tftpboot 0x80700000 u-boot-1.3.4-dm368_ipnc.bin

nand erase 0x160000 0x28000

nand write 0x80700000 0x160000 0x28000

 

tftpboot 0x80700000 diagnostic_ipnc_dm368.bin

nand erase 0x360000 0x30000

nand write 0x80700000 0x360000 0x30000

 

tftpboot 0x80700000 uImage_ipnc_dm368

tftpboot 0x82000000 ipnc_dm368_ubifs

nand erase 0x500000 0x400000

nand write 0x80700000 0x500000 0x400000

nand erase 0x900000 0x2800000

nand write 0x82000000 0x900000 0x2800000

 

setenv bootcmd ‘nboot 0x80700000 0 0x500000;bootm

0x80700000′

 

setenv bootargs ‘mem=48M console=ttyS0,115200n8

noinitrd rw ubi.mtd=3,2048 rootfstype=ubifs

root=ubi0:rootfs cmemk.phys_start=0x83000000

cmemk.phys_end=0x88000000 cmemk.phys_start_1=0x00001000

cmemk.phys_end_1=0x00008000 cmemk.pools_1=1×28672

cmemk.allowOverlap=1 cmemk.useHeapIfPoolUnavailable=1

nohz=off highres=off clocksource=acpi_pm lpj=1077248

eth=$(ethaddr)’

saveenv

reset


setenv bootargs mem=48M console=ttyS0,115200n8 root=/dev/nfs nfsroot=192.168.115.248:/opt/ipnc_rdk/target/filesys rw ip=192.168.115.140:192.168.115.255:192.168.115.1:255.255.255.0 cmemk.phys_start=0x83000000 cmemk.phys_end=0x88000000 cmemk.phys_start_1=0x00001000 cmemk.phys_end_1=0x00008000cmemk.pools_1=1×28672 cmemk.allowOverlap=1  cmemk.useHeapIfPoolUnavailable=1 eth=$(ethaddr)


setenv bootargs mem=48M console=ttyS0,115200n8 noinitrd ip=192.168.2.194:192.168.2.76:192.168.2.1:255.255.255.0 rw ubi.mtd=3,2048 rootfstype=ubifs root=ubi0:rootfs cmemk.phys_start=0x83000000 cmemk.phys_end=0x88000000 cmemk.phys_start_1=0x00001000 cmemk.phys_end_1=0x00008000 cmemk.pools_1=1×28672 cmemk.allowOverlap=1 cmemk.useHeapIfPoolUnavailable=1 nohz=off highres=off clocksource=acpi_pm lpj=1077248 eth=$(ethaddr)


setenv bootargs dm365_imp.oper_mode=0 mem=48M console=ttyS0,115200n8 noinitrd rw ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs vide0=davincifb:vid0=OFF:vidl=OFF:osd0=720x576x16,4050K dm365_imp.oper_mode=0 davinci_capture.device_type=l vpfe_capture.interface=l vpfe_capture.cont_bufsize=6291456 ;


./encode -zxl -v t.264 -I 4 -y 3 -b 1000 -f -w

 

./encode -v t.264 -I 1 -y 2


DM368开发 --IPNC 设置过程[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170236.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • JMeter下载安装及入门教程

    JMeter下载安装及入门教程目录JMeter介绍准备工作JMeter下载及环境配置下载环境配置JMeter中遇到的乱码问题JMeter介绍(参考:http://www.importnew.com/13876.html)JMeter使用了不同技术和协议,是一款可以进行配置和执行负载测试、性能测试和压力测试的工具。负载测试、性能测试和压力测试概念: 负载测试:这类测试使系统或者应用程序在…

  • java和前端哪个好学_java和前端哪个难学?「建议收藏」

    java和前端哪个好学_java和前端哪个难学?「建议收藏」不是同一样东西,无法比较。Java和JavaScript哪个难学?前端和后端哪个难学?问Java和前端哪个难学,就像在问牛排和中餐哪个好吃一样。Java是门编程语言,前端是一个领域不能相比较。再回到正题。Java和JavaScript哪个难学?答案是各有各的难。仅仅对于一门编程语言而已,难也难不倒哪里去。你能说语法很难吗?你能说面向对象很难吗?理解了也没有那么难吧。我大学…

  • Delphi 2007体验!

    Delphi 2007体验!

  • copy与deepcopy_java clone 深拷贝

    copy与deepcopy_java clone 深拷贝说到复制方法,在开发程序中要怎么复制呢?其实复制Java数组的方法很多,但大多数都是浅层复制,今天爱站技术频道小编带你寻找详解JAVA深层拷贝DeepCopy的使用方式。方法实现很简单,提供两种方式:一种是序列化成数据流,前提是所有对象(对象中包含的对象…)都需要继承Serializable接口,如果都继承了那很容易,如果没有继承,而且也不打算修改所有类,可以用第二种方式。第二种是将对象序…

  • lmdb_lmdb数据库

    lmdb_lmdb数据库为什么80%的码农都做不了架构师?>>>…

  • jquery输入数字随机抽奖特效

    简介:jQuery自定义数值抽奖活动代码是一款点击开始按钮计算机会产生玩家输入范围内的随机数,点击停止按钮,将显示数字最终结果的效果。效果展示 http://hovertree.com/te

    2021年12月26日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号