- 博客(30)
- 资源 (82)
- 收藏
- 关注
原创 在linux中使用内存映射(mmap)操作文件
在使用内存映射操作文件之前,我们先按照常规的方式来读写文件,这种方式操作如下:1,打开或创建文件,得到文件描述符,2,将内存中的数据以一定的格式和顺序写入文件,或者将文件中的数据以一定的格式和顺序读入到内存;3,关闭文件描述符;下边是按照常规方式操作固定格式的文件的方法,包含读写两个示例;#include <stdlib.h>#include <stdio.h>#inclu...
2018-06-29 14:38:04 7017
原创 Dlib+OpenCV深度学习人脸识别
Dlib+OpenCV深度学习人脸识别 前言人脸识别在LWF(Labeled Faces in the Wild)数据集上人脸识别率现在已经99.7%以上,这个识别率确实非常高了,但是真实的环境中的准确率有多少呢?我没有这方面的数据,但是可以确信的是真实环境中的识别率并没有那么乐观。现在虽然有一些商业应用如员工人脸识别管理系统...
2018-06-27 11:09:12 387
原创 C++ 堆内存管理
auto_ptr的缺陷在很早的C++98之前,C++用"auto_ptr"智能指针来管理堆分配的内存,它的使用非常简单:auto_ptr<int> ap(new int(1024));即将new操作返回的指针作为auto_ptr的初始值,不用调用delete即可实现堆内存的自动释放(如析构的时候)。由于auto_ptr本身存在一些问题,它在C++11中...
2018-06-27 11:06:45 474
原创 c++中string类的源代码
一:回顾(1)c++中的string类是在面试中和笔试中经常考的题目; 工程代码免费下载 string类的自行实现(2)c++中的string类和fstream类合起来是处理外部数据的利器;(3)string类经常用到find find_first_of find_first_not_of find_last_of find_last_not_of substr replace等,以及联合使用来达...
2018-06-26 15:58:13 6760 3
原创 【C++】拷贝构造函数和赋值符函数
在C++中,调用拷贝构造函数有三种情况:1.一个对象作为函数参数,以值传递的方式传入函数体.2.一个对象作为函数返回值,以值传递的方式从函数返回.3.一个对象用于给另外一个对象进行初始化(复制初始化).拷贝构造函数必须以引用的形式传递(参数为引用值).其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的调用来生成函数中的对象.这样会导致无限循环地调用拷贝构造函数,直至栈溢出.以...
2018-06-26 15:16:27 176
原创 g++编译支持c++11的方法
//第一种,直接包含在源程序文件中,如第一行代码所示 #pragma GCC diagnostic error "-std=c++11" #include <iostream> using namespace std; int main(int argc,char **argv) { cout<<"hello world!"<<endl; ...
2018-06-26 13:26:40 484
原创 Git merge 冲突解决简明教程
Git merge 冲突解决简明教程目录1. 概述 12. 从git difftool & mergetool 工具开始 – Beyond Compare 12.1. 下载安装Beyond Compare 12.2. 创建启动Beyond Compare...
2018-06-25 15:44:52 5770 1
原创 git实验之代码提交
代码提交代码提交一般有五个步骤:1.查看目前代码的修改状态2.查看代码修改内容3.暂存需要提交的文件4.提交已暂存的文件5.同步到服务器1. 查看目前代码的修改状态提交代码之前,首先应该检查目前所做的修改,运行git status命令 a) 已暂存 (changes to be c...
2018-06-25 10:01:09 159
原创 头文件的包含以及命名空间的引入尽量写在cpp里
1,头文件尽量包含在cpp文件里,而不是h文件里放在.cpp文件中是比较安全的,文件在多次递归包含后很容易出现一些定义和声明上的问题。放在cpp中可以减小头文件依赖,可以提高编译速度。所以,能放在cpp中的,就不要放在h中。只有头文件必须用到的放到头文件,头文件中可以使用前置声明来代替。或者所有cpp都用到的也可以放到头文件。哪里用到就放哪里,谁用谁包含。一般是默认放在cpp里,之后如果出现.h也...
2018-06-21 17:21:36 538
原创 如何防止头文件被重复包含或引用?
#include文件的一个不利之处在于一个头文件可能会被多次包含,为了说明这种错误,考虑下面的代码:#include "x.h"#include "x.h"显然,这里文件x.h被包含了两次,没有人会故意编写这样的代码。但是下面的代码:#include "a.h"#include "b.h"看上去没什么问题。如果a.h和b.h都包含了一个头文件x.h。那么x.h在此也同样被包含了两次,只不过它的形式...
2018-06-21 17:17:19 1745 1
原创 C++/C++11中std::set用法汇总
一个容器就是一些特定类型对象的集合。顺序容器(sequential container)为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。与之相对的,有序和无序关联容器,则根据关键字的值来存储元素。 标准库还提供了三种容器适配器,分别为容器操作定义了不同的接口,来与容器类型适配:stack、queue和priority_queue。适配器(a...
2018-06-21 10:38:08 18663
原创 VMware Tools (ubuntu系统)安装详细过程与使用-虚拟机与主机可以通过“拖拽”来对传文件
前一段时间博主在VMware虚拟机上安装了Ubuntu系统,如果还没有安装的同学可以参考博主上一篇文章:VMware Ubuntu安装详细过程。猿友们都知道linux不太好用,如果你想将你主机Windows上的文件或安装包放到虚拟机上,VMware Tools是必不可少的工具。欢迎关注,相互学习讨论,后续还会有更多linux搭建java开发环境和框架相关博客。下面小宝鸽附上VMware Tools...
2018-06-15 13:51:27 1878 1
原创 OpenMP中几个容易混淆的函数(线程数量/线程ID/线程最大数)以及并行区域线程数量的确定
说明:这部分内容比较基础,主要是分析几个容易混淆的OpenMP函数,加以理解。(1)并行区域数量的确定:在这里,先回顾一下OpenMP的parallel并行区域线程数量的确定,对于一个并行区域,有一个team的线程去执行,那么该分配多少个线程去执行呢?OpenMP的遇到parallel指令后创建的线程team的数量由如下过程决定:1. if子句的结果2. num_threads的设置3. omp_...
2018-06-13 11:04:36 4973
原创 OpenMP设置线程数及开启方法
1. OpenMP线程数设置 通常我们希望并行线程数可以随着机器改变自适应的调整,网上介绍OpenMP的文章很多,但是很少提到该怎么分配线程数,一般来说线程数最大可以开到2*核心数,但是这样电脑计算资源就会被占用的过多,其他程序基本上会卡的不要不要的,所以我一般就设置线程为2*核心数-1。(1) 查看核心数: 上面是我电脑...
2018-06-13 11:01:29 20903
原创 linux下Intel TBB、 Open MPI、OpenMP
多核编程 简单来说,由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生。按照我的理解,多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率。这两天关注的多核编程的工具包括OpenMP和TBB。按照目前网上...
2018-06-13 10:59:22 3589
原创 通过函数的入口地址来调用函数
例程:int i; //定义一个测试变量void test() //定义一个函数{i = 6; //给测试变量赋初值}int main(){int addr; //定义一个保存地址的变量addr = (int)test; //将函数test的函数入口地址存入addr((void(*)(int))addr)(0); //根据函数入口地址调用test函数//((void(*)(void))addr)(...
2018-06-12 09:30:27 12363
转载 C语言实现程序跳转到绝对地址0x100000处执行
嵌入式笔试题:想让程序跳转到绝对地址0x100000处执行,该如何做?网上看到有如下答案:*((void(*)(void))0x100000)();经过在VC++6.0和LINUX gcc4.4.3下测试,均不能通过编译。VC++6.0报错:error C2100: illegal indirectionGCC报错:error: void value not ignored as it ought...
2018-06-12 09:29:29 603
原创 C语言中将绝对地址转换为函数指针以及跳转到内存指定位置处执行的技巧
1、方法一要对绝对地址0x100000赋值,我们可以用 (unsigned int * ) 0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做? *((void (*)( ))0x100000 ) ( ); 首先要将0x100000强制转换成函数指针,即: (void (*...
2018-06-12 09:27:45 8840 2
原创 printf如何输出64位整数
关于printf函数输出64位数的问题,其实在window下和linux下是不一样的: linux下是printf("%lld/n",a);printf("%llu/n",a); windows下是printf("%I64d/n",a);printf("%I64u/n",a); 完整程序如下:[cpp] view plain copy [zcm@c #51]$cat a.c // linux平...
2018-06-12 09:22:45 10474
原创 怎样将成员函数指针强制转换成void*指针
采用取成员函数指针的地址的方法,先把指向成员函数指针的指针强制转化为别的类型,如unsigned*,当然同样可以通过此转化后的指针经过相反的变换来调用成员函数。于是乎要转化为void*的问题也随之可解,如下示例:/* VS2003下编译运行 */class AbstractMethod{public: virtual void show(){} // = 0; // 可以是纯虚函数,这里为了测...
2018-06-12 09:22:10 6239
原创 void*和类成员函数指针的相互转换
linux环境下,强地址转换会在O3的时候出问题正确的代码如下,#include <stdio.h>#include <stdlib.h>#include <new>#include <string.h>class class1{public: class1() { b = 10; } int memfunc1(...
2018-06-12 09:20:16 1968
原创 函数指针函数名转换成内存地址调用
1、 (*(void(*) ())0)();这是《C Traps and Pitfalls》这本经典的书中的一个例子。第一步:void(*) (),可以明白这是一个函数指针类型。这个函数没有参数,没有返回值。第二步:(void(*) ())0x46EF01,这是将0x0046EF01强制转换为函数指针类型,0x0046EF01是一个地址,也就是说一个函数存在...
2018-06-12 09:19:00 1289
原创 可变参数及可变参数宏的使用
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,这里将介绍可变函数的写法以及原理.* 1. 可变参数的宏一般在调试打印Debug 信息的时候, 需要可变参数的宏. 从C99开始可以使编译器标准支持可变参数宏(variadic macros), 另外GCC 也支持可变参数宏, 但是两种在细节上可能存在区别.1. __VA_ARGS____VA_ARGS__ 将"..."...
2018-06-12 09:15:19 3971 2
原创 C语言-函数指针与函数名的区别***
记得大学时老师曾说函数的函数名是函数的入口的指针,之前看block通过clang编译生成的C代码发现很多函数指针,于是想了解函数指针与函数名有什么区别?以及函数指针一般都有些什么作用。函数指针与函数名的区别首先先定义一函数以及一个指向盖函数的函数指针,并分别对他们进行调用。//VS 2017void fun(int& x);//定义函数f...
2018-06-11 13:48:46 7543 1
原创 如何输出类的非静态成员函数地址
首先我们定义一个类Ctest,类里面包含三个不同形式的成员函数,静态成员函数statFunc()、动态成员函数dynFunc()和虚拟函数virtFunc()。在main函数中我们利用cout标准输出流分别输出这三个函数的地址,程序如下所示: [cpp] view plain copy #include <iostream> #include <stdio.h> ...
2018-06-11 09:09:53 596
原创 静态方法不能调用非静态变量,非静态方法可以引用静态变量
为什么静态方法不能调用非静态变量,非静态方法可以引用静态变量?理由很简单,静态方法不属于对象,是属于类的,是不需要实例化的,而非静态变量是属于对象的,需要先实例化。在一个类的静态成员中去访问其非静态成员之所以会出错是因为在类的非静态成员不存在的时候类的静态成员就已经存在了,访问一个内存中不存在的东西当然会出错。相反,非静态方法是可以引用静态变量的。因为静态变量是存储在静态内存单元内,可以直接用类进...
2018-06-08 16:36:58 2688
原创 C++11新特性之std::function
博客《吐血整理C++11新特性》描述了一些C++11带来的新的特性,但是不够全面。在实际工作中,用到了std::function来实现回调函数。所以写该博客做一个简要补充。类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函...
2018-06-08 15:41:55 616
原创 C++11 新特性: unordered_map 与 map 的对比
unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历。所以使用时map的key需要定义operator<...
2018-06-08 14:42:05 4813 1
原创 linux-socket connect阻塞和非阻塞模式 示例
~/cpp$ ./connect 192.168.1.234 1234 kkkkblock mode: ubuntu 14.04 : time used:21.0.001053sconnect 超时时间是大约21秒!注意:如果connect 127.x.x.x xxx kkkk 会立即返回因为127开头的是网卡自身,你可以ping一下,发现都是通的,且等同于127.0.0.112345678...
2018-06-05 13:18:03 348
原创 Linux下Socket通信中非阻塞connect的注意事项
最近在弄Linux下的网络编程,用到了socket通信。在网上查了一些资料,自己也看了一下《Unix网络编程》相关章节。对于编程过程中遇到的一些问题,希望通过本文表达出来。我觉得最让我印象深刻的就是非阻塞的connect的一些使用注意事项了,鉴于自己的文采不是很好,就在网上查找相关的资料,怎料nphyez博主的一篇文章http://blog.csdn.net/nphyez/artic...
2018-06-05 10:33:45 908
CodeComposerStudio-TI系列DSP开发环境经典教程(中文版)
2023-11-09
USB-DEV-BULK驱动、USB-DEV-SERIAL-DRIVER驱动、USBlyzer 通过"USB BULK"管道实现
2023-09-04
USB转串口驱动.zip
2023-09-01
ZOC602串口工具(针对Tronlong TL6748-TI TMS3206748 DSP)
2023-08-31
TI-TMS320C6748DSP技术参考手册(中文版)+参考例程
2023-08-03
USB CDC从理论到实践-9527的专栏-CSDN博客 - blog.csdn.net
2023-02-10
UVCStreamComandParserV1.1.exe
2023-02-10
BusHound-v6.0.1.rar BusHound-v6.0.1.rar BusHound-v6.0.1.rar
2023-02-10
海思-拼接 产线标定库 API 参考.pdf
2022-11-16
linux系统V4L2驱动对接代码C++撰写
2022-10-13
ARM NEON指令集.docx
2021-06-03
linux.chm 学习的最好帮手
2008-08-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人