自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 5638

原创 设置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 1250

原创 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 1913

原创 win10下如何快速安装迷你迅雷

因迷你迅雷签名早已经过期,现在win10下已经不可以正常的安装迷你迅雷了 最快速的方法就是启用administrator用户,用这个安装就可以了,不需要任何设置如上图启用administrator就可以,然后注销用administrator登陆安装迷你迅雷,安装完了禁用掉adminstrator即可(这个不是必须的)

2016-02-05 20:20:08 6976

原创 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 1114

原创 在宏里访问结构体的成员 - 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 1883

原创 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 993

原创 使用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 3314

原创 web应用里的flash message的作用

flash 提示信息一般显示一段很简单的信息告知登录之类的信息,具体如下图: 正常情况下的登陆页面应该是下面这个样子的,就是没有任何信息提示: 登陆成功后的主页显示“登陆成功”的提示 flash信息显示的时候也许会比较特别,不过这并不是他特有的,显示的效果只不过是html渲染的结果而已。这儿要讲的是这种技术实现的背景以及方法看到上面这两个图片大家也许觉得很好做,登陆出错的时候直接渲染一个登陆页

2015-10-22 16:51:04 5033

转载 终于看到golang的深入解读了

golang出来这么多年了,深入讲解的还是第一次看到 http://blog.jobbole.com/90574/

2015-10-18 09:02:37 3622

原创 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 3336 1

翻译 rust的Iterator

这个文章讲的还是挺详细的,有空了再翻译下http://hoverbear.org/2015/05/02/a-journey-into-iterators/

2015-09-29 15:18:56 942

原创 查找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 1336

原创 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 2156

原创 含有重复元素的二分查找算法

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 7290

原创 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 1653

原创 多个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 761

原创 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 5524

转载 rust compile plugin的使用方法

具体可以参考这篇文章: https://www.gulshansingh.com/posts/how-to-write-a-rust-syntax-extension/

2015-09-06 15:10:19 844

原创 调试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 8125

原创 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 2440

原创 在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 6687

原创 在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 2566

原创 rust泛型过度使用思考

目前了解来看rust泛型的概念很好,比c++多了很多类型限定和编译时检查,出错提示相对c++来说也特别特别的友好。但任何事物总是有两面性,过度的使用泛型会使得代码极度的膨胀,这个膨胀的速度在我看来比c++的模板快多了1 trait里的默认函数和方法引起的代码膨胀首先来看一段简单的代码:trait Foo{ fn foo(){ println!("foo"); }

2015-09-01 11:15:44 4256 2

原创 rust的一些细节

与其说是细节还不如说是一些“废话”,不仔细想的时候会感觉到模棱两可的东西都记录下来trait里的函数和方法可以在其他impl里使用,但是类型自己的impl的函数不能在trait里调用其实这个也比较好理解,可以有很多的type可以实现trait,那么trait就不可能调用某个特定类型自己的方法或者函数;反过来某个类型实现了某个trait则trait的函数必然可以调用struct Foo;impl Fo

2015-09-01 09:20:17 894

原创 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 1824

原创 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 2475

原创 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 606

原创 理解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 2177

原创 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 8088 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 1438

原创 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 1316

原创 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 6236

原创 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 2138

原创 显示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 5363

原创 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 12538 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 3334

原创 在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 4278 1

原创 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 1751

原创 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 2867

Iar_vs2010

iar 工程转成vs2010工程

2015-05-20

在Go包里添加C代码并且不使用CGO(不需要gcc)

在Go包里添加C代码并且不使用CGO(不需要gcc)http://blog.csdn.net/varding/article/details/12677315 上面这个文章里的测试代码工程打包 可能有些朋友对golang了解的还不是很透彻,编译什么的还有些疑问,所以我把这个工程打包传上来了,希望大家能一次测试通过 同时也对go build , go test ,go install之类的使用有个整体的了解

2013-10-13

Programming.in.Go

Programming.in.Go 完整版

2013-01-24

wxwidgets集成IE浏览器控件

wxwidgets里使用IE控件的方法 里面包含了: 1.网上下载的源代码工程 2.我修改后可以直接编译的工程 3.一个编译好了的release程序可以直接运行

2010-06-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除