技术标签: 经验分享 人工智能 目标跟踪 嵌入式硬件 arm
目录
最近心血来潮,准备开始写博客,由于距上次配置环境事时间已经过去快一年了,因此算是一次对自己的总结吧,下面具体介绍配置环境前首先说一句:做好心理准备,你和妙算可能只能活一个(不是你把它砸了就是他用各种各样的问题把你气死了)。
这里是在Manifold-2G型号的妙算上刷Ubuntu18.04系统,系统用的是官方内测版V0.4.4.0版本,官方网站只提供16.04版本,如果要用18.04需要自己注册SDK账号然后去找客服要,我是失败了,但是我的导师要到了,这里放两个图,一个是我给大疆官方去的邮件,另一个是大疆客服的回复,算是帮大家避坑了,像我这样是要不到的:
此部分完全遵循大疆给的官方指导手册(妙算 Manifold 2 - 使用说明 v1.0):
https://www.dji.com/cn/manifold-2/downloads?site=brandsite&from=insite_search
官方文档中说需要在Ubuntu16.04的系统中去刷,但是实际操作好像没有系统限制,18.04和20.04好像有一个可以,这里记不太清了,大家自己去试吧,不想试的就用16.04吧,16.04刷了快10遍都没出现问题。
首先要准备一个台式机,安装Ubuntu16.04系统,然后将妙算2的SD卡里面的内容记得备份,否则哭都没地方哭。主机和妙算2靠USB3.0的线进行连接,这里要注意,主机这边数据线不能插在USB3.0的接口上,只能插在2.0的接口上。
然后组装妙算2,将电源模块1号口连接在妙算2上靠近13.2V侧的电源口,启动模块连接至I/O口,USB3.0模块连接至妙算2靠近网口一侧的USB口上,插上电源线但是不要通电,利用USB3.0的数据线将妙算2插至主机上,具体的连接线看图:
USB3.0的数据线就插在USB插口上就好,建议插在第二张图中蓝色的那个口,让两个主机直接连接,防止中间的USB扩展坞出什么幺蛾子。
搞完硬件就该搞软件了,首先将名为manifold2G_image_V0.4.4.0.tar.gz的压缩包(官方给的)解压:
sudo tar -zxvf manifold2G_image_V0.4.4.0.tar.gz
这里不论是不是用官方的镜像都需要用新解压的文件夹,好像是烧录过的文件夹中会改变一些东西,但具体是啥也不清楚。
这里就要考验手速了,建议先将接下来的一整段看完,然后一次性操作。
首先插上妙算2的电源,此时妙算2会自启动,听到风扇转的时候就马上按住启动模块上的RCV键,然后不要松手继续按住RST键,等待2秒后一起松开两个按键。 (一次性操作到此为止)
上面是官方文档给的进入恢复模式的方法,接下来利用下面的命令查找主机是否识别到秒算2:
lsusb
输出中如果有一行是类似这样的(其中的编号可能不同,重点看最后NVidia Crop):
Bus 001 Device 006: ID 0955:7020 NVidia Crop.
那么就说明主机识别到了妙算2,你就可以进行烧录了。
在主机上进入解压后的文件夹Linux_for_Trgra,在此文件夹下开个终端,执行下面的命令:
sudo ./flash.sh jetson-tx2 mmcblk0p1
如果出现下面的命令就说明烧录成功了,否则就删除整个妙算2文件夹,然后硬件不用动,软件从解压文件开始继续:
(整个过程大概会持续20分钟左右,时间不确定,因为整个过程风扇一直在降温,因此只要听到风扇声音彻底停了就代表烧录结束了,这中间可以干点自己的事情)
妙算2在烧录成功后会自启动,因此可以听到风扇停了一下后又转起来了,然后又停下。此时妙算2已经开机了,如果连着屏幕的话可以用鼠标点屏幕上的关机键关机,我这里因为屏幕和主机离得较远够不到,此时勇敢一点,直接拔电源线,相信国产的质量!
接下来连接好妙算2的连接线(鼠标、键盘、摄像头、网线、屏幕线):
开机后看到这样的图且键鼠能正常使用就大功告成了:
妙算2出厂时应该配了一张128G的内存卡,接下来要将张卡挂载到home,如果不挂载的话只能使用32G的内存,装一点东西就不够了(但是现在回忆起来当时的决定并不是最优的,应该是在home下面新建一个work文件夹,然后在文件夹中进行操作,这样的话内存使用起来就不会乱,也能保证home下比较干净)。
步骤1:查看分区情况:
sudo fdisk -lu
大疆官方给的密码是dji。找到SD卡:
步骤2:对内存卡进行分区:
sudo fdisk /dev/sda1
然后在输出的冒号后面分别按顺序输入下面的内容,每个字母输入完后都需要按回车:
- 输入m查看帮助;
- 然后输入d,删除已有的分区;
- 输入n,新建分区,全部选择默认,不更改;(此处内部可以选择要将SD卡分成几个区,但是具体内容记不住了)
- 输入m查看帮助;
- 输入w,保存配置退出;
步骤3:这些都完成后重启,之后再次通过下面命令查看分区,就能找到SD卡了:
sudo fdisk -lu
步骤4:格式化分区,之前用的是16.04,挂载过这张卡,但是刷了18.04后不格式化好像也挂载不了:
sudo mkfs -t ext4 /dev/sda1
步骤5:在/mnt下新建home文件夹:
cd /mnt/ sudo mkdir home
步骤6:查看SD卡是否已经自动挂载,正常来讲重启后妙算2应该就可以识别到SD卡了,所以会自动挂载:
sudo mount
如果可以看到有一个100多个G的分区的话就是自动挂载了,此时需要用命令卸载:
sudo umount /dev/sda1
步骤7:将文件夹挂载至/mnt/home下:
sudo mount -t ext4 /dev/sda1 /mnt/home
此时有可能会遇到错误:
不要慌,利用下面的命令行解决(此处应该是没格式化SD卡导致的):
sudo chmod 777 /mnt sudo apt-get install nfs-common
步骤8:将home下的东西全部复制到我们准备挂载的home文件夹下:
sudo cp -a /home/* /mnt/home/
步骤9:设置开机挂载,记得先给文件权限:
sudo chmod 777 /etc/fstab sudo vim /etc/fstab
然后在最后一行加入如下命令并保存退出(但说实话,还是喜欢用gedit打开,毕竟gedit更像windows的记事本):
/dev/sda1 /home ext4 defaults 0 1
步骤10:挂载fstab文件中未挂载的分区(其实就是挂SD卡),然后重启:
sudo mount -a df -h reboot
接下来就可以在home下胡搞了。
注意,因为Manifold-2G是ARM架构的,和普通的主机x86_64的架构是不一样的,因此不能按照x86的方式进行换国内源,两者在source.list文件中输入的内容是不一样的!
首先备份原文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
然后用文本编辑器打开source.list文件:
sudo gedit /etc/apt/sources.list
将source.list里面的内容全部删掉或者注释掉(保险一点的做法),更换为下面的内容:
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted
记得保存然后退出。(换源的时候打开文本编辑器的终端会出现警告窗口,此处不用管他,直接就是干)
最后更新源文件:
sudo apt-get update
此处就可以了。
此处不要想着用下面这条命令!!!!
sudo apt-get upgrade
这条命令用过之后的效果就是鼠标失灵或者键盘失灵或者键鼠一起失灵!!!
首先安装pip:
sudo apt-get install python3-pip
此处一定要带着3,因为妙算2中预装了两个版本的python,不加3就装到python2.7下面了。完成后电脑里应该会有9.0.1版本的pip。
其次pip换国内源:
这里要在home文件夹下操作:
mkdir ~/.pip # 建一个隐藏文件夹
vim ~/.pip/pip.conf # 创建地址文件,vim用不习惯的建议直接用gedit,效果一样
打开pip.conf文件,并将下列内容复制进pip.conf中:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
此处和x86主机上是一样的。
最后升级pip版本:
pip3 install --upgrade pip
完成后我这里pip版本升级至21.3.1(这里目前显示此版本是可以适配的最高版本了,后续版本不知道还是不适配TX2,可以试一下)
sudo apt-get install -y nano curl
sudo apt-get install -y python3-pip python3-dev
sudo apt-get install -y python-pip
sudo apt-get install -y python-setuptools
sudo apt-get install -y python3-setuptools
sudo apt-get install -y python3-opencv
sudo apt-get install -y libcanberra-gtk0 libcanberra-gtk-module
pip3 install -U pip
pip install -U pip
pip3 install setuptools wheel Cython
pip install setuptools wheel Cython
此处要一条一条按顺序执行,apt-get会互锁(同一时间只能执行一条apt-get命令),里面应该是有一些没用的命令,但具体是哪几条记不太清了。
此处我们安装的是torch1.8.0+torchvision0.9.1(我配环境的时候torch3.6的轮子版本最高就是1.8.0,现在已经可以支持1.10.0的轮子了)
首先下载torch的轮子看好对应的python语言版本,妙算2上python3的版本是3.6.9,因此需要找JetPack4.4下的python3.6对应的文件,地址在这:
https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048
ARM架构下的torch是专用的,和pytorch.org官网下载的版本是不一样的,安装官网版本会报错!!
将文件放在home下,然后执行:
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
pip3 install numpy torch-1.8.0-cp36-cp36m-linux_aarch64.whl
一定要验证安装后的torch是否能够正常调用!!!否则代码运行不起来!!!
开个终端:
python3
import torch
torch.cuda.is_available()
此处显示True则证明安装正常,显示False或者中间有报错证明调用有问题,但是不一定是安装的问题,可以先输入exit()退出,然后输入:
export OPENBLAS_CORETYPE=ARMV8
然后再执行上面的调用测试,然后执行
exit()
退出python3。为了省事此处可以将上边的命令放在~/.bashrc文件中,以后就不用每一次调用都输入了。~/.bashrc文件可以在home下按下Ctrl+h找到,在home下打开终端,输入:
ls -al
查看~/.bashrc文件的权限,然后输入:
sudo chmod 777 ~/.bashrc
更改文件权限。此时bashrc文件就可以正常操作了,将上述命令输入到文件的最后一行后保存退出,然后更新环境路径:
source ~/.bashrc
首先安装依赖包(此处是否必须未知,记得某一次好像没装也安装成功了):
sudo apt-get install libjpeg-dev zlib1g-dev
此处应该直接用pip安装就可以(虽然torch1.8.0版本对应的是torchvision0.9.0,但是实测0.9.1也能用,0.9.0不能用pip3安装,安装过程很麻烦,所以对版本卡的不死的话建议直接安装0.9.1):
pip3 install torchvision==0.9.1
记得验证是否安装成功!!!
python3
>>import torchvision
>>
此处只要不报错即为安装成功。
如果上述安装torchvision的方法不行也不要慌,下面提供另一种安装方式:
git clone --branch v0.9.0 https://github.com/pytorch/vision torchvision
v后面是版本号,可以自己改,建议用校园网下载,要不然慢的要死。
进入torchvision文件夹下:
cd torchvision
安装torchvision:
sudo python3 setup.py install
此处执行时间超级长,中间终端经常会长时间停在某个位置,这里不是卡死了。
最后验证是否安装成功,此处和上边方法相同,这里不再重复。
安装matplotlib:
sudo apt-get install python3-matplotlib
安装scikit-image:
sudo apt-get install python3-skimage
安装numba:
sudo apt-get install python3-numba
安装shapely:
sudo apt-get install python3-shapely
安装pre-commit:
sudo pip3 install pre-commit --ignore-installed PyYAML
此处忽略PyYAML是因为预装版本和所需版本不一样,但是实际上感觉并没啥大影响。
以上是所有和x86系统安装方式不一样的安装包,剩余环境所需的第三方库直接用正常的pip命令就能够安装成功(此处没有安装成功pycocotools,在测试代码的时候因为不需要调用coco数据集,因此我直接简单粗暴将coco文件删掉了,算是一点小遗憾吧,有安装成功的大佬可以告知一下):
sudo pip3 install ×××
至此,代码已经可以跑起来了,但是如果想要加速怎么办呢?那就安装tensorrt吧。这里有一个坑:如果无法完全复现代码的第三方tensorrt安装包就无法使用别人给的trt模型!!因此需要在自己的设备上配置完环境后自行将pytorch的模型转为trt模型再进行测试!
此处所有的安装方式均遵从文档:
https://github.com/researchmm/TracKit/blob/master/lib/tutorial/install_trt.md
因为v0.4.4.0预装的是cuda10.2,我没有动,因此输入的时候cuda-**我这里改为cuda-10.2,如果换过cuda此处需要更换版本,在终端里输入:
export C_INCLUDE_PATH=/usr/local/cuda-10.2/include/:${C_INCLUDE_PATH}
export CPLUS_INCLUDE_PATH=/usr/local/cuda-10.2/include/:${CPLUS_INCLUDE_PATH}
pip install pycuda
首先去老黄的页面下载tensorrt,版本只要和cuda版本一致就行,网址放在下边:
https://developer.nvidia.com/tensorrt
点击中间的Download now,下载需要登录个人账号,有账号的选择login登录,没账号的选择Join now注册账号后登陆。我用的是tensorrt7.0.0.11版本的安装包,但是装完后我的环境中显示的却是7.1.0.16,这里还挺奇怪的,不知道为什么。而且比较奇怪的是我这里下载的是linux x86中的tar文件,正常来讲应该是装不上的,但是现在不仅装上了还能正常使用,这就比较让人疑惑了。(这里当时应该是没找到aarch64的安装包,就找了个相近的凑合这用了,毕竟工业上是东西能用就行,没人管你怎么用的)
tar -zxf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
vim ~/.bashrc
# Add codes in your file ~/.bashrc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your-TensorRT-lib-path>
# for example
# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dji/Downloads/TensorRT-7.0.0.11/lib
source ~/.bashrc
cd TensorRT-7.0.0.11/python
# Remember declare your python version=3.6
pip3 install tensorrt-7.0.0.11-cp36-none-linux_x86_64.whl
cd TensorRT-7.0.0.11/graphsurgeon
pip3 install graphsurgeon-0.4.1-py2.py3-none-any.whl
这里在安装的时候tensorrt后面要接7.0.0.11,不能接7.1.0.16,因为这里是在找文件夹,和最后的版本没有关系,倒数第三行是安装tensorrt库的命令,其中cp后面跟的是python的版本,如果此处更换过python版本,比如换成3.7就要去安装3.7的文件,具体的去文件夹里面看要安装哪个版本的文件。
最后确认是否安装成功:
python3
import tensorrt
不报错说明安装成功,进行下一步!
这里是因为pytorch模型不能直接用tensorrt库读取,要转换为专用的库,所以需要这么个第三方安装包:
git clone https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt
python3 setup.py install
验证是否安装成功:
python3
import torch2trt
不报错说明安装正确!至此tensorrt安装完毕!
到这个位置说明环境已经全部配置完成了,接下来就可以复制代码,数据集到妙算2上进行测试,或者直接用摄像头也行。
首先将datasets路径配好,然后打开终端:
cd video_analyst/
export PYTHONPATH=/home/dji/video_analyst:$PYTHONPATH
这一步是将工程路径限制在video_analyst下,下面用命令运行测试文件,我这里测试的是UAV123的测试集:
python3 ./main/test.py --config 'models/siamfcpp/siamfcpp-googlenet-vot-md5_f2680ba074213ee39d82fcb84533a1a6.pkl'
这里一定要用python3运行,不能直接用python,直接用python调用的是python2.7,里面是没有环境的。
首先要将你的模型转换为tensorrt能够识别的.trt后缀的模型,这里要用到main文件夹下的cvt_trt.py文件:
python3 ./main/cvt_trt.py --config 'experiments/siamfcpp/test/UAV123/siamfcpp_googlenet-uav123.yaml' --output siamfcpp-googlenet-vot-md5_f2680ba074213ee39d82fcb84533a1a6
这里的config文件和之前的config文件是不一样的,需要加3行代码:
下面的trt_model是原文件中没有的,需要自己加上,在转换的时候这里要选择false,默认不调用trt模型(想调也得有啊
),运行完成后在video_analyst下就会生成两个.trt文件,具体的文件名和上面的倒数2行中最后一部分一致。
trt模型名字生成后也可以随意改,两个文件不要乱了就行,模型的位置也可以随便调整,只要路径给对了就没问题。
接下来就可以运行加速过的模型了,上面的三个权重文件的路径都要给,然后trt_mode改为True就好了,命令和不加速的模型一样。
最后给个成品图:
感谢导师提供的设备支持,实验室的各位师兄们提供的无私帮助,之前没有见过的师兄师姐们留下来的宝贵经验,以及网上各路大神们的分享!
首先声明,虽然我曾经升级成功过,但是在之后配环境的过程中出现了各种奇奇怪怪的问题,因此如果不是必须的话不建议升级官方预装的cuda和cudnn。因为环境需要安装到eMMC(系统所在的内存)中,因此在安装cuda和cudnn之前不建议挂载SD卡。
第一步要先卸载掉原有的cuda:
# 查询原有的cuda
dpkg -l | grep -i cuda
# 卸载原有的cuda
sudo apt-get remove cuda-*
查询后会看到有好多以cuda开头的文件,有些是要删除的但有些需要保留,不是所有的文件都属于cuda,因此卸载时此处一定要在cuda后加上-*,否则删除完后你就会惊奇地发现网络也连不上了,只能重新搞。。。
为了完全卸载掉cuda和cudnn,要把含有cudnn的文件也全部都删掉,然后再安装新的cuda和cudnn,因此把cudnn的卸载提到这一步:
# 查询原有的cudnn
dpkg -l | grep -i cudnn
# 卸载原有的cudnn,此处的libcudnn8*根据上面查询到的cudnn编号更改
sudo apt-get remove libcudnn8*
第二步要下载新的cuda和cudnn,首先在下面的网址下载cuda:
我这里下载的是cuda11.3.0,里面的选项这么选:
在终端中用官方给的方式进行安装:
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux_sbsa.run
sudo sh cuda_11.3.0_465.19.01_linux_sbsa.run
这里输入密码的时候会卡一小会,然后弹出的界面中输入accept接受协议,安装的时候只将驱动前面的×去掉就好了,然后直接安装(网上有一些安装方法虽然能成功安装,但是在卸载的时候会发现缺少uninstall文件,一次偶然的机会才发现是在安装cuda的时候选择的不对,这些方法在安装的时候只选择了安装cuda的驱动,后面的一些文件的勾选全部给去掉了,因此缺少相应的卸载文件,解决办法也很简单,再次运行安装文件,然后将显卡驱动和cuda驱动的选项前面的×去掉,安装剩下的文件就行了),下一个界面选择yes(网上有些人说如果之前卸干净了就不会出现这个界面,但不确定真假),直到出现summary后就说明安装结束了。此时界面不要关掉!后续还有用!
第三步更改环境文件,在~/.bashrc中将cuda的路径改为上面summary中显示的路径,通常情况下只需要将文件中的cuda版本号换一下就行。保存后关闭并编译:
source ~/.bashrc
最后验证cuda是否安装成功:
nvcc -V
如果显示cuda版本变为11.3就成功了,可以开始安装cudnn了。
因为安装cuda前已经卸载了cudnn,因此直接下载安装就行。首先下载cudnn8.2.1(此处虽然cudnn8.2.1显示对应cuda11.*,但是下载的时候通过看文件名其实是有对应cuda11.3的,因此如果不清楚其它版本cudnn是否适配的话还是就用这一版比较好):
https://developer.nvidia.com/rdp/cudnn-archive
要选择aarch64sbsa那一版,只有第一个符合要求:
然后解压安装包:
sudo tar -xvf cudnn-linux-sbsa-8.4.0.27_cuda11.6-archieve.tar.xz
接下来将下列文件拷贝至相关位置:
sudo cp cudnn-linux-sbsa-8.4.0.27_cuda11.6-archieve/lib64/* /usr/local/cuda/lib64
sudo cp cudnn-linux-sbsa-8.4.0.27_cuda11.6-archieve/include/* /usr/local/cuda/include
最后给权限:
sudo chmod 777 /usr/local/cuda/*
验证是否安装成功:
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
虽然anaconda官方并没有出应用在aarch64架构下的虚拟环境配置软件,但是网上有大神自己写了出来:
https://github.com/Archiconda/build-tools/releases
下载后的安装过程和x86一样,包括进环境、建环境和退出等都和x86一样。但是在使用过程中有些安装包还是不能够读取到,最后时间有限,选择放弃,直接在主环境中搞了。
(第一次写博客,如有错误,欢迎指出,万分感谢!)
就写写东西吧欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdo...
一、Redis Client介绍1.1、简介Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对各类API进行封装调用。Jedis源码工程地址:https://github.com/xetorthio/jedis1.2、使用Redis Client最好选用与服务端对应的版本,本例中使用Redis 2.8.19客户端使用jedis -2.6.3,M...
Minimum Inversion Number传送门#include <iostream>#include<cstdio>#include<algorithm>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1typedef long long ll;const int N=5005;int sum[N<<2];void pus
● L1和L2正则化的区别参考回答:L1是模型各个参数的绝对值之和,L2为各个参数平方和的开方值。L1更趋向于产生少量的特征,其它特征为0,最优的参数值很大概率出现在坐标轴上,从而导致产生稀疏的权重矩阵,而L2会选择更多的矩阵,但是这些矩阵趋向于0。● 问题:LossFunction有哪些,怎么用?参考回答:平方损失(预测问题)、交叉熵(分类问题)、hinge损失(SVM支持...
1. 什么是托管函数 托管函数是一个对类里面的某个函数的一个引用.它自己并没有具体的函数定义,只是指向某个函数实现. 2. 与C++, Delphi的横向比较在C++和Delphi中与托管函数对应的类型是函数指针,形式如下:C++ typedef (int GetNum)(real rNum); Delphi function
先定义5个图标如下://句柄展开时的图标Icon ExpandedIcon=new ImageIcon("图标文件路径");//句柄折叠时的图标Icon CollapsedIcon=new ImageIcon("图标文件路径");//叶节点的图标,也就是下面没有子结点的节点图标Icon LeafIcon=new ImageIcon("图标文件路径");//非叶节点关闭时的图标,也就是下面有子结
笔者使用的环境是anaconda3自带的python3.7环境,但是在使用pip下载安装PyAudio的时候遇到了问题:这个错误的最后一句说我缺少了某些工具: error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstu...
转自:http://luveelin.blog.163.com/blog/static/1194923412012534161238/在windows下配置svn服务器windows系统使我们经常使用的操作系统怎么才能使用我们现在经常使用的操作系统不变的情况下继续我们的SVN之旅,我们在综合了好动种方法的同时感觉这些内容非常贴近我们SVN在Windows种的应用与配置....
using UnityEngine;using System.Collections; public class animationCtrl : MonoBehaviour { private float hSliderValue; private AnimationState currentAni; void Start () { gameObj
DSP/BIOS是一个简易的嵌入式操作系统,主要是为需要实时调度、同步以及主机-目标系统通讯和实时监测的应用而设计的。DSP/BIOS集成在CCS中,不需要额外的费用,但不提供源码,它是 TI公司倡导的 eXpressDSP 技术的重要组成部分。 DSP/BIOS本身只占用很少的资源,而且是可裁减的,它只把直接或间接调用的模块和API连接到目标文件中,最多为6500字,因此在多数应
Consul是什么, 有哪些功能, 解决什么问题。
--单行函数:作用于一行,返回一个值。--多行函数:作用于多行,返回一个值。select upper('yes') from dual;select lower('YES') from dual;-- 数值函数select round(26.16,1) from dual;select round(26.16,-1) from dual; -- 四舍五入,后面的参数表示保留的...