自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(184)
  • 收藏
  • 关注

原创 ubuntu下安装和使用

在ubuntu下完善代码的时候,会遇到想要跳转到函数定义处,或者跳转到其他相关文件的情况下,此时要借助linux下的ctags工具 在这里,我会尽我所能细致地讲清楚如何把vim变成source insight, 然而你仍然需要积极地思考,并且必须自己去摸索一些东西。 为了避免过于罗嗦,我把基础的部分放在后面,如果你越看越觉得太简单了,那么本文并不适合你;如果看完前面的仍有疑问或...

2018-04-20 18:26:11 311

原创 Linux Ubuntu 14.04平台下安装EDK2

Linux Ubuntu 14.04平台下安装EDK2博客是基于https://github.com/tianocore/tianocore.github.io/wiki/Common-instructions和《UEFI原理和编程》完成的。git clone https://github.com/tianocore/edk2来下载github网页上的EDK2源码 git clo...

2018-03-19 19:52:44 2652 1

转载 C++template模板

模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。 函数模板在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下:void swap(int&a , int& b) { int temp = a; a = b;

2017-10-15 21:30:20 554

转载 Winform、WPF和silverlight的区别

在Windows中,诸如窗体绘制等功能由GDI实现,放在操作系统内核中。Windows Forms在底层使用的是GDI+。GDI+是GDI的“面向对象包装”,使用C++实现。.NET Windows Forms应用程序中使用的GDI+其实是在C++实现的非托管代码之上又包了一层,从而让我们能使用C#这样的托管编程语言调用GDI+功能绘图。WPF底层使用的是DirectX,就是通常用来开发游戏的那个D

2017-09-08 00:54:19 902

转载 Windows屏保程序思考

和我公司写的直接调用Windows提供的接口不同。这样是直接生成一个.SCR的文件,在windo里面设置成使用它做屏保;而我做的是利用接口修改屏保时间,但是不能做到直接设置显示需要的图片。所以我采用的方法是显示为photos,然后在路径下修改图片,达到不同的button显示不同的屏保。以下转载:前些日子看了阿卓工作室的一篇关于如何制作屏保程序的文章及其示例,我便想自己做一个玩玩,所以按他说的做,

2017-09-07 21:56:54 927

转载 C++ set解析

1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。 创建 multiset<ss> base; 删除:如果删除元素a,那么在定义的比较关系下和a相等的所有元素都会被删除 base.coun

2017-09-01 00:33:36 490

转载 网络编程中的IO复用

IO复用是Linux中的IO模型之一,IO复用就是进程预先告诉内核需要监视的IO条件,使得内核一旦发现进程指定的一个或多个IO条件就绪,就通过进程进程处理,从而不会在单个IO上阻塞了。Linux中,提供了select、poll、epoll三种接口函数来实现IO复用。1、select函数#include <sys/select.h> #include <sys/time.h> int sel

2017-08-16 00:02:29 500

转载 fread() fwrite()和write() read()的区别

1,fread是带缓冲的,read不带缓冲.2,fopen是标准c里定义的,open是POSIX中定义的.3,fread可以读一个结构.read在linux/unix中读二进制与普通文件没有区别.4,fopen不能指定要创建文件的权限.open可以指定权限.5,fopen返回指针,open返回文件描述符(整数).6,linux/unix中任何设备都是文件,都可以用open,read.如果文件的大小是

2017-08-15 23:42:42 1399

转载 socket中recv() send() read() write()区别

一旦,我们建立好了tcp连接之后,我们就可以把得到的fd当作文件描述符来使用。由此网络程序里最基本的函数就是read和write函数了。ssize_t write(int fd, const void*buf,size_t nbytes);write函数将buf中的nbytes字节内容写入文件描述符fd.成功时返回写的字节数.失败时返回-1. 并设置errno变量. 在网络程序中,当我们向套接

2017-08-15 23:38:44 483

转载 尾递归 - Tail Recursion

尾递归是极其重要的,不用尾递归,函数的堆栈耗用难以估量,需要保存很多中间函数的堆栈。比如f(n, sum) = f(n-1) + value(n) + sum; 会保存n个函数调用堆栈,而使用尾递归f(n, sum) = f(n-1, sum+value(n)); 这样则只保留后一个函数堆栈即可,之前的可优化删去。  也许在C语言中有很多的特例,但编程语言不只有C语言,在函数式语言Erlang中(亦

2017-08-13 01:39:24 536

原创 while(c = getchar() != '\n')和while((c = getchar()) != '\n')区别

在利用while循环和getchar()读取缓存中的数据时,发现了一些问题。 在最初,我利用while(c = getchar() != ‘\n’)的时候,发现总是不能将我想要读取的值正确的赋值给c,在我加上括号之后就可以完美运行,虽然这是一种良好的编程习惯的要求,但是其中原因让我很费解。 经过反复的查阅资料和推敲,我终于发现了其中的虽然很平常,但是不引人注意的“秘密”。 在程序中,所有的语句

2017-08-07 02:39:36 21697 9

原创 differences resize() between reserve()

1、resize(n) 调整容器的长度大小,使其能容纳n个元素。如果n小于容器的当前的size,则删除多出来的元素。否则,添加采用值初始化的元素。2、 resize(n,t)多一个参数t,将所有新添加的元素初始化为t。而reserver()的用法只有一种reserve(n)预分配n个元素的存储空间。了解这两个函数的区别,首先要搞清楚容器的capacity(容量)与size(长度)的区别。size

2017-07-24 19:06:46 340

原创 通过C++文件复制小程序来理解read、write函数

在初期,对于输入文件和输出文件的理解,作为调取信息的文件来说,我们需要把读取方式设置为ios::in,即作为我们程序的输入;同样,对于存放信息的文件来说,我们需要把读取方式设置为ios::out,即作为程序的输出。在读取文件信息的时候,由于read函数遇到文件结束标识符EOF的时候,他会提前结束读取,加上我的输入文件中根本不存在100个字节的字符,所以不会进入weile循环,这样就必须要在while

2017-07-19 22:02:45 866 1

转载 探寻C++读取文件最快的方式

在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中很不错,但

2017-07-18 19:30:56 3635 1

原创 较为全面的ADC驱动

1、ADC硬件原理概述 我们从上面的结构图和数据手册可以知道,该ADC模块总共有8个通道可以进行模拟信号的输入,分别是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么ADC是怎么实现模拟信号到数字信号的转换呢?首先模拟信号从任一通道输入,然后设定寄存器中预分频器的值来确定AD转换器频率,最后ADC将模拟信号转换为数字信号保存到ADC数据寄存器0中(ADCDAT0),然后

2017-07-18 15:25:15 3484

原创 快速模式匹配算法

恐怕现在用过电脑的人,一定都知道大部分带文本编辑功能的软件都有一个快捷键ctrl+f 吧(比如word)。这个功能主要来完成“查找”,“替换”和“全部替换”功能的,其实这就是典型的模式匹配的应用,即在文本文件中查找串。1.模式匹配 模式匹配的模型大概是这样的:给定两个字符串变量S和P,其中S成为目标串,其中包含n个字符,P称为模式串,包含m个字符,其中m<=n。从S的给定位置(通常是S的第一个

2017-07-11 10:55:30 1740

原创 可重入函数解析

在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入函数是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的: 1)

2017-07-10 12:28:03 390

原创 预编译处理#error的作用

编译程序时,只要遇到 #error 就会跳出一个编译错误,既然是编译错误,要它干嘛呢?其目的就是保证程序是按照你所设想的那样进行编译的。下面举个例子:程序中往往有很多的预处理指令#ifdef XXX...#else#endif当程序比较大时,往往有些宏定义是在外部指定的(如makefile),或是在系统头文件中指定的,当你不太确定当前是否定义了 XXX 时,就可以改成如下这样进行编译:#if

2017-07-09 21:30:59 1092

转载 Makefile通用版本

转载自:http://www.iteye.com/topic/774919本文推荐了一个用于对 C/C++ 程序进行编译和连接以产生可执行程序的通用 Makefile。在使用 Makefile 之前,只需对它进行一些简单的设置即可;而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 Makefile。因此,即便是一个没有学习过 Makefile 书写规则的人,也可以为自己的 C/C++ 程

2017-07-09 17:48:11 448

转载 数据类型和抽象数据类型

我们知道在各种编程语言中都会有数据类型。一.数据类型先看看为什么会有不同的数据类型呢?很简单,很多东西不能一概而论,而是需要更精确的划分。计算机计算1+1并不需要多么大的空间,但是计算10000000000+1000000000就得需要有个比较大的空间来放。还有有时候会计算小数,小数的位数不一样,需要的空间也就不一样。数字1和字母a也需要区分啊,于是开发者就想出了“数据类型”这一招,用来描述不同的数

2017-07-06 15:50:17 1158

原创 24C02

AT24C02内部设有一个8位控制寄存器,其每一位的含义如下: Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 1 0 1 0 A2 A1 A0 R/W 其中前4位数据是芯片固定的标识,A2/A1/A0用于选择总线上待访问的I2C器件,R/W=1读操作,R/W=0写操作;I2C总线上最多可以扩展8片同样的2K容量EEPRO

2017-05-21 22:17:33 1716

转载 一段话教会你熟练掌握单片机

一段话教会你熟练掌握单片机一、前言很多单片机初学者与我交流时总说的一句话是我现在是单片机初学者,我怎样才能更快的学好单片机,我该从哪方便入手。对于这个问题,现在就我自己如何学单片机,如何入门,如何熟练谈谈想法。先说单片机,现在用的比较多的以51为内核的8位单片机(考虑到成本及引脚资源在实际开发中用的51单片机型号不一),它的学习资料非常多,且学习成本非 常低,可能有些初学者会说企业里用的不是5

2017-05-13 21:37:12 862

原创 单片机独立按键

通常的按键分为独立式按键和矩阵式按键两种,独立式按键比较简单,并且与独立的输入线相连接 4条输入线接到单片机的IO口上,当按键K1按下时,+5V通过电阻R1然后再通过按键K1最终进入GND形成一条通路,那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,那么KeyIn1和+5V就应该是等电位,是一个高电平。我们就可以通过KeyI

2017-04-25 21:42:09 3661

原创 矩阵键盘万用板焊接

估计就是这样的。。。

2017-04-24 22:16:33 2055

原创 NAND flash简单应用

#include <stdio.h>#include <stdlib.h>#include <string.h>#include "mmu.h"#include "typedef.h"#include "S3C2451_gpio.h"#include "S3C2451_uart.h"#include "S3C2451_lcd.h"#include "S3C2451_adc.h"#i

2017-04-23 22:22:41 524

原创 ARMlcd的简单使用

#include <stdio.h>#include <stdlib.h>#include <string.h>#include "mmu.h"#include "typedef.h"#include "S3C2451_gpio.h"#include "S3C2451_uart.h"#include "S3C2451_lcd.h"#include "S3C2451_adc.h"//

2017-04-22 22:07:50 611

原创 51单片机中控制PWM波

#include <reg52.h> sbit PWMOUT = P0^0; sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; unsigned char HighRH = 0; //高电平重载值的高字节

2017-04-21 21:58:55 3348 1

原创 求解斐波那契数列

一:递归实现使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1。二:数组实现空间复杂度和时间复杂度都是0(n),效率一般,比递归来得快。三:vector<int>实现时间复杂度是0(n),时间复杂度是0(1),就是不知道vector的效率高不高,当然vector有自己的属性会占用资源。四:queue<int>实现当然队列比数组更适合实现

2017-04-20 22:02:32 397

原创 PCB布线规则

PCB布局布线的一些常用的规则 1 电源、地线的处理既使在整个PCB板中的布线完成得都很好,但由于电源、 地线的考虑不周到而引起的干扰,会使产品的性能下降,有时甚至影响到产品的成功率。所以对电、 地线的布线要认真对待,把电、地线所产生的噪音干扰降到最低限度,以保证产品的质量。 对每个从事电子产品设计的工程人员来说都明白地线与电源线之间噪音所产生的原因, 现只对降低式抑制噪音作以表述: 众所周知的

2017-04-19 21:57:29 1083

原创 哈夫曼树

1、基本概念a、路径和路径长度若在一棵树中存在着一个结点序列 k1,k2,……,kj, 使得 ki是ki+1 的双亲(1<=i<j),则称此结点序列是从 k1 到 kj 的路径。从 k1 到 kj 所经过的分支数称为这两点之间的路径长度,它等于路径上的结点数减1.b、结点的权和带权路径长度在许多应用中,常常将树中的结点赋予一个有着某种意义的实数,我们称此实数为该结点的权,(如下面一个树中的蓝色数

2017-04-18 20:53:18 450

转载 TCP通信丢包问题

如果通信中发现缺少数据或者丢包,那么,最大的可能在于程序发送的过程或者接收的过程出现问题。 例如服务器给客户端发大量数据,Send的频率很高,那么就有可能在Send时发生错误(原因可能是又多种,可能是程序处理逻辑问题,多线程同步问题,缓冲区溢出问题等等),如果没有对Send失败做处理重发数据,那么客户端收到的数据就会比理论应该收到的少,就会造成丢数据,丢包的现象。 这种现象,其实本质上

2017-04-17 22:43:16 1457

原创 S3C2451_lcd 函数封装

S3C2451_lcd.h#ifndef _S3C2451_LCD_H__#define _S3C2451_LCD_H__#include "typedef.h"typedef struct{ U32 VIDCON0; U32 VIDCON1; U32 VIDTCON0;

2017-04-16 22:25:10 639

原创 二路归并排序

将两个按值有序序列合并成一个按值有序序列,则称之为二路归并排序,下面有自底向上和自顶向下的两种排序算法,自顶向下的排序在本文末讲述,使用递归实现,代码较简洁,经供参考。1. 归并子算法:把位置相邻的两个按值有序序列合并成一个按值有序序列。例如把序列 X[s..u] = {3, 12, 23, 32}和 序列 X[u+1..v] = {2, 5, 8, 99} 合并成序列 Z[s..v] = {2,

2017-04-15 22:04:14 437

原创 define中的U/L

U和L是 整数文字量的后缀修饰,用于显示指明整数文字量的类型为unsigned int(U)和long int(L)。 类似的还有浮点数文字量的后缀修饰F或f,用于指明文字量表示的是一个float,而不是默认情况下的double。经常发现一些C语言中通过#define 定义的数据中包含有UL符号,不理解为什么,把他去掉发现也没有什么区别。现在才明白UL是标记该宏长整型 十进制 数据,而不是字

2017-04-14 22:24:40 1533

原创 printf输出缓存问题

printf输出函数,每执行一个printf输出函数,输出的数不是“肯定立刻”打印到屏幕上的,只有遇到一下几种情况时,printf输出的数据(执行了printf,但还没有打印到屏幕的数据)才会全部打印到屏幕上:1、有输入请求的时候,会立马输出到屏幕2、输出有换行符的时候,也会马上输出到屏幕上3、程序结束的时候也会马上输出到屏幕上4、输出缓冲区满的时候linux下除非碰到换行符(\n),否则会

2017-04-13 22:21:33 939

原创 关闭回显

#include <termios.h> #include <stdio.h> #include <stdlib.h> #define PASSWORD_LEN 8 int main() { struct termios initialrsettings, newrsettings; char password[PASSWORD_LEN + 1];

2017-04-12 22:25:12 1477

原创 聊天室服务器基本代码分享

#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <sys/un.h>#include <netinet/in.h>#define SER_PORT 3333struct message{ int action;

2017-04-10 22:32:38 395

原创 PID

PID=port ID,在STP(生成树协议)中,若在端口收到的BPDU中BID和path cost相同时,则比较PID来选择阻塞端口。数字电视复用系统名词 PID(Packet Identifier) 在数字电视复用系统中它的作用好比一份文件的文件名,我们可以称它为“标志码传输包” 。工程控制和数学物理方面 PID(比例积分微分)英文全称为Proportion Integration Differ

2017-03-20 21:59:05 484

原创 LED点阵

#include <reg52.h> //包含寄存器的库文件sbit LED = P0^0;sbit ADDR0 = P1^0;sbit ADDR1 = P1^1;sbit ADDR2 = P1^2;sbit ADDR3 = P1^3;sbit ENLED = P1^4;void main(){ ENLED = 0; ADDR0 = 0; ADDR1 = 0

2017-03-14 21:50:26 515

原创 ARM矩阵键盘带消抖

/*********************************************************************************************函数名:4*4键盘扫描驱动调 用:scan_Key ();参 数:无返回值:按键值结 果:备 注:/**********************************************

2017-03-13 20:38:54 1323

空空如也

空空如也

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

TA关注的人

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