自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 资源 (3)
  • 收藏
  • 关注

原创 I/O 口在矩阵扫描时-输出接输出时

1.PIN读到的值是管脚的逻辑电平,而port读到的是锁存器的值。2.不论如何配置DDxn,都可以通过读取PINxn寄存器得到引脚电平。 3. 实际在做矩阵扫描时,小杨将4个管脚设为(DDxn,PORTxn = 1,0),另外4个管脚设为(DDxn,PORTxn = 1,1)在按下按键后发现,(1,1)的管脚PINxn =1,但(1,0)中按键接通的管脚PINxn =1

2011-06-23 20:11:00 1175

原创 UCSRC

在设置UCSRC寄存器的时候要注意:1.要一次性把所有位都设置完,否则只有后面设置的那一句生效2.设置时,必须同时设置URSEL位,使能写UCSRC。 例如,我刚开始设的:UCSRC |= (1|(1UCSRC |= (1|(1UCSZ1);      //set data length 8设置完第二句后,第一句奇校验便失

2011-06-21 19:57:00 922

转载 UBRRH和UCSRC 寄存器问题

UBRRH和UCSRC两个寄存器共用一个地址,在AVR STUDIO里看不到UCSRC的变化,以为UCSRC没有设置上,后来仔细看了MEGE16的技术资料发现,要想读出UCSRC的值必须先读UBRRH,并且在读UBRRH之后,立即读UCSRC,这期间不能有任何的延时或中断发生。AVR STUDIO里看不到UCSRC的值不表示UCSRC没有被设置,这你只要把程序放到硬件上跑一下,在用电脑监视

2011-06-21 11:55:00 1664

转载 AVR 启动时间 设置方法

1。系统电源中有大的电容,上电速度比较慢(到达标准值时间长)2。系统中其它的器件自己需要上电初始化,然后才能接收AVR的指令。3。上电后马上要对片内EEPROM操作,但此时电源不稳定会出现问题比如使用LCD2*16模块。此模块4V以上才能自己做初始化,然后接收AVR的指令。但AVR3V就工作了,马上发指令给LCD模块,LCD是不会响应的,通常形成显示不正常。此时可以考虑加长AVR的启动

2011-06-21 09:04:00 3075

转载 正确配置AVR熔丝位的建议

对AVR熔丝位的配置是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项。有关ATmega128熔丝位的具体定义和功能请查看本书相关章节,在附录中将给出一个完整的汇总表。        (1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态,“Un

2011-06-21 08:38:00 1014

转载 晶体 vs 晶振

晶体(Crystal)是自然界存在的石英材料,也可以人造石英,目前做晶振的石英基本上都是人造的。其具有的压电效应被人们用其来做频率基准。可以这么说吧,它就是块以特定方式(AT或BT等)切割的水晶。用它作振荡器时,结合具体的振荡电路(如克莱拍,考皮兹等)完成一个完整的振荡电路的功能。那完整的振荡电路就是有源电路,而其中所用的一块晶体就是无源晶体,有人叫无源晶振,那是不准确的。如果把完整的带晶体的振荡

2011-06-21 08:34:00 1120

转载 AVR开发前准备—熔丝位(Fuse)快速入门- 时钟

AVR通过熔丝来控制芯片内部的一些功能,比如JTAG,时钟的使用,掉电检测电压,是否允许调试等。AVR Studio 中 STK500 处理熔丝位有巨大的优势:它是以功能组合让用户配置。 这种方式与小马(PnoyProg2000,SL-ISP)相比,具有以下的优势(优势是如此明显,可以用“巨大优势”来形容): 有效避免因不熟悉熔丝位让芯片锁死 (这是初学者的恶梦), 笔者

2011-06-21 08:27:00 1496

原创 scanf

  int main(int argc, char* argv[]){     char Packed_Periodic_Data = 0;     char KeyValue = 0;    while(0xFF != KeyValue)    {        scanf("%c",&KeyValue);            //输入字符后回车,程序会将‘回车’也

2011-06-15 22:33:00 370

转载 宏定义函数指针类型&函数返回左值类值

1.宏定义不分配内存,变量定义分配内存。 2.宏名和参数的括号间不能有空格 3.宏替换只作替换,不做计算,不做表达式求解 //下面是正确的标准的写法 typedef int(FUNC1)(int in); typedef int(FUNC2) (int*,int*,int*); //下面两种宏的写法容易出错,是宏定义中应避免的, typedef int FUNC1 (int in); typede

2011-06-14 16:28:00 1498

转载 C语言中宏定义和函数的取舍

要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义:#define MAX( a, b) (

2011-06-14 16:22:00 414

转载 GNU C 扩展(二)

七、attribute机制在GNU C中, 允许声明函数、变量和类型的特殊属性,以便指示编译器进行特定方面的优化和更仔细的代码检查。使用方式为在声明后面加上: __attribute__(( ATTRIBUTE ))。关键字__attribute__用来在声明的时候指定一个特定的属性。该关键字后面紧跟两对圆括号,括号里指定具体的属性,多个说明之间以逗号分隔。GCC支持很多属性,常用的有以下这些

2011-06-13 22:53:00 405

转载 GNU C扩展(一)

要研究LINUX内核,C语言是基础中的基础,但是LINUX并不是完全的标准C,而是对标准C做了很多扩展,这些扩展特性对于我们分析内核有着很重要的作用,下面做些总结性的工作。一:柔性数组(flexible array) 柔性数组也称为零长度数组,或者零长度数组。这种数组通常在结构体当中出现,它本身并不占用空间,但是有了柔性数组意味着结构体的尺寸充满了变数。例如以下例子:struct  usb_i

2011-06-13 22:51:00 370

转载 声明和定义的区别

声明(declaration)引入一个名字,而定义(definition)给出程序中各个实体(entity,比如函数,类型等)的完整唯一的描述。一个声明就是一个定义,除非:1. 它声明了一个函数但是没有给出函数体。(问题e)2. 它使用了extern关键字。 (问题d)3. 它声明了一个类的名字。4. 它是typedef。5. 它在类定义中声明了static members.

2011-06-12 15:38:00 370

转载 更深入一点理解 switch 语句 及 c/c++ 对 const 的处理

 前段时间在论坛上看见台湾李维在>一书中对windows编程模式中,消息处理部分有如下的一些分析: 他说,在消息处理循环中,一般的形式是这样的 MSG msg ; switch( msg ){         case WM_XXXXXXX :                 ....         case WM_XXXXXXX :                 ....        

2011-06-12 15:37:00 391

原创 矩阵按键扫描

I/O操作:复位时各引脚为高阻态(tri-state),即使此时没有时钟在运行。 1.    引脚配置为输入时DDxn=0,若PORTxn 为"1“,上拉电阻将使能。        引脚配置为输出时DDxn=1,若PORTxn 为"1“,引脚输出高电平("1“),否则输出低电平(“0“)。 2.    在( 高阻态) 三态({DDxn, PORTxn} = 0b00) 输出高电平(

2011-06-10 22:07:00 1006

原创 SATA

2011.6.10 现在的情况是bsp中没有提供sata部分的驱动,只有对专用sata芯片下的驱动。彪哥提出来一种开发方案:先根据《vxWork设备驱动详解》了解旧版的sata驱动流程,然后根据vxWorks6.6提供的bsp开发文档,了解6.6版本下的驱动流程,然后参考专用sata驱动中的流程和数据结构开发sata驱动。

2011-06-10 15:55:00 806

转载 Linux 汇编语言开发指南

汇编语言的优点是速度快,可以直接对硬件进行操作,这对诸如图形处理等关键应用是非常重要的。 C语言开发的操作系统,这使得很多程序员开始忘记在Linux平台上编写汇编代码的程序员提供指南,介绍Linux汇编程序。一、简介作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 C语言编写的,但仍然不可避免

2011-06-07 18:11:00 2550

原创 ISR之不能做什么

中断是嵌入式系统中重要组成部分,很多编译器开发商都让标准c支持中断,并引入关键字_interrupt.但是:1、ISR不能有返回值;2、ISR不能传递参数;3、ISR应该是短而高效的,在ISR中做浮点运算是不明智的;4、ISR中不应该有重入和性能上的问题,因此不应该使用pintf()函数。  转自CSDN 1.ISR 不能有返回值。为什么?2.ISR 不能传

2011-06-07 18:06:00 3933

转载 AVR编程中 (GCC) SIGNAL与ISR的区别

在 interrupt.h中(Copyright (c) 2007)有:/*   /def ISR(vector [, attributes])    /ingroup avr_interrupts    /code #include /endcode    Introduces an interrupt handler function (interrupt service

2011-06-07 18:01:00 3645

转载 __attribute__

GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function     Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__att

2011-06-07 15:38:00 481

转载 c 语言中插入汇编使用的格式

AT&T ASM Syntax1 Overview 开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size。另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能。所以我们必须了解汇编语言,即使你有可能并不喜欢它。如果你是计算机专业的话,在大学里你

2011-06-07 15:37:00 770

转载 嵌入式及手机开发[笔试题目]

嵌入式及手机开发[笔试题目]千辛万苦搞来的,不过很多题目都见过了,比如《想成为嵌入式程序员应知道的0x10个基本问题》上面的。所以有些答案就可以直接去http://blog.csdn.net/ShorminHsu/archive/2007/03/24/1539458.aspx找。这里先放上题目,答案等后期整理出来吧。题目:1。用预处理指令#define 声明

2011-06-07 15:35:00 1102

转载 不定參數的 C 函式

不定參數的 C 函式 只要寫過 C 程式的人,都用過 printf 這個函式,也都知道它可是一個 不定參數的函式,了解它的運作方式,你也可以實作自己的不定參數的 函式。 先看一下 printf 的原型: int printf( const char *format [, argument]... ); 在format後面的參數

2011-06-07 15:34:00 455

转载 volatile

1.关于 volatile 我觉得这样的解析最容易理解:如果编译器在代码中发现对同一地址的两次访问之间,没有对该地址进行写操作,那么编译器将优化为第一次寻址读该地址时取得的值作为第二次寻址的值,而并不是再做第二次物理上的 I/O 寻址操作。volatile 关键字指示编译器进行强制 I/O 寻址,因为编译器那样的优化,可能并不是我们真正期望的,譬如那个地址上连接着一个传感器上的寄存器,那么实际上,

2011-06-07 15:27:00 543

转载 asm volatile()所表示的意思

Inline Assembler Cookbook AVR-GCCInline Assembler Cookbook About this Document The GNU C compiler for Atmel AVR RISC processors offers, to embed assembly language code into C programs. This co

2011-06-07 15:26:00 17759 1

转载 __asm__ __volatile__("": : :"memory")

memory 强制gcc编译器假设RAM所有内存单元均被汇编指令修改,这样cpu中的registers和cache中已缓存的内存单元中的数据将作废。cpu将不得不在需要的时候重新读取内存中的数据。这就阻止了cpu又将registers,cache中的数据用于去优化指令,而避免去访问内存。    The GCC manual says using 'asm volatile' preve

2011-06-07 15:24:00 8130 1

精通Qt4编程 part2

精通Qt4编程 part2 qt4book 有源代码

2010-06-06

精通Qt4编程 part1

精通Qt4编程 part1 qtbook 中文扫描版

2010-06-06

qt4 白皮书 英文版

qt 4 白皮书 英文版 qt4book 很有用的Qt4开发用书

2010-06-06

空空如也

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

TA关注的人

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