摘要: 1 #include <stdio.h> 2 #include <string.h> 3 #include <unistd.h> 4 #include <signal.h> 5 int g_iSeq=0; 6 7 void SignHandlerNew (int iSignNo ,siginfo_t *pInfo,void *pReserved) 8 { 9 int iSeq=g_iSeq++;10 printf("%d enter Signhandlernow.signo:%d.\n",iSeq,iSignNo);11 sl 阅读全文
posted @ 2013-02-16 16:39 notepi 阅读(803) 评论(0) 推荐(0)
摘要: PWM(PulseWidthModulation)控制——脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。 PWM控制技术在逆变电路中应用最广,应用的逆变电路绝大部分是PWM型,PWM控制技术正是有赖于在逆 变电路中的应用,才确定了它在电力电子技术中的重要地位。 1PWM控制的基本原理 理论基础: 冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。冲量指窄脉冲的面积。效果基本相同,是指环节的输出响应波形基本相同。低频段非常接近,仅在高频段略有差异。面积等效原理: 分别将如图1所示的电压窄脉冲加在一阶惯性环节(R-L电路)上,... 阅读全文
posted @ 2013-02-12 22:24 notepi 阅读(1176) 评论(0) 推荐(0)
摘要: 1 /* Copyright (C) 1991-2003, 2004 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 4 The GNU C Library is free software; you can redistribute it and/or 5 modify it under the terms of the GNU Lesser General Public 6 License as published by the Free Softw... 阅读全文
posted @ 2013-02-04 22:56 notepi 阅读(1412) 评论(0) 推荐(0)
摘要: 如果用这个类型名来定义变量,可以这样写:struct complex_struct { double x, y;} z1, z2;这样z1和z2就是两个变量名,变量定义后面带个;号是我们早就习惯的。但即使像上面那样只定义了complex_struct这个Tag而不定义变量,后面的;号也不能少。这点一定要注意,结构体定义后面少;号是初学者很常犯的错误。不管是用上面两种形式的哪一种形式定义了complex_struct这个Tag,以后都可以直接用struct complex_struct来代替类型名了。例如可以这样定义另外两个复数变量:struct complex_struct z3... 阅读全文
posted @ 2013-01-29 14:32 notepi 阅读(273) 评论(0) 推荐(0)
摘要: 头文件<setjmp.h>中的声明提供了一种不同于通常的函数调用和返回顺序的方式,特别是,它允许立即从一个深层嵌套的函数调用中返回。 int setjmp(jmp_buf env) setjmp 宏将状态信息保存到 env 中,供 longjmp 使用。如果直接调用 setjmp,则返回值为 0;如果是在longjmp 中调用 setjmp,则返回值为非 0。setjmp 只是用于某些上下文中,如用于 if 语句,switch 语句、循环语句的条件测试中及一些简单的关系表达式中。例如: if(setjmp(env) == 0) /* 直接调用 setjmp 时,转移到这里 */ e 阅读全文
posted @ 2013-01-25 02:12 notepi 阅读(326) 评论(0) 推荐(0)
摘要: #include <unistd.h>#include <stdio.h>#include <stdlib.h>int main(void){pid_t pid;if((pid=fork())==-1) { printf("error"); }else if(pid==0){printf("ok\n");exit(0);}else{printf("parent process,output begin\n");printf("hello word");_exit(0);}}调试后 阅读全文
posted @ 2013-01-24 04:03 notepi 阅读(7326) 评论(0) 推荐(0)
摘要: 我们在程序中使用的变量和函数都有各自的地址,程序被编译后,这些地址就成了指令中的地址,指令中的地址被CPU解释执行,就成了CPU执行单元发出的内存地址,所以在启用MMU的情况下,程序中使用的地址都是虚拟地址。一个操作系统中同时运行着很多进程,通常桌面上的每个窗口都是一个进程,Shell是一个进程,在Shell下敲命令运行的程序又是一个新的进程,此外还有很多系统服务和后台进程在默默无闻地工作着。由于有了虚拟内存管理机制,各进程不必担心自己使用的地址范围会不会和别的进程冲突,比如两个进程都使用了虚拟地址0x08048000,操作系统可以设置MMU的映射项把它们映射到不同的物理地址,它们通过同样的虚 阅读全文
posted @ 2013-01-24 02:03 notepi 阅读(794) 评论(0) 推荐(0)
摘要: 访问设备还有一点和访问内存不同。内存只是保存数据而不会产生新的数据,如果CPU不去读它,它也不需要主动提供数据给CPU,所以内存总是被动地等待被读或被写。而设备往往会自己产生数据,并且需要主动通知CPU来读这些数据,例如敲键盘产生一个输入字符,用户希望计算机马上响应自己的输入,这就要求键盘设备主动通知CPU来读这个字符并做相应处理,给用户响应。这是由中断(Interrupt)机制实现的,每个设备都有一条中断线,通过中断控制器连接到CPU,当设备需要主动通知CPU时就引发一个中断信号,CPU正在执行的指令将被打断,程序计数器会设置成某个固定的地址(这个地址由体系结构定义),于是CPU从这个地址开 阅读全文
posted @ 2013-01-24 00:26 notepi 阅读(249) 评论(0) 推荐(0)
摘要: 内存与地址我们都见过像这样挂在墙上的很多个邮箱,每个邮箱有一个房间编号。邮箱的地址使用时根据房间编号找到相应的邮箱,然后投入信件或取出信件。内存与此类似,每个存储单元有一个地址(Address),CPU通过地址找到相应的存储单元,取其中的指令,或者读写其中的数据。与邮箱不同的是,一个地址所对应的存储单元不能存很多东西,只能存一个字节,所以以前讲过的int、float等多字节的数据类型保存在内存中要占用多个地址,这种情况下把起始地址当作这个数据的地址。内存地址是从0开始编号的整数,最大编到多少取决于CPU的地址空间(Address Space)有多大。目前主流的处理器是32位或64位的,本书主要 阅读全文
posted @ 2013-01-23 23:26 notepi 阅读(438) 评论(0) 推荐(0)
摘要: #include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="i love you!";uchar code table1[]="WWW.TXMCU.COM";sbit lcdrw=P1^6;sbit lcdrs=P1^7;sbit dula=P3^6;sbit wela=P3^7;sbit lcden=P2^4;void delay_ms(uint);void write_date (uint);void write_com 阅读全文
posted @ 2013-01-23 16:51 notepi 阅读(1712) 评论(0) 推荐(0)