- 博客(144)
- 资源 (5)
- 收藏
- 关注
原创 opencv-rust安装与使用
最近在尝试用rust写视频处理代码,用到了opencv-rust这个库,这儿记录下安装过程。另外这个库说明文档比较欠缺,有些opencv接口不容易找到rust对应的调用名称或者方式,这儿将之前整理的接口查找的方法汇总了下。1.windows下安装1.1 llvm这个是动态生成代码需要用到,安装好就行https://releases.llvm.org/download.html1.2 opencv下载opencv安装即可,官网用的choco安装,这个并不是必须的,可以手动安装llvm和opencv
2020-11-24 15:22:06
6893
原创 设置linux驱动编译的中间目录
1 无中间输出目录编译驱动时我们常用下面的Makefile:obj-m := imx6ul_ads1278.o#内核源码目录KDIR := /path/to/linux/source/linux-imx-rel_imx_4.9.x_1.0.0_ga MAKE := makebuild: kernel_moduleskernel_modules: ${MAKE} -C $(KDI...
2020-01-31 20:28:14
1584
原创 matlab和matplot绘图对比
matplot的图和matlab的短时傅里叶的图,数据和算法的参数都一样,是算法给的结果有差异还是绘图有差异?matlab看的细节明显多了,是用法不对还是matlab画图真的好这么多?matlab:spectrogram(d3,1024,900,1024,25000,'yaxis');python:fs=25000nfft=1024overlap=900cmap = plt.get...
2019-10-24 18:10:29
2049
原创 win10下如何快速安装迷你迅雷
因迷你迅雷签名早已经过期,现在win10下已经不可以正常的安装迷你迅雷了 最快速的方法就是启用administrator用户,用这个安装就可以了,不需要任何设置如上图启用administrator就可以,然后注销用administrator登陆安装迷你迅雷,安装完了禁用掉adminstrator即可(这个不是必须的)
2016-02-05 20:20:08
7092
原创 IAR Error Pe706
IAR for ARM 7.5 编译时遇到如下错误 Error[Pe706]: expected a "," or ">" google上一直没找到错误原因,提示的地方就是模板的参数后来排查的时候发现只要在其他foo.cpp文件里包含这个模板头文件(temp.h)就会出错,解决方法也很简单,不要在foo.cpp直接包含temp.h,在这个foo.h里包含temp.h就可以了
2015-12-24 16:00:08
1180
原创 在宏里访问结构体的成员 - rust
目前在rust的宏里直接访问结构体的成员是不可行的,但是可以通过变通的方法来做例如下面的代码就是不可行的,$m.id或者$m.code会提示出错macro_rules! msg { ($id:expr,$code:expr,$f:ident,$m:ident)=>{ if $id == $m.id && $code == $m.code { ...
2015-12-09 16:02:13
1988
原创 AsRef模拟Atl里的继承关系
用AsRef模拟atl的继承方法 代码有点长,这个是模拟atl里某个类可以从TBase继承或者从TBase的子类继承(一般TBase就是CWindow) AsRef是一个目前相对比较方便的引用类型转换的方法#[derive(Debug)]struct CWin{ d: i32,}impl New for CWin{ fn new()->CWin { CWin{
2015-12-09 11:14:55
1051
原创 使用msvc编译的rustc
目前msvc编译的rustc已经正式放出来了,如果需要链接vc编译的lib还是很方便的,比如.rc(vc的资源文件)可以用vc的RC工具编译成.res(需要改成.lib,不然cargo不认)然后链接到程序里 msvc只需要用社区版就可以,但至少需要2013以上,不然编译会出错 注:gun版的rustc可以用windres+ar打包成lib的曲线方式来链接,麻烦不说还不是完全兼容另外rustc支持
2015-11-21 20:52:43
3395
原创 web应用里的flash message的作用
flash 提示信息一般显示一段很简单的信息告知登录之类的信息,具体如下图: 正常情况下的登陆页面应该是下面这个样子的,就是没有任何信息提示: 登陆成功后的主页显示“登陆成功”的提示 flash信息显示的时候也许会比较特别,不过这并不是他特有的,显示的效果只不过是html渲染的结果而已。这儿要讲的是这种技术实现的背景以及方法看到上面这两个图片大家也许觉得很好做,登陆出错的时候直接渲染一个登陆页
2015-10-22 16:51:04
5145
转载 终于看到golang的深入解读了
golang出来这么多年了,深入讲解的还是第一次看到 http://blog.jobbole.com/90574/
2015-10-18 09:02:37
3747
原创 rust里调试panic
rust在panic以后只会显示一条简单的提示信息: thread ‘’ panicked at ‘index out of bounds: the len is 0 but the index is 19’, ../src/libcollections\vec.rs:1044这个太简单了几乎无法定位出错信息,可以通过设置RUST_BACKTRACE=1来显示更多信息,这个让rust在出错的时
2015-10-05 14:20:55
3563
翻译 rust的Iterator
这个文章讲的还是挺详细的,有空了再翻译下http://hoverbear.org/2015/05/02/a-journey-into-iterators/
2015-09-29 15:18:56
994
原创 查找rust平台相关代码的文档
今天查encode_wide这个函数一直找不到,google才发现是online文档的问题rust的online文档是linux上生成的,所以有些windows上的东西查不到,查找与windows相关的doc使用本机上自带的doc具体在安装路径下: share\doc\rust\html\index.html 比如我的: C:\Program Files\Rust nightly 1.5\sh
2015-09-29 14:24:59
1391
原创 notepad++ 正则替换的占位符超过9的处理方法
notepad++的正则替换的时候使用()进行分组,然后用\1 \2 …\9代替这些分组匹配到的信息,但是超过9以后 \10,\11这种就不能工作了,这个时候需要用10,10,11这种方法,其实\1 \2 …\9也可以用11 2 … $9来替代sublime text 使用$xx 也可以正常工作
2015-09-25 15:02:56
2274
原创 含有重复元素的二分查找算法
rust已经有binary_search了,但不能很好的处理有重复元素的查找。 下面这个是我按照网上查找到的原理自己实现的,这个处理重复元素比较好,如果key有重复,那么总是查找到最小的那个indexfn main() { let s = [0, 0,0,0,0,1,1,1, 1, 1, 1, 2,2,3, 3, 5, 8, 13, 21, 34, 55]; let seek = 1
2015-09-18 10:19:17
7400
原创 Rc与Box区别
咋一看觉得这两个概念差的很远,但是有时候他们都可以在不释放资源的情况下把资源从lifetime短的地方传递到lifetime长的地方use std::rc::Rc;#[derive(Debug)]struct Foo(i32);fn main(){ let r:Rc<Foo>; let b:Box<Foo>; { let r1 = Rc::new(Foo(
2015-09-16 12:11:32
1796
原创 多个closure引用同一个变量,并且可能需要mut borrow
目前在实现一个事件系统,事件采用保存closure的方式实现,这其中遇到一个比较棘手的问题就是如果其中一个closure用&mut方式捕捉了一个变量,那么其他closure就不可以再用任何方式捕捉这个变量(rust的borrow check系统),并且如果要&mut捕捉还需要把closure的类型写成FnMut,类似这种: add_event<F>(&mut self,f:F) where F:F
2015-09-16 10:53:01
815
原创 Sized和?Sized的作用
考虑如下代码,这个是用Foo封装了两个Box类型,Bar把Fn(i32)作为类型传递给Foo并且把Foostruct Foo<T>{ a:Box<T>, b:Box<T>,}struct Bar{ fs:Foo<Fn(i32)>,}fn main(){}这个代码是无法编译通过的,下面是编译器提示:<anon>:7:5: 7:20 error: the trait `co
2015-09-09 23:14:39
5749
转载 rust compile plugin的使用方法
具体可以参考这篇文章: https://www.gulshansingh.com/posts/how-to-write-a-rust-syntax-extension/
2015-09-06 15:10:19
900
原创 调试rust的宏
nightly版本可以用 trace_macros!,具体看这个: http://stackoverflow.com/questions/30200374/how-do-i-debug-macros下面是我写的列子:#![feature(trace_macros)]trace_macros!(true);macro_rules! foo{ ($x:ident,$f:ident)=>{
2015-09-05 21:26:33
8277
原创 rust里closure的move和Fn,FnMut,FnOnce
https://www.reddit.com/r/rust/comments/2ti57s/iron_framework_and_lifetime_problems_with/. There seems to be two cases where a captured value is moved, copied or borrowed: when a closure is made (crea
2015-09-04 21:50:34
2617
原创 在rust里使用unstable feature
使用unstable feature的条件和步骤: 1. 只有nightly才可以使用unstable 2. 找到unstable feature的名字 3. #![feature(xxx)]启用这个feature下面是 std::ptr里的as_ref引起的 编译器错误来举例: use of unstable library feature ‘ptr_as_ref’: Option is
2015-09-04 09:16:37
7471
原创 在rust里使用c样式的函数指针
Fn(i32)->i32这个是trait,&Fn(i32)->i32这个是trait object,有lifetime的 fn(i32)->i32这种就是c里的函数指针了,这个是没有lifetime的fn hello(i:i32)->i32{ println!("hello:{}",i); i+100}fn hi(f:fn(i32)->i32){ f(3);}struc
2015-09-01 16:15:31
2674
原创 rust泛型过度使用思考
目前了解来看rust泛型的概念很好,比c++多了很多类型限定和编译时检查,出错提示相对c++来说也特别特别的友好。但任何事物总是有两面性,过度的使用泛型会使得代码极度的膨胀,这个膨胀的速度在我看来比c++的模板快多了1 trait里的默认函数和方法引起的代码膨胀首先来看一段简单的代码:trait Foo{ fn foo(){ println!("foo"); }
2015-09-01 11:15:44
4398
1
原创 rust的一些细节
与其说是细节还不如说是一些“废话”,不仔细想的时候会感觉到模棱两可的东西都记录下来trait里的函数和方法可以在其他impl里使用,但是类型自己的impl的函数不能在trait里调用其实这个也比较好理解,可以有很多的type可以实现trait,那么trait就不可能调用某个特定类型自己的方法或者函数;反过来某个类型实现了某个trait则trait的函数必然可以调用struct Foo;impl Fo
2015-09-01 09:20:17
926
原创 rust用BTreeMap保存closure
use std::collections::BTreeMap;struct Foo{ entry:BTreeMap<i32,Box<Fn(i32)->i32>>,}impl Foo{ fn new()->Foo{ Foo{ entry:BTreeMap::new(), } } fn add<F:Fn(i32)->
2015-08-31 15:06:15
1906
原创 rust用struct保存特定trait的引用
结构体保存一个实现了某个trait的引用,只要是保存引用就必须显式的加lifetime,实现如下: (只是保存而已,记不住…)trait DeriveTrait{ fn hello(&self)->i32;}struct Base<'a,T:DeriveTrait+'a>{ pt:&'a mut T,}impl<'a,T:DeriveTrait> Base<'a,T> {
2015-08-31 12:37:38
2602
原创 trait里的默认函数会为每个类型拷贝一份
注意这儿说的是“函数”不是“方法”,也就是说不带self的函数trait Foo{ fn foo(){ println!("foo"); }}struct Bar1;struct Bar2;impl Foo for Bar1{}impl Foo for Bar2{}fn main(){ println!("{:p}",&Bar1::foo); p
2015-08-30 22:35:31
644
原创 理解rust里的移动语义(1)
rust里的移动会发生内容的复制还是名字的取代而不发生复制? 这段代码展示的内容 1. move语义其实就是复制,可以看到move前后的两个变量f,f2的地址是不一样的 2. move只会drop一次,并且是move之后的那个变量f2 3. move之后原来的变量f就失效了,不可以直接访问。这儿通过保存了f的raw指针,通过unsafe查看f对应地址处的数据,可以看到数据已经变成无意义的数据
2015-08-30 19:48:33
2290
原创 rust:打印变量地址
fn main(){ let a:i32 = 5; //&a先转成raw指针,然后再把指针转成usize,这个可以print的 let addr = &a as *const i32 as usize; println!("addr:0x{:X}",addr); //为了验证刚才的地址是不是正确的,我们修改这个指针指向的数据 //pa就是addr对应的r
2015-08-30 14:52:25
8863
2
原创 rust raw pointer使用方法(4)
4、这儿是继续上一篇往下写,上一篇是把*mut c_void指针转成*mut T类型,然后用UFCS来调用,今天是把*mut c_void转成*mut Self来使用,这个其实只需要添加:Sized就可以了,具体代码如下:use std::os::raw::{c_void};//注意这儿必须加Sized,不然p_this转*mut Self编译器会报错,这儿感谢rust 2群里的@ELTONtr
2015-08-28 13:31:14
1514
原创 rust raw pointer使用方法(3)
3、这一篇写个稍微复杂一点的这个例子里的函数接收*mut c_void指针,然后把指针转成T类型的p_self raw指针,再使用rust的UFCS的函数调用方法调用T的方法(T的静态函数就不需要这么复杂了,直接T::xxxx就可以,连p_self都不用传进来)另外还有个比较绕脑子的地方,就是impl Bar<Foo> for Foo,希望大家能仔细看看这儿关键需要掌握的就是 1. &mut f=
2015-08-27 07:53:25
1424
原创 rust里使用thread_local!
thread_local使用很简单,只需要使用这个宏就可以了,不需要任何的use,但是释放资源的时候一定要注意,实现Drop是不可行的下面的代码的Drop是不可行的:use std::ops::Drop;struct Foo;impl Foo{ fn print(&self){ println!("print foo"); } //fn drop(&self){
2015-08-24 14:13:49
6540
原创 rust条件编译
直接看这个吧,用的挺多的条件编译,看起来也挺直观的 http://angrylawyer.github.io/rust-sdl2/src/rand/os.rs.html贴过来大家参考下:pub use self::imp::OsRng;#[cfg(all(unix, not(target_os = "ios")))]mod imp { extern crate libc; use
2015-08-23 18:57:11
2200
原创 显示rust测试时候的print信息
cargo test命令默认是关闭了test里的print输出,这对有时候需要看输出信息很不方便,官方添加了两种方法: https://github.com/rust-lang/rust/commit/6eaa21635e6c6c90e1a0579876bc63581f661f7d 1. 添加--nocapture 参数 2. 设置RUST_TEST_NOCAPTURE 环境变量目前第一种方
2015-08-23 18:31:04
5796
原创 rust一些习惯表达方法
学习rust的朋友可能经常看到Result和Option,虽然不一定直接看到他们本身,但是他们的方法还是常见的,比如:xxx.ok().expect(“…”); 这个xxx一般就是某个函数返回的Result类型了,下面就详细的讲解下他们的来源现在看看rust book里的那个guess game,有这么一段: http://doc.rust-lang.org/book/guessing-game
2015-08-23 13:41:54
13000
4
原创 用泛型实现rust返回类型自动推导
rust可以根据后续的类型提示自动选择返回值类型#[derive(Debug)]struct Foo(i32);#[derive(Debug)]struct FooBar(i32,i32);trait New{ fn new(i:i32)->Self;}impl New for Foo{ fn new(i:i32)->Foo{ Foo(i) }}im
2015-08-22 21:13:21
3530
原创 在rust里使用std::include!宏来包含其他文件
main.rs 里使用include!宏包含了另一个文件foo.rs,这样另一个文件就会被直接包含进来,这个在实现一个很大的impl的时候比较有用,比如这个例子里struct Foo的impl被放在了main.rs和foo.rs里#[macro_use]use std::*;include!("foo.rs");fn main() { let f = Foo; f.print1(
2015-08-22 14:26:30
4650
原创 rust raw pointer使用方法(2)
2、指针转换,传递和解引用 这儿用了windows里的一个常用的结构体RECT来做示范 LPRECT是RECT的*mut raw指针,也就是解引用后可以修改指向的数据的值,具体的说明见注释use std::os::raw::{c_void,c_int};//play run on *nix,so use c_int intead of c_long#[derive(Debug)]struct
2015-08-21 11:00:55
1844
原创 rust raw pointer使用方法(1)
1、raw pointer的声明与赋值 这个是c_void类型的用法,可以看到c_void类型的变量是没法赋值的,估计是故意被设计成这样防止滥用,只有*const c_void和*mut c_void才赋值use std::os::raw::{c_void};const NULL:* mut c_void = 0 as *mut c_void;fn main() { let mut c:*
2015-08-21 10:32:10
3008
在Go包里添加C代码并且不使用CGO(不需要gcc)
2013-10-13
wxwidgets集成IE浏览器控件
2010-06-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人