摘要: 几种零值比较的情况:1. bool类型与零值bool bTestVal;最好写成 if(bTestVal) 和if(!bTestVal)而不要写成:if(bTestVal == 0)和if(bTestVal != 0)//容易误会也不要写成:if(bTestVal == TRUE )和if(bTestVal == FALSE)//有些编译器把TRUE当作-1,如visual basic2. float变量与零值的比较float fTextVal = 0.0;if((fTextVal >=0.0 - EPSINON)&&(fTextVal <=0.0 + EPSINO 阅读全文
posted @ 2012-11-18 20:34 枫部落 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 在计算机系统中,数值一律用二进制补码进行表示,补码的计算规则是:补码 等于 原码按位 取反 再 加 1。有符号类型的数值,最高位是符号位,1为负数,0为正数。按照补码计算规则,可得 正数的补码等于其原码。如:char num;num = 1;如 +1 的原码是 0000 0001 ,补码也是 0000 0001;而 - 1 的补码是 1111 1111。以下以8位有符号类型的数值来认识一下补码:可以看到,当用8位来存储数据时,数据的大小范围是 -128到127。可以发现,+127加1后,如果是无符号的,表示的是128,但如果是有符号的,则刚好是-128的补码,再加1,是-127的补码。而,-1 阅读全文
posted @ 2012-11-18 17:06 枫部落 阅读(1018) 评论(0) 推荐(0) 编辑
摘要: 定义一个共同体跟定义struct的方式差不多首先定义一个结构体:typedef struct{ unsigned char floor; unsigned charroom; unsigned short region;}position;再定义一个共同体typedef union{position lightpos;unsigned char posbyte[4];}p;如果如下赋值:p.lightpos.floor = 0x10;p.lightpos.room = 0x01;p.lightpos.region = 0x0501;则:p.posbyte[0] = 0x10;p.posbyte 阅读全文
posted @ 2012-11-15 21:35 枫部落 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 静态区:保存自动全局变量和static 变量(包括 全局和局部static变量)。静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配。栈:保存局部变量和函数形参。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。其特点是效率高,但空间大小有限。堆:由malloc 系列函数或new 操作符分配的内存。其生命周期由free 或delete 决定。堆是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存 。由此可见,堆获得的空间比较灵活,也比较大。 阅读全文
posted @ 2012-10-17 15:25 枫部落 阅读(151) 评论(0) 推荐(0) 编辑
摘要: C语言中位操作非常基础,也很重要,用好了可以很有用。讲一下与(&)操作和或(|)操作有一个数 0101 0101(B,二进制)0101 0101 & 0000 1111 = 0000 0101;0101 0101 | 0000 1111 = 0101 1111;可以看出,& 操作保留了1对应的位,0对应的位变0;| 操作保留了0对应的位,1对应的位变1。我做嵌入式开发,调程序有时喜欢用板上的LED灯来显示程序运行状态。如果是单线程的,这很好办,只需要在不同的代码后面插入LED状态就行了,比如8个LED灯,这样都可以有255种状态显示了。但如果是多线程的,就不一样了。想同 阅读全文
posted @ 2012-10-12 21:06 枫部落 阅读(1198) 评论(0) 推荐(0) 编辑
摘要: 一片薄薄的钢片,按照PCB上的表面贴焊盘来刻孔,让它放在PCB上,刚好可以露出焊盘。用刀片把锡膏往钢网上一刮,然后拿起钢网,于是PCB上的焊盘上就有锡膏了,然后再贴料过炉。钢网的厚度直接影响刮上去的锡膏厚度。 阅读全文
posted @ 2012-10-12 20:41 枫部落 阅读(511) 评论(0) 推荐(1) 编辑
摘要: 从外观上分,有源晶振和无源晶振都分为插脚型和贴片型。插脚型:两只脚的肯定是无源晶振,个别有三只脚的无源晶振有一只脚和外壳连着。4只脚或多于4只脚的一般都是有源晶振。贴片型:两只焊盘或三只焊盘的一般都是无源晶振。四只焊盘的即有无源晶振也有有源晶振,区分的方法可以用万用表测,无源晶振的四只焊盘按对角线的方法测量电阻其中一个对角线是通的且和外壳相通,另一个对角线的电阻是无穷大。而四只焊盘的有源晶振一般只有小于等于一只焊盘是和外壳通的,另相同大小的有源晶振一般比无源晶振的重量重一点点,有的厚度也厚一点点。多于四只焊盘的一般肯定是有源晶振了。从名称上分,无源晶振一般叫谐振器、XTAL等,具体叫法一般是叫 阅读全文
posted @ 2012-09-28 10:36 枫部落 阅读(3077) 评论(0) 推荐(0) 编辑
摘要: typedef可以用来定义用户自己的数据类型,但我总是忘记使用格式,容易跟#define混淆,今天突然想到应该怎么写typedef不容易写错。如我要定义一个 double 类型的变量 real,是写成 double real; 这个初学C语言的人都会; 这时只在要这个语句的前面加个 typedef, 变成typedefdouble real;这时real就不是变量,而是被定义为一个新的类型了,这个新的自定义的类型其实就是double。再如:double real[20];-->typedef double real[20];则定义real为一个新的类型,是一个有20个double类型数据 阅读全文
posted @ 2012-09-16 13:00 枫部落 阅读(271) 评论(0) 推荐(0) 编辑
摘要: *是去引用运算符,或称之为间接引用运算符首先看一下 普通形参int add1(int a){ return a+1;}void main(){ int num = 10; int num2; num2 = add1(num);}在这种情况下,num的值不会因为调用了add1而改变,即实参的值不变。再来看一下 指针参数void add2(int *p) {*p +=1;} void main(){ int num1; add2(&num1);} 使用指针做为函数的形参,指针的值(即&num1)不会因为*p+=1而受到影响,但是&num1这个地址里存放... 阅读全文
posted @ 2012-09-11 16:16 枫部落 阅读(5318) 评论(0) 推荐(0) 编辑
摘要: 一开始以为用IOWR和IORD可以对FLASH进行读写,但是没有成功,后来看了OO无双的博客,才发现altera提供了对flash操作的hal,直接用就行。1. 包含flash HAL的头文件,添加语句:#include "sys/alt_flash.h" // flash HAL2. 打开flash设备:alt_flash_fd *fd =alt_flash_open_dev(CFI_FLASH_0_NAME);如果失败,fd = 0;3. 写flash设备:alt_u8return_code = alt_write_flash(fd, 0, writedata, 6); 阅读全文
posted @ 2012-07-25 11:52 枫部落 阅读(974) 评论(0) 推荐(0) 编辑
点击这里给我发消息