自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

DaLaoZi的专栏

Stay hungry,stay foolish.

  • 博客(170)
  • 问答 (1)
  • 收藏
  • 关注

原创 【树莓派开发】树莓派3B的Qt交叉编译环境搭建(2)

7.安装并配置Qt Creator将树莓派和Ubuntu连入同一局域网,查看树莓派的IP地址(博主的树莓派IP地址为:192.168.191.2)运行qt-opensource-linux-x86-5.4.1.run一路下一步即可安装完成。安装完成后打开QtCreator(地址:~/Qt5.4.1/Tools/QtCreator/bin/qtcreator) 任意打

2016-12-07 07:37:14 10085

原创 【树莓派开发】树莓派3B的Qt交叉编译环境搭建(1)

实验室项目需要用Qt在树莓派上开发一个用户交互界面。虽然树莓派的硬件配置随版本更新不断提升,但是还是无法满足直接在树莓派上进行Qt开发,所以首先要做的事情就是搭建交叉编译环境。下面开始搭建步骤:实验平台:树莓派2B(后来在树莓派3上进行了实验,除了raspbian镜像文件不同以外,其他文件不变,验证了该方案可行。)1.准备文件(下载方式后加)2015-05-05-raspbian-

2016-12-06 14:48:10 9024 5

转载 gdb调试多进程和多线程命令(结合例子)

1. 默认设置下,在调试多进程程序时GDB只会调试主进程。但是GDB(>V7.0)支持多进程的分别以及同时调试,换句话说,GDB可以同时调试多个程序。只需要设置follow-fork-mode(默认值:parent)和detach-on-fork(默认值:on)即可。      follow-fork-mode  detach-on-fork   说明parent              ...

2018-03-25 10:56:03 556

原创 CSAPP: Shell Lab

介绍shell Lab的主要目的是为了让我们熟悉进程控制和信号。实验准备下载shell Lab实验包:原实验包github链接,本文中撰写的tsh.c全部代码github链接【实验内容】 是对tsh.c中没有填写的函数进行填写,使得该shell能处理前后台运行程序、能够处理ctrl+z、ctrl+c等信号。 需要实现的函数主要有一下五个:eval: 主要功能是解析cmdline,并且运行. [70...

2018-03-24 23:22:44 3270

原创 基于QT和OpenCV的人脸检测识别系统(2)

紧接着上一篇博客的讲第二步是识别部分人脸识别 把上一阶段检测处理得到的人脸图像与数据库中的已知 人脸进行比对,判定人脸对应的人是谁(此处以白色文本显示)。人脸预处理现在你已经得到一张人脸,你可以使用那张人脸图片进行人脸识别。然而,假如你尝试这样简单地从一张普通图片直接进行人脸识别的话,你将会至少损失10%的准确率!在一个人脸识别系统中,应用多种预处理技术对将要识别的图片进行标准化处理是极其重要的。...

2018-03-22 17:39:20 1309

原创 基于QT和OpenCV的人脸检测识别系统(1)

人脸识别分为两大步骤1.人脸检测 这个是首要实现的,你得实现人脸显示的时候把人脸框出来,当然算法很多,还有一些人眼检测鼻子检测什么的主要用的是这个 const char *faceCascadeFilename = "haarcascade_frontalface_alt.xml"; detect_and_draw(IplImageBuffer,storage,cascade);这个函数就是检测人...

2018-03-22 17:32:21 1403 1

原创 修改arm开发板的IP地址

修改arm开发板的IP,使用的yaffs2文件系统,修改方法如下:1、修改/etc/init.d/rcS文件在/sbin/ifconfig lo 127.0.0.0下添加一行/sbin/ifconfig eth0 172.23.11.4 up这里172.23.11.4 是你要修改成的IP地址2、修改/etc/eth0-setting修改ip地址  网关  掩码重启开发板,ifconfig,就能发现...

2018-03-14 21:37:24 5531

原创 Linux电子书项目之电子书的实现及框架优化(3)

一、整体思路采用分层的思想,面向对象的编程思想。1、怎样在LCD上显示一个文件2、如何组织代码分层的结构main--draw--XXX_manager--fb.c等二、分层编写-底层实现1、显示部分代码编写[cpp] view plain copyshow_file\display\fb.c  show_file\display\disp_manager.c  show_file\include\...

2018-03-07 21:03:25 406

原创 Linux电子书项目之freetype实现矢量字体的显示(2)

上一篇博文我们通过点阵数组实现了字母的显示:http://blog.csdn.net/shenhuan1104/article/details/79476053现在我们通过freetype这个框架在PC和单板LCD上分别实现矢量字体的显示。一、PC上矢量字体的显示(1)矢量字体原理:存储一些关健点,然后通过贝塞尔曲线连接。(2)显示实现过程:给定一个文字,确定它的编码值;根据编码值从字体文件中找到...

2018-03-07 20:34:28 438

原创 Linux电子书项目之字符编码与字符的点阵显示(1)

一、字符编码为更好的存储和展示,于是出现了字符编码。下面来看一下字符编码的发展过程。分为三个阶段:阶段1:ASCII码欧美人发明,用一个字节来标志。也就是常说的ASCII码,由于英语中只有26个英文字母,以及常用符号,可以很简单的编码出来。Ox41:A;0x61:a。阶段2:国家编码GB2312(GBK)我们国家有上千的汉子,所以编码要比较多一些,用两个字节来表示一个汉字。对于内地采用GB2312...

2018-03-07 20:15:31 613

转载 谈谈我对Linux下“生产者/消费者线程模型”的理解

生产者消费者线程模型常常用于网络编程,即一个线程监听事件发生(生产者,例如产生“收到数据”事件),其他线程来处理事件(消费者,例如处理收到的数据)比较笨的办法是: 消费者线程不停地loop等待数据,当生产者线程发现收到数据时,找一个线程(先不讨论找线程的策略),把“收到数据”这一事件告诉消费者线程。消费者线程会在下一个loop对这个事件进行处理,处理完毕后,继续loop,直到下一个事件到来。但这么...

2018-03-06 21:06:19 322 1

转载 IO复用、多进程和多线程三种并发编程模型

I/O复用模型I/O复用原理:让应用程序可以同时对多个I/O端口进行监控以判断其上的操作是否可以进行,达到时间复用的目的。在书上看到一个例子来解释I/O的原理,我觉得很形象,如果用监控来自10根不同地方的水管(I/O端口)是否有水流到达(即是否可读),那么需要10个人(即10个线程或10处代码)来做这件事。如果利用某种技术(比如摄像头)把这10根水管的状态情况统一传达到某一点,那么就只需要

2018-02-01 13:58:05 552

转载 Linux网络编程入门 (转载)

(一)Linux网络编程--网络知识介绍Linux网络编程--网络知识介绍客户端和服务端         网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.客户端        在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序。 比如我们使用ftp程序从另外一        个地方获取文件的时候,是

2018-01-27 22:30:07 1095

转载 linuix线程的分离状态(detached)和可结合状态(joinable)

在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。        线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况

2018-01-27 20:17:45 373

原创 动态加载的函数库Dynamically Loaded (DL) Libraries

动态加载的函数库Dynamically loaded (DL) libraries是一类函数库,它可以在程序运行过程中的任何时间加载。它们特别适合在函数中加载一些模块和plugin扩展模块的场合,因为它可以在当程序需要某个plugin模块时才动态的加载。例如,Pluggable Authentication Modules(PAM)系统就是用动态加载函数库来使得管理员可以配置和重新配置身份验证信息

2018-01-25 20:15:17 636 1

原创 使用static与const关键字时需要掌握的知识

static:1、不考虑类,static的作用:    1)第一个作用:隐藏。使得全局变量和函数对其它文件不可见,同时避免了不同文件的命名冲突。    2)第二个作用:默认初始化为0。未初始化的全局静态变量和局部静态变量都保存在BBS段,BBS段的特点是,程序运行之前会自动清零。    3)第三个作用:保持局部变量内容的持久性。此变量声明周期是整个程序的声明周期,但是作用域只在声明

2018-01-11 16:52:40 280

原创 strcpy、strncpy与memcpy的区别与使用方法

strcpy、strncpy、memcpy这三个C语言函数我们在主机代码编写中会很频繁的使用到,但是三个函数的区别、使用时该注意什么还是有必要说下的。本文参考《C 标准库》编写。一、函数说明1、memcpy函数void  *memcpy(void *s1,  const void *s2,  size_t  n);说明:函数memcpy从s2指向的对

2018-01-11 16:26:18 876

原创 C语言里用结构体和指针函数实现面向对象思想

转自:http://www.linuxidc.com/Linux/2016-12/138789.htm一、基础研究观察如下两个程序a.c和b.c:A.c: B.c:  这两个程序都是要实现在屏幕上第10行40列打印一个绿色的字符c: 这两个程序的数据组织方式是一样的,都是使用结构体,而且对共性和个性的分离的思路也是一样

2018-01-11 14:26:56 1843

转载 c++中vector的用法详解

转自:http://blog.csdn.net/hancunai0017/article/details/7032383vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.     用法:          1.文件包含:         

2017-11-24 20:35:53 565

原创 剑指offer-操作给定的二叉树,将其变换为源二叉树的镜像

剑指offer:操作给定的二叉树,将其变换为源二叉树的镜像 /*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*

2017-11-23 12:32:52 501

原创 用两个队列实现一个栈

转自:http://blog.csdn.net/jiange_zh/article/details/50583370队列是先进先出,而栈是先进后出;考虑到我们取栈顶元素的便利性,我们在实现时使得栈顶等于队列头;由于栈的pop弹出栈顶元素,而队列的pop也是弹出栈顶元素,所以我们需要特别处理的是插入操作。由于往栈中添加元素相当于往队列头添加元素,因此我们需要在两个

2017-11-20 18:52:13 391

原创 C++中this指针的用法详解

转自:http://blog.chinaunix.net/uid-21411227-id-1826942.html1. this指针的用处:  一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上thi

2017-11-17 15:22:56 959 1

原创 解决CserialPort类串口程序中WriteToPort只能发送一次问题

现象:每次打开串口只能发送一次,需要关闭再打开或者接收完数据才能发送成因:在自带串口的电脑、或用优质的USB串口线都没有出现改问题,很有可能跟串口线的质量有关, 调试发现在调用玩WriteToPort函数 SetEvent(m_hWriteEvent);后第一次能够正常进入监视线程(CommThread(LPVOID pParam)) 调用WriteChar(port),然

2017-11-09 20:11:04 2866 1

原创 MFC串口编程——使用WM_COMM_TXEMPTY_DETECTED来判断接收结束

最重要的写在最前面:::SendMessage((port->m_pOwner)->m_hWnd, WM_COMM_TXEMPTY_DETECTED, (WPARAM) RXBuff, (LPARAM) port->m_nPortNr); 在void CSerialPort::ReceiveChar(CSerialPort* port, COMSTAT comstat)函数

2017-10-30 22:19:43 1802

原创 深入C语言把文件读入字符串

1.纯C实现FILE *fp; if ((fp = fopen("example.txt", "rb")) == NULL) { exit(0); } fseek(fp, 0, SEEK_END); int fileLen = ftell(fp); char *tmp = (char *) malloc(sizeof(char) * fileLen); fseek(fp, 0, S

2017-10-26 19:39:42 8298

转载 MODBUS通讯协议及编程【一】

一、Modbus 协议简介  Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。  此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应

2017-10-25 23:04:13 2249

原创 MFC下自动识别串口的实现

摘自:http://blog.csdn.net/itas109/article/details/18359295程序:http://blog.csdn.net/itas109/article/details/18359295serial类里边的两个函数[cpp] view plain copyvoid CSerialPort:

2017-10-23 13:47:12 3293

原创 STM32中中断优先级理解

很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()——配置优先级分组方式,会很不理解,尤其是看中文翻译版的,因为中文翻译版里把这里翻译成“先占优先级和从优先级”这样翻译其实是不对的,很容易让人误解。为了便于大家理解,有必要先解释两个概念:抢占式优先级/响应优先级:    STM32(Cortex-M3)中有两个优先级的概念——抢占式

2017-10-19 15:44:50 724

原创 c++中的string常用函数用法总结

标准c++中string类函数介绍注意不是CString之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据

2017-09-13 20:19:09 486 1

原创 c++中的运算符优先级

C++ 中的运算符优先级运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,例如,乘除运算符具有比加减运算符更高的优先级。例如 x = 7 + 3 2,在这里,x 被赋值为 13,而不是 20,因为运算符 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。下表将按运算符优先级从高到低列出各个运算符,具有较

2017-09-12 20:20:57 1653

原创 linux之#if 0 ... #endif用途

在过去都没有去理会#if 的作用,今天突发奇想,开启编译器试一试。很多人都知道,#if  0  ...   #endfif的作用跟/*...*/的作用是一样的,就是注释,可是注释为什么不用注释符号/*就行了么?google了一下,大家都说是为了解决嵌套注释。如:/*---------------------------------------------------------------

2017-09-09 14:57:54 1355

原创 linux之printk和printf的区别

大部分常用的C库函数在Linux内核中都已经得到了实现。在所有没有实现的函数中,最著名的就数printf()函数了。内核代码虽然无法调用 printf()函数,但它可以调用printk()函数。printk()函数负责把格式化好的字符串拷贝到内核日志缓冲上,这样syslog程序就可 以通过读取该缓冲区来获取内核信息。printk()的用法很像printf(): printk("Hello

2017-09-09 11:43:18 4079

原创 Linux C 字符串输入函数 gets()、fgets()、scanf() 详解

一、gets() 函数详解gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')不属于这个字符串。调用格式为:gets(str);其中str为字符串变量(字符串数组名或字符串指针)。gets(str) 函数与 scanf("%s", &str) 相似,但不完全相同,使用 scanf("%s", &str) 函数输入

2017-08-09 22:04:10 10620

原创 Makefile中的-Wall -O2 -Os -g等选项介绍

-Wall:选项可以打印出编译时所有的错误或者警告信息。这个选项很容易被遗忘,编译的时候,没有错误或者警告提示,以为自己的程序很完美,其实,里面有可能隐藏着许多陷阱。变量没有初始化,类型不匹配,或者类型转换错误等警告提示需要重点注意,错误就隐藏在这些代码里面。没有使用的变量也需要注意,去掉无用的代码,让整个程序显得干净一点。下次写Makefile的时候,一定加-Wall编译选项。-O0: 

2017-08-07 20:35:27 12445

原创 linux之getopt 函数详解

命令行参数解析函数 —— getopt()getopt()函数声明如下:#include int getopt(int argc, char * const argv[], const char *optstring);extern char *optarg;extern int optind, opterr, optopt;该函数的ar

2017-08-07 19:59:14 2769

原创 int argc 、char *argv[] 与 char **argv

char *argv[] 与 char **argv#include#includestring.h>int main(int argc,char *argv[])//同int main(int argc,char **argv){  char *str_test = "hello wang";  int i,j,len;  for(i=0;i)  {    pri

2017-08-07 18:50:53 991

原创 C语言数据输入scanf( )和getchar( )

格式化输入函数scanf( )scanf( )功能:按照指定的格式读入键盘上输入的若干个任意类型的数据,存入到argument参数所指向的内存单元,函数返回值为读入并赋给argument的数据个数,出错则返回0。scanf( )使用形式:scanf("格式字符串",输入项首地址列表);scanf( )函数执行时将输入的数据流按指定格式转换为数据,存入相应的存储单

2017-08-05 20:22:37 1905 1

原创 C语言之数据输出printf( )和putchar( )

格式化输出函数printf( )printf( )功能:向系统指定输出设备按指定的格式输入任意个任意类型的数据,并返回实际输出的字符数。若出错,将返回负数。printf( )使用形式:printf("格式控制字符串",输出项列表);格式字符(以"%"引导):(1)d格式字符:用来输出十进制整数。%d,按整型数据的实际长度输出。%md,m为指定

2017-08-05 20:20:17 8608

原创 字符串与字符数组的区别

用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。2.对字符串指针方式,char *ps=”C Language”;可以写成char *p

2017-08-05 16:01:54 1272 1

原创 C结构体、C++结构体 和 C++类的区别

C结构体、C++结构体基本相同,C++类主要是方法的实现。结构体是数据类型的集合类是数据类型加方法的集合,基本如此,更注重方法。1.C的结构体和C++结构体的区别(1) C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。(2)C的结构体对内部成员变量的访问权限只能是public,而

2017-08-05 15:10:37 585 2

空空如也

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

TA关注的人

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