阿里山's profile阿里山的共享空间PhotosBlogListsMore Tools Help

阿里山

There are no music lists on this space.

阿里山的共享空间

Photo 1 of 1
October 25

周末

     周六参加了浦东联营小学的支教活动。联营小学民工子弟学校,招收的都是来沪打工的学生。学制从一年到六年级。学生六年级时从老家转学过来的,也有从一年级就开始在这上学的。课程除了数学语文,也有英语、音乐、美术,但教师办公室逛了一圈,也没看到一台乐器。图书室很小,书也很少。教室看上去很像板房,走进去原来来是砖木结构。教室内部有电插座,也有风扇对付上海夏天湿热的天气。从教室的布置可以看出老师的安排是很随意的,黑板报写了一半,墙上的花纸也是好像也是学生自己贴上去,不太整齐。桌椅的综合板边都磨出毛边,腿也锈迹斑斑。操场比较小,只放了一个篮球板,孩子们争相投篮。孩子的父母是无奈的,对孩子们成长的环境很难有所为,但孩子好像是适应了这种环境,给什么样的条件他们就能怎么样的成长。希望我们的可为人士和部门能替这些孩子们多安排些未来的路。
November 10

下周大盘走势

      经过这周的震荡,大盘仍然不明朗。1、股市的价值是用流动资金表现的,最近没有新的资金加入,如新基金的发布,中国石油套住了不少资金;石油审购退回资金还没有动,大家明却想建仓权重股,而权重股还没跌破60日线,所以仍然在观望。海外流动资金因为周遍股市的暴跌,恒指和港指都创单周新底,不可能也对国内市场的兴趣太大,即使有也是小批量。2、技术层面,1月24日2994点调整,在3月5日结束于2723点,最低点2541,跌幅18%,最后止与30日均线。第二次调整,5·30",始于4335点,结束于7月5日的3614点,最低见到3404点,跌幅27.35%,两次探底60日均线。第三次中级调整,始于10月16日的6124点,至今仍然没有见到结束的迹象。3、市场参面,一、二次调整,蓝筹权重股的涨幅很小,又逢2007年中报公布之际,新会计制度的全面实施,人们发现众多蓝筹权重股的业绩增幅相当惊人,明显低估了权重股,因终止了调整。在经过三个月的上涨,指数涨幅近70%之后,蓝筹权重股的市盈率已近60倍,又逢第三季报公布之际。而第三季报显示出,以蓝筹权重股为主的上市公司,其业绩增速出现下降迹象,非权重股也跌跌不休,自然调整也就在所难免。4、人为因素,机构是追求利益最大化,不会轻易放弃对权重股打压探底。5、市场由人操作,不许有幻想和懦弱,下周有雨,收网整修。
October 01

UART

UART: Universival Asychronous Receiver/Transmitter 通用接收/发送异步传输

UART是一种较为通用的数据传输的方法(即Start Bit+Data+Check+StopBit),而COM口中Rx、Tx的数据格式即为UART。

RS232是UART的一种.计算机中的COM1和COM2都是RS232串行通信标准接口。当Uart接口连到PC机上时,需要接RS232电平转换电路。

什么是串行异步总线

任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接,那么连线将会错综复杂,甚至难以实现。为了简化硬件电路设计、简化系统结构,常用一组线路,配置以适当的接口电路,与各部件和外围设备连接,这组共用的连接线路被称为总线。采用总线结构便于部件和设备的扩充,尤其制定了统一的总线标准则容易使不同设备间实现互连。

----微机中总线一般有内部总线、系统总线和外部总线。内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连;而系统总线是微机中各插件板与系统板之间的总线,用于插件板一级的互连;外部总线则是微机和外部设备之间的总线,微机作为一种设备,通过该总线和其他设备进行信息与数据交换,它用于设备一级的互连。

----另外,从广义上说,计算机通信方式可以分为并行通信和串行通信,相应的通信总线被称为并行总线和串行总线。并行通信速度快、实时性好,但由于占用的口线多,不适于小型化产品;而串行通信速率虽低,但在数据通信吞吐量不是很大的微处理电路中则显得更加简易、方便、灵活。串行通信一般可分为异步模式和同步模式。

----随着微电子技术和计算机技术的发展,总线技术也在不断地发展和完善,而使计算机总线技术种类繁多,各具特色。下面仅对微机各类总线中目前比较流行的总线技术分别加以介绍。

一、内部总线
----1.I2C总线
----I2C(Inter-IC)总线10多年前由Philips公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,IC2总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。在I2C总线传输过程中,将两种特定的情况定义为开始和停止条件(如图3):当SCL保持“高”,SDA由“高”变为“低”时为开始条件;SCL保持“高”,SDA由“低”变为“高”是为停止条件。开始和停止条件由主控器产生。使用硬件接口可以很容易地检测开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样以使检测这种变化。

---- SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,每个字节必须有一个应答为ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态,当接收器械准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。

---- 数据传送具有应答是必须的。与应答对应的时钟脉冲由主控器产生,发送器在应答期间必须下拉SDA线。当寻址的被控器件不能应答时,数据保持为高,接着主控器产生停止条件终止传输。在传输的过程中,当用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器,被控发送器必须释放数据线,以允许主控器产生停止条件。合法的数据传输格式如下

超始位 被控接收器地址 R/W 应答位 数据 应答位 、、、、 停止位

---- I2C总线在开始条件后的首字节决定哪个被控器将被主控器选择,例外的是“通用访问”地址,它可以寻址所有期间。当主控器输出一地址时,系统中的每一器件都将开始条件后的前七位地址和自己地址比较。如果相同,该器件认为自己被主控器寻址,而作为被控接收器或被控发送器则取决于R/W位。

---- 二、I2C总线的应用

---- I2C总线是各种总线中使用信号线最少,并具有自动寻址,多主机时钟同步和仲裁等功能很强的总线。因此,使用I2C设计计算机系统十分方便、灵活、体积也小,在各类实际应用中得到广泛应用。下面举两个应用示例。

----1. 伺服控制系统用I2C扩展LCD显示

---- 图5是一个伺服系统的结构图。用8XC752单片机的PWM输出经放大后驱动电机,电机的转速有测速机测取并直接送到8XC752片内A/D电路。处理后的有关信息经I2C总线送到LCD驱动芯片PCF8577以驱动六十四段LCD显示板

----2. 通用I/O端口作为I2C总线接口

---- 目前,51、96系列的单片机应用很广,但是它们都没有I2C总线接口,限制了在这些系统中使用具有I2C总线接口的器件。但通过对I2C总线时序的分析知道可以用51单片机的两根I/O线来实现I2C总线的功能。I2C总线规定SCL线和SDA线是各设备对应输出状态相“与”的结果,任一设备都可以用输出低电平的方法延长SCL低电平时间,迫使高速设备进入等待状态,实现不同速度设备间的时钟同步。因此,即使时钟脉冲的高、低电平时间长短不一,也能实现数据的可靠传送,可以用软件控制I/O口做I2C接口。下面就是用GMS97C2051DE的通用I/O口作为I2C总线接口由软件控制实现数据传送的例子,图6为其连线图。

----2.SPI总线

----串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。Motorola公司生产的绝大多数MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI总线是一种三线同步总线,因其硬件功能很强,所以,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。 它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOST和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT或INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。协议:SPI是一个环形总线结构,由ss(cs)、sck、sdi、sdo构成,其时序其实很简单,主要是在sck的控制下,两个双向移位寄存器进行数据交换。      假设下面的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。      那么第一个上升沿来的时候 数据将会是sdo=1;寄存器=0101010x。下降沿到来的时候,sdi上的电平将所存到寄存器中去,那么这时寄存器=0101010sdi,这样在8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个spi时序。


----3.SCI总线

----串行通信接口SCI(serial communication interface)也是由Motorola公司推出的。它是一种通用异步通信接口UART,与MCS-51的异步通信功能基本相同。

二、系统总线
----1.ISA总线
----ISA(industrial standard architecture)总线标准是IBM 公司1984年为推出PC/AT机而建立的系统总线标准,所以也叫AT总线。它是对XT总线的扩展,以适应8/16位数据总线要求。它在80286至80486时代应用非常广泛,以至于现在奔腾机中还保留有ISA总线插槽。ISA总线有98只引脚。

----2.EISA总线

----EISA总线是1988年由Compaq等9家公司联合推出的总线标准。它是在ISA总线的基础上使用双层插座,在原来ISA总线的98条信号线上又增加了98条信号线,也就是在两条ISA信号线之间添加一条EISA信号线。在实用中,EISA总线完全兼容ISA总线信号。

----3.VESA总线

----VESA(video electronics standard association)总线是 1992年由60家附件卡制造商联合推出的一种局部总线,简称为VL(VESA local bus)总线。它的推出为微机系统总线体系结构的革新奠定了基础。该总线系统考虑到CPU与主存和Cache 的直接相连,通常把这部分总线称为CPU总线或主总线,其他设备通过VL总线与CPU总线相连,所以VL总线被称为局部总线。它定义了32位数据线,且可通过扩展槽扩展到64 位,使用33MHz时钟频率,最大传输率达132MB/s,可与CPU同步工作。是一种高速、高效的局部总线,可支持386SX、386DX、486SX、486DX及奔腾微处理器。

----4.PCI总线

----PCI(peripheral component interconnect)总线是当前最流行的总线之一,它是由Intel公司推出的一种局部总线。它定义了32位数据总线,且可扩展为64位。PCI总线主板插槽的体积比原ISA总线插槽还小,其功能比VESA、ISA有极大的改善,支持突发读写操作,最大传输速率可达132MB/s,可同时支持多组外围设备。 PCI局部总线不能兼容现有的ISA、EISA、MCA(micro channel architecture)总线,但它不受制于处理器,是基于奔腾等新一代微处理器而发展的总线。

----5.Compact PCI

----以上所列举的几种系统总线一般都用于商用PC机中,在计算机系统总线中,还有另一大类为适应工业现场环境而设计的系统总线,比如STD总线、 VME总线、PC/104总线等。这里仅介绍当前工业计算机的热门总线之一——Compact PCI。

----Compact PCI的意思是“坚实的PCI”,是当今第一个采用无源总线底板结构的PCI系统,是PCI总线的电气和软件标准加欧式卡的工业组装标准,是当今最新的一种工业计算机标准。Compact PCI是在原来PCI总线基础上改造而来,它利用PCI的优点,提供满足工业环境应用要求的高性能核心系统,同时还考虑充分利用传统的总线产品,如ISA、STD、VME或PC/104来扩充系统的I/O和其他功能。

三、外部总线
----1.RS-232-C总线
----RS-232-C是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。RS-232-C标准规定的数据传输速率为每秒50、75、 100、150、300、600、1200、2400、4800、9600、19200波特。RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。

----2.RS-485总线

----在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。 RS-485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。RS-485用于多点互连时非常方便,可以省掉许多信号线。应用RS-485 可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。

----3.IEEE-488总线

----上述两种外部总线是串行总线,而IEEE-488 总线是并行总线接口标准。IEEE-488总线用来连接系统,如微计算机、数字电压表、数码显示器等设备及其他仪器仪表均可用IEEE-488总线装配起来。它按照位并行、字节串行双向异步方式传输信号,连接方式为总线方式,仪器设备直接并联于总线上而不需中介单元,但总线上最多可连接15台设备。最大传输距离为20米,信号传输速度一般为500KB/s,最大传输速度为1MB/s。

----4.USB总线

---通用串行总线USB(universal serial bus)是由Intel、 Compaq、Digital、IBM、Microsoft、NEC、Northern Telecom等7家世界著名的计算机和通信公司共同推出的一种新型接口标准。它基于通用连接技术,实现外设的简单快速连接,达到方便用户、降低成本、扩展PC连接外设范围的目的。它可以为外设提供电源,而不像普通的使用串、并口的设备需要单独的供电系统。另外,快速是USB技术的突出特点之一,USB的最高传输率可达12Mbps比串口快100倍,比并口快近10倍,而且USB还能支持多媒体。

September 23

typedef定义

己以前对typedef的应用只是停留在最简单的例子上面,最近两天在看QualNet协议源代码时出现了好多的typedef才发现对它的理解真是皮毛,在网上搜了下,专门查了下谭老师的C语言课本。收获列在下面:很多东西不是自己的呵呵) Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法? 1、使用 typedefs 为现有类型创建同义字,定义易于记忆的类型名 。  typedef 使用最多的地方是创建易于记忆的类型名,用它来归档程序员的意图。类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。例如: typedef int size;   此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size: void measure(size * psz); size array[4]; size len = file.getlength(); std::vector vs;   typedef 还可以掩饰符合类型,如指针和数组。例如,你不用象下面这样重复定义有 81 个字符元素的数组: char line[81]; char text[81]; 定义一个 typedef,每当要用到相同类型和大小的数组时,可以这样: typedef char Line[81]; Line text, secondline; getline(text); 同样,可以象下面这样隐藏指针语法: typedef char * pstr; int mystrcmp(pstr, pstr);   这里将带我们到达 typedef 陷阱。标准函数 strcmp()有两个‘const char *'类型的参数。因此,它可能会误导人们象下面这样声明 mystrcmp(): int mystrcmp(const pstr, const pstr);   这是错误的,按照顺序,‘const pstr'被解释为‘char * const'(一个指向 char 的常量指针),而不是‘const char *'(指向常量 char 的指针)。这个问题很容易解决: typedef const char * cpstr; int mystrcmp(cpstr, cpstr); // 现在是正确的 记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身是常量,而不是对象。 2、代码简化   上面讨论的 typedef 行为有点像 #define 宏,用其实际类型替代同义字。不同点是 typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。例如: typedef int (*PF) (const char *, const char *);   这个声明引入了 PF 类型作为函数指针的同义字,该函数有两个 const char * 类型的参数以及一个 int 类型的返回值。如果要使用下列形式的函数声明,那么上述这个 typedef 是不可或缺的: PF Register(PF pf);   Register() 的参数是一个 PF 类型的回调函数,返回某个函数的地址,其署名与先前注册的名字相同。做一次深呼吸。下面我展示一下如果不用 typedef,我们是如何实现这个声明的: int (*Register (int (*pf)(const char *, const char *))) (const char *, const char *);   很少有程序员理解它是什么意思,更不用说这种费解的代码所带来的出错风险了。显然,这里使用 typedef 不是一种特权,而是一种必需。持怀疑态度的人可能会问:"OK,有人还会写这样的代码吗?",快速浏览一下揭示 signal()函数的头文件 ,一个有同样接口的函数。 最后介绍下,谭老师的方法: typedef char Line[81]; Line text, secondline; 怎么看呢?(1)char text[81];(2)用新名称代替变量名(Line代替text)char Line[81];(3)在前面加typedef:typedef char Line[81]; 得到。当看代码时逆序即可。 最让人头疼的是回调函数的typedef定义了,太复杂了。 就是上面倾斜的那样。
 
No list items have been added yet.

Feed

The owner hasn't specified a feed for this module yet.