machao 发表于 2004-12-4 10:20:29

AVR应用经验

AVR应用经验



    AVR与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提高和改善。

    但使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。

    功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1赛车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。

    AVR具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR的优点,还需要应用工程师本身的硬软件设计开发能力的不断学习、实践提高。

   “外行看热闹,内行看门道”,对于有一定基础的嵌入式和单片机系统设计开发的工程师,不妨先简单尝试一下AVR。



开发环境与工具:PC+下载线+实际的系统板

    PC上的开发软件:

      AVR Studio(Free)汇编+汇编调试+高级语言调试+软件仿真

      ICC、CVAVR、BASCOM-AVR高级语言程序开发+程序下载。其中一个购买正版全功能,作为主要的开发环境,其它使用DEMO版,作为辅助及参考。

    AVR ISP下载线:

       STK200 and STK200+ and STK300ISP programmer。通过PC的打印机口,采用ISP技术将系统运行代码(HEX、BIN)和数据写入AVR芯片的Flash和EEProm中,编程AVR的配置熔丝位和加密位。支持决大多数的AVR芯片、以及ATMEL的51兼容芯片89S8252、89S52等。在ICC、CVAVR、BASCOM-AVR、BASCOM-8051中都内含对该下载线的支持程序。免费专用的下载程序:SLISP、PonyProg2000等。



尽量不使用仿真器的建议:

    在开发和调试系统程序时,有许多人完全依赖于仿真器,一旦离开了仿真器时就感觉无从下手。其实,由于AVR的Flash存贮器可方便的使用ISP技术在线的多次擦写,因此建议尽量不使用(依赖)仿真器来开发和调试程序。

    在实际开发过程中,程序的调试可以从下几方面入手:

    现在的高级语言编译器(如C编译器)可以产生效率很高的机器代码,因此建议大家尽量使用高级语言编写系统程序。

    使用Atmel公司提供AVR Studio软件模拟仿真环境,以及其他的软件模拟仿真环境(BASCOM-AVR)。

    尽可能使用高级语言编写系统程序。

    利用目标板上的LED、LCD或异步串口。见附件“没有仿真器的情况下如何开发AVR”的介绍。



提高硬件设计的合理性:

    尽量合理和充分使用AVR片内的资源,如EEPROM、A/D、内部的RC振荡源。

    尽量采用串口通信连接的外围器件,大容量的存储器、LCD控制器、打印机、不用8279(LED数码管+键盘)而使用7279等。除了必须外扩RAM(如语音和图象),一般不提倡使用并行扩展(573+译码电路),减小硬件和连线以及PCB板上错误的出现概率,同时也提高了系统的可靠性。并行扩展向串行扩展是发展趋势。现在有大量的新的外围器件采用高速的串行接口,如A/D、D/A、RTC、存储器等。

    尽量使用以及在目标板上预留ISP程序下载接口,或使用IAP技术。

      优点:ISP接口与I/O的兼容性比JETAG好。

      缺点:不能在线调试





注意和掌握AVR配置熔丝位的使用:

    .系统晶振的选择

    .BOD的使用

    .启动延时

    .Mega8的PC6引脚,RESET与通用I/O的转换

    .JETAG接口和通用I/O的转换

    .启动向量的转换,BOOT-LOAT区大小的设置



提高硬件可靠性的考虑:

    .尽量采用片内晶体、采用低频率的系统时钟、振荡电路的输出小幅度。

    .选择合适的启动延时参数

    .使用BOD、片内的看门狗

    .合理休眠方式的使用

    .不用I/O口设定输出低电平

    .利用内部的EEProm和寄存器MCUCSR判断复位标志,进行不同的处理



提高软件设计的能力和水平:

    尽量合理采用高级语言设计编写系统程序。有许多人认为使用汇编写程序比较精简,而用高级语言开发会浪费很多程序空间,其实这是一种误解。对一个有经验的,而且非常熟悉某种单片机的汇编高手而言,他是能写出比高级语言更精简的代码。而对汇编不是很熟的开发者、或突然更换了一种新的单片机,您能保证一定可以写出比高级语言更简练的代码吗?

    高级语言的优越性是汇编语言不能比的:

      .程序移植方便

      .程序的坚固性

      .数学_运算的支持

      .条理清晰的结构化编程,程序的可维护性。

      .可协同开发软件,开发周期短。

    现在的高级语言编译器(如C编译器)已可以产生代码效率很高的机器代码,因此建议大家能用高级语言实现的程序尽可能使用高级语言写,在对速度和时序要求特严的场合可以采用混合编程的方法来解决。



更深入和全面的掌握各种串行通信协议的规程:

    嵌入式系统目前以大量的使用串行接口外围芯片和各种通信接口,如RS232、两线(I2C)、三线(SPI)、单总线、USB、CAN、TCP/IP等。开发人员和程序员应了解低层协议,熟悉硬件怎样和如何实现低层协议,如何定义可靠的上层应用协议,以及低层协议驱动同上层应用协议之间的接口设计(中间层软件的实现)等。

    硬件工程师的软件编写能力要提高,采用标准程序编写方式、完善的软件整体框架的设计、良好的数据结构和程序结构系统。(计算机软件专业的程序设计员对硬件不熟悉、大部分是在操作系统支持下编写软件,对低层接口和协议的驱动层以及接口也不了解,往往也编写不出好的单片机系统程序。)

    通信接口的编写应尽量

      .采用中断+缓冲区,

      .分层+结构化设计,

      .尽量不使用轮循方式(降低AVR的效率)。参见URAT(RS232)驱动+中间层软件示例。



采用好的系统设计模式:

    尽量不使用传统的前后台(中断)系统设计模式,任务之间相互影响和干扰,无法定时操作。如设计一个采用动态扫描方式驱动的8位LED数码管显示+动态扫描的4*4矩阵键盘。

    采用TimeTip+状态机设计+CASE结构,实现多任务并行运行系统设计方法。或时间触发式的系统设计。(见:《时间触发嵌入式系统设计模式》中国电力出版社 2004.6)

    移植小型嵌入式操作系统,如UCOS-II。在网上有些免费的基于AVR的简洁的操作系统。





提高C语言的编程能力和软件应用水平:

    熟悉和用好C中的数据结构体、指针应用、内存管理等较高级的应用。

   熟悉和了解你所使用的高级语言开发平台的特点。这些平台是针对某一类处理器的,包含许多特殊的不兼容的语句和扩展的结构、语句、函数等。尽管使用方便,但由于其不透明性和时间的不确定性,因此要合理使用。如C中的getchar()、putchar()等。



    AVR有多个开发平台,每个都有其特点和不足。能够综合使用这些平台,相互互补,能够提高开发效率。如通过ICC、CVAVR的程序生成器CodeWizard学习和了解AVR的硬件设置,简化计算,快速的生成程序基本模块,如“一个URAT(RS232)低层驱动+中间层软件示例”。





我的使用经验:

    .简单系统的开发使用BASCOM-AVR;

    .复杂系统开发以ICC或CVAVR为主;其它配合;

    .烧写AVR的配置熔丝位使用BASCOM-AVR;

dmh0208 发表于 2007-3-20 15:47:19

受教了~!

Sea_ocean 发表于 2007-4-2 20:44:19

学习!

ba_wang_mao 发表于 2007-9-12 09:27:03

我调试程序时使用系统提供的显示设备(数码管,液晶屏)来调试。
如果程序中某一段出现问题,则该段程序的每一个分支分别显示一个数值,基本上能够找到问题。

lhyj7080 发表于 2007-9-13 02:23:41

学习!

juebuguake 发表于 2007-9-14 13:38:55

学习

CYHourdev 发表于 2007-9-14 17:11:54

.不用I/O口设定输出低电平

────────────────────────────────────────────────────────────────────
datasheet P55:

If some pins are unused, it is recommended to ensure that these pins have a defined
level. Even though most of the digital inputs are disabled in the deep sleep modes as
described above, floating inputs should be avoided to reduce current consumption in all
other modes where the digital inputs are enabled (Reset, Active mode and Idle mode).

The simplest method to ensure a defined level of an unused pin, is to enable the internal
pull-up. In this case, the pull-up will be disabled during reset. If low power consumption
during reset is important, it is recommended to use an external pull-up or pull-down.
Connecting unused pins directly to VCC or GND is not recommended, since this may
cause excessive currents if the pin is accidentally configured as an output.
──────────────────────────────────────────────────────────────────────
马老师,不用的io口到底怎么设比较好?
数据手册说最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。是不是设成输出低电平更好?

machao 发表于 2007-9-14 18:05:48

不用I/O口设定输出低电平,请给出你的理由。

CYHourdev 发表于 2007-9-14 18:17:42

提高硬件可靠性的考虑:
    .尽量采用片内晶体、采用低频率的系统时钟、振荡电路的输出小幅度。
    .选择合适的启动延时参数
    .使用BOD、片内的看门狗
    .合理休眠方式的使用
    .不用I/O口设定输出低电平
    .利用内部的EEProm和寄存器MCUCSR判断复位标志,进行不同的处理
──────────────────────────────────────────────────────────────
.不用I/O口设定输出低电平

这句是楼主位里面的内容~~

Avrspeedup 发表于 2007-9-19 13:01:26

经验之谈往往使人们能少走弯路,谢谢马老师!

HGG2007 发表于 2007-10-3 14:14:01

謝謝馬老師.

machao 发表于 2007-10-6 08:12:38

to CYHourdev:

不用I/O口应该如何设定,需要根据实际的情况来决定的。

如果系统需要省电,如采用电池供电,那么根据手册的建议是使用内部上拉电阻,但此时I/O口工作在输入状态。因为只有I/O口为输入状态时,才能有内部上拉的功能。

而我在LZ位的帖子中已经说明,从“提高硬件可靠性来讲”,因此这里主要考虑系统的可靠性和抗干扰能力,建议设置成输出低电平。I/O引脚设置为“输出低电平方式”和“输入方式内部上拉有效”,后一种方式肯定省电,但这两种方式哪种抗干扰能力强?因此我请你给出理由,是想让你自己进行分析的。

你可以比较一个使用3v的系统和使用5v的系统,在其它条件一样的条件下,3V系统省电,而5V系统抗干扰能力强。

amwdnvfku 发表于 2007-10-30 17:32:07

太好了!

ralfak 发表于 2007-11-4 23:18:31

使用外部RAM经常会搞出一些莫名其妙的问题来,大多数是焊接和器件问题,AVR还没出过问题,我一直以为外部晶振比内部的好,除了可以用16M之外好像没有什么其他的优越性,
利用内部的EEProm和寄存器MCUCSR判断复位标志,进行不同的处理,这个MCUCSR寄存器很有用,我一直没关注过,可以判断上电复位,JTAG复位,复位键复位以及其他复位
串口通信缓冲也是今年才开始使用,AVR-GCC有个库,库里面有个buffer.c,很好用
尽量使用以及在目标板上预留ISP程序下载接口,或使用IAP技术。
      优点:ISP接口与I/O的兼容性比JETAG好。
这块作何解释,我一直都不喜欢留ISP接口,
烧器件也用的jtag

machao 发表于 2007-11-4 23:31:13

》我一直以为外部晶振比内部的好,除了可以用16M之外好像没有什么其他的优越性
频率精确、稳定、以及可以使用特殊频率如11.0592`(高速USART通信)都是优越性。

》这块作何解释,我一直都不喜欢留ISP接口, 烧器件也用的jtag
ISP拔掉后,3个I/O口可以继续使用。使用JTAG,一般要浪费4个I/O口,在系统中不能做它用了。当I/O口紧张时,采用SPI的ISP就有优势了,只是不能实现在片的调试。我是从来不使用JTAG口的。

ralfak 发表于 2007-11-4 23:43:32

I/O口使用MEGA128一般有结余,
频率精确、稳定、以及可以使用特殊频率如11.0592`(高速USART通信)都是优越性。
这些我知道
你在头文提到
提高硬件设计的合理性:
    尽量合理和充分使用AVR片内的资源,如EEPROM、A/D、内部的RC振荡源。
我只想问一下使用外部晶振除了增加成本之外,还有什么不好的地方

machao 发表于 2007-11-5 00:11:17

题目是讲AVR,并不是单指M128。如果M128外扩RAM的话,I/O也会紧张的。

如果不需要精确的测频率等,或USART要高速大量传递数据的话,当然就使用内部RC。不仅是元器件本身的成本,节约PCB面积,减少焊点,节省人工,采购、运输、仓库管理等等,对于批量的生产都需要考虑的。使用内部RC,还从另外的角度提高了可靠性,因为多个器件就多个故障的隐患,比如假焊等。

另外,象M8这样的芯片,使用内部RC,还可以多2个I/O口。

你不能光看M128,空调、冰箱、小家电之类的控制根本不需要使用M128。

avr-qq 发表于 2007-11-5 01:04:02

谢谢

ycii 发表于 2007-11-6 15:34:02

标记学习.

beidedise 发表于 2007-11-6 15:55:50

马老师的贴子看了很多,而且每次都要用心看几遍。

marco2000 发表于 2007-11-27 08:32:52

馬老師04年的貼子,才看到。很是有幫助呀!

ecat 发表于 2007-12-1 16:01:01

我不知道马老师的源代码在什么环境下写的,反正我特别不习惯CV的环境,字体太小了(刚接触,不知能否设置)。还有这些环境不支持函数括号的高亮显示,我在看马老师新书中最后一个奥运倒计时的例子中,那些括号,if else 看的眼都晕了,还好我后来用PN,头脑才清醒过来。

Feeling_MCU 发表于 2007-12-1 16:44:22

ecat, 想学VC++ + 番茄助手不,也是基于winavr gcc的,比PN编辑环境不知道好到哪里去了,很容易搞定的

Feeling_MCU 发表于 2007-12-1 16:52:05

我就从来不用仿真器,也不会用,感觉用仿真器很别扭。开发51,avr 从来没用过仿真器。

machao 发表于 2007-12-1 20:29:35

21楼,我是CVAVR+ SOURCE INSIGHT共用,在后者中编写程序,在前者中编译.

ecat 发表于 2007-12-1 21:07:16

22楼能否多介绍些?

jumpingpig 发表于 2007-12-10 21:09:05

好厉害~~

simonxx 发表于 2007-12-16 22:52:27

获益匪浅,顶顶顶!!

sciencehero 发表于 2007-12-16 22:55:52

多谢了,受教了,信心大增.

abcdezh 发表于 2007-12-25 10:32:48

谢谢
学习

konson32 发表于 2008-1-23 12:53:39

请问马老师,AVR的IO端口可以进行位操作吗?
可以的话又该怎么做呢?

konson32 发表于 2008-1-23 13:01:51

马老师,keil c51中如何在c语言里嵌入汇编?
我看些资料是这样
#pragma asm
;ASM code
#pragma endasm
但我编译不过,并提示以下错误
'asm/endasm' requires src-control to be active
不知还要对哪里进行怎样的设置?
而且我设置了"Generate Assembler SRC File","Assemble SRC File"还是不行

yinhe 发表于 2008-2-2 00:35:36

是啊,keil c51 C语言环境中嵌入汇编比AVR中麻烦多了,最大的讲究是那些参数的传递问题.不知是书上讲的不够透彻还是我的理解力不够,直到现在我还有些晕.
每个问题的解决,我都觉得马老师的论断很缜密,到位,清澈见底.

很希望对此马老师有个别具一格的讲述.

yinhe 发表于 2008-2-2 00:38:38

补充一下,我在ultraEdit中编辑,而在cvavr中编译

ysfeagle 发表于 2008-3-10 16:19:52

学习了~~

wanghu1232001 发表于 2008-4-1 22:03:24

PN稍微设置一下同样效果不次于SI,平时顶多几百行代码,PN用起来还是不错的,SI看起来有点眼花缭乱了,呵呵!!

avrviv 发表于 2008-4-3 20:31:00

多谢指点!~!~

wk2009 发表于 2008-4-7 17:39:50

UE中编代码 UE中MAKE 搞定 呵呵

pushifan 发表于 2008-4-7 22:07:44

我用AVR Studio + gcc + mkii对mage128进行仿真,程序大于64K后就不能编译了,是gcc有代码限制还是我的设置除了问题.恳请各位高人指点.不胜感激.

xiaofei656 发表于 2008-4-13 21:53:16

请问一下马老师, 你开发过AT90CAN128吗?如果有的话能提供一个简单的测试CAN控制器的程序吗?
谢谢!

tcygood 发表于 2008-4-16 13:49:33

好东西,要认真学啊

litteworm 发表于 2008-4-19 00:23:22

学习 谢谢了

chen1986sl 发表于 2008-4-19 00:32:31

看了马老师的AVR的书,书名忘记了 ,里面的例子看后才知道 我的C 简直就是白学习了 ./emotion/em044.gif./emotion/em044.gif

liuliwu 发表于 2008-4-22 08:49:37

谢谢马老师的指点,我们好好学习。

holycat 发表于 2008-4-22 10:52:38

  关于对不用的I/O脚的处理,我原来的做法是都置成输入+内部上拉。理由是:好的设计应尽量使产品皮实不易坏,即便万一有金属垃圾掉在板上,或调试时不小心短路一下,输入脚是安全的。
  但看了有些资料说上拉是要消耗电流的,所以从省电角度讲还是置输出的好,似有些道理,看来有时间得自己试一下到底咋样。如果真是置输出的省电,那么应该根据相邻脚的电平来选择高低,比如隔壁是GND的话置0,Vcc的话置1(有高有低的话就扔分币决定吧)——还是为了皮实。
  6楼的那段鬼话指出了很重要的一点,即在RESET期间的耗电问题。CMOS在静态时(不管0或1)的耗电是极省的,主要消耗在过渡过程。因RESET期间是没有上拉的,如果经常RESET的话那些置成输入的脚上电平可能会乱蹦而耗电。
  至于置成输出可提高抗干扰能力,说实话我现在没想出为什么来,可能的话望指点一下。

xufei043 发表于 2008-4-28 21:57:40

学习了,谢谢。

yibin818 发表于 2008-4-29 18:52:52

标记

yulongkui 发表于 2008-5-16 17:13:23

尽量不使用传统的前后台(中断)系统设计模式,任务之间相互影响和干扰,无法定时操作。如设计一个采用动态扫描方式驱动的8位LED数码管显示+动态扫描的4*4矩阵键盘。
    采用TimeTip+状态机设计+CASE结构,实现多任务并行运行系统设计方法。或时间触发式的系统设计。(见:《时间触发嵌入式系统设计模式》中国电力出版社 2004.6)

这个设计思想是怎么样,请马老师详细解释一下

machao 发表于 2008-5-16 18:46:38

48楼,在我编写的教材书中,后面的一些的示例中就采用了这种设计思路.

weiwgml 发表于 2008-5-21 13:53:30

受教

madha 发表于 2008-6-6 15:04:44

mark

zy851001 发表于 2008-6-17 11:46:06

标记,谢谢

pcj2007 发表于 2008-6-24 02:05:16

采用TimeTip+状态机设计+CASE结构,实现多任务并行运行系统设计方法。

这种方式,我自己编写试过的,开始觉得很不错,可以多任务并行运行。但是后来发现最大的问题在于分割任务使之小块化。但是这本身又有不确定性。一个任务是自己执行完一个状态后退出==无法掌控。

后来见很多人开始写自己的RTOS,老实说在AVR上写RTOS上很方便,主要是嵌汇编容易。GCC相当优秀。
也就看看别人的OS,学习改改,折腾了一段时间,有了一个自己的小OS,只有准时切换任务的功能。考虑到和其它主流OS的兼容标准,可移植性,现在也没再加东西。

Tigerjump 发表于 2008-6-29 19:01:17

51是我的起点,430是我的专长,PIC的页问题,让我很不顺心,知道AVR集51与PIC的长处于一身,喜出望外,学习入门,研究应用!我是AVR新手,有问题就请教各位了,论坛的人很热心,感觉真好!初来论坛,先拜访下马老师!

hsm7038 发表于 2008-6-30 11:49:32

马潮老师你好:
    我是一名天津的大学生,最近做过几个MEGA48的试验,现在又想进一步开发MEGA16的使用功能,我想问一下这芯片可以作为PLC来使用吗?还有着芯片可以编写PID软件吗?您做过这方面的试验吗?我想请教一下。多谢。我的邮箱hsm7038@sina.com

aozima 发表于 2008-6-30 13:07:25

向大家推荐一个编辑器:
cfree(http://www.programarts.com/)
我用破解版用了半年,前些天注册了一个SN!心里踏实多了!

longgy 发表于 2008-7-2 10:16:10

学习了

lhlhlhjay 发表于 2008-8-2 20:58:49

马老师编的书挺好的,我就是看马老师的书入门的~~

lhlhlhjay 发表于 2008-8-2 20:59:12

马老师编的书挺好的,我就是看马老师的书入门的~~努力学习AVR

mimipbr 发表于 2008-10-14 10:27:37

有时候调试比较大的程序,能仿真找问题还是快些。

mimipbr 发表于 2008-10-14 10:28:37

AVR怎么不都搞成单线仿真?

zswlb 发表于 2008-11-1 16:43:28

45 楼:
  关于对不用的I/O脚的处理,我原来的做法是都置成输入+内部上拉。理由是:好的设计应尽量使产品皮实不易坏,即便万一有
金属垃圾掉在板上,或调试时不小心短路一下,输入脚是安全的。 
------------------
非常赞同此话。

就AVR而言,我关心的更多的是电气上的损坏。

既然是多余的I/O,其逻辑状态,我也就不关心,也谈不上干扰。如果是真得有干扰存在,,那也避不了:
内部的上拉下拉,输入输出总是要用的---如果有的话,干扰总是存在的,但我们不会因为存在干扰而不使用输入或
输出的功能。


终于读到要找的这部分内容了:

  .利用内部的EEProm和寄存器MCUCSR判断复位标志,进行不同的处理

本贴被 zswlb 编辑过,最后修改时间:2008-11-01,16:45:33.

machao 发表于 2008-11-1 17:14:41

楼上,祝贺你自己找到关键的东西,实际上认真多看几遍手册,很多的答案都能找到。

flyerhacker 发表于 2009-3-10 16:09:13

学习

lgc-sdu 发表于 2009-3-12 15:37:47

xuexi le

cazhcs 发表于 2009-3-18 12:37:30

谢谢马老师的教悔.

yangguanguren 发表于 2009-5-10 20:10:50

马老师你怎么不建议我们使用avrgcc呢

houzengmin 发表于 2009-5-13 22:24:06

mark!

longquan 发表于 2009-5-13 22:42:00

学习

sunyouyuan 发表于 2009-5-15 15:46:43

学习了 谢谢马老师

iiset 发表于 2009-5-15 19:09:28

mark

xiuqi410 发表于 2009-5-22 16:02:26

学习中!!

hc235280 发表于 2009-5-30 19:49:02

记号学习

livanfield 发表于 2009-7-13 21:02:59

怎么好像没什么人用ICCAVR呢?貌似高手都不用?马老师认为呢?

ddbetter 发表于 2009-7-17 18:40:21

我来迟一步了

uestcduoduo 发表于 2009-7-17 19:47:53

ding mark

bbi3014 发表于 2009-9-17 20:21:15

狠;

shuangwei 发表于 2009-9-17 21:03:29

学习中,谢谢!

hejiangzai 发表于 2009-10-7 17:56:35

学习

ggyyll8683 发表于 2009-10-7 18:20:09

mark

yong_s 发表于 2009-10-11 19:22:53

受教

qingzhou 发表于 2009-10-11 19:34:10

mark

yinhe 发表于 2009-11-7 19:18:01

ji

809314596 发表于 2009-11-29 10:15:15

受教

Yaksa 发表于 2009-11-29 12:06:09

都是楼主的经验之谈啊

junmadianzi 发表于 2009-11-29 20:53:50

菜鸟请教:
1,能否简要介绍下TIMETIP.
2,时间触发式系统处理通讯时是否还得用中断,这与传统的前后台有什么区别.

axxszq 发表于 2009-12-3 18:15:06

xue xi xue xi

banyai 发表于 2009-12-3 20:07:06

个人感觉,在开发的时候,能用仿真器就用仿真器,一来可以快速的定位错误,减少开发时间。二来可以找到一些比较隐蔽的错误。因为我是做安全系统的,所以我们的程序最后都是单步检查每一条语句,确保没有任何问题,对其它的产品,我想也应该是这样。有一些问题:比如EEPROM重复写入,变量未赋初始值等,都可能在没有仿真器的情况下看不出来。需要注意的是:有了仿真器,不要有拼凑代码的想法,就是“改一下试试,看是什么结果,不行,再改.",发现错误,一定要仔细考虑,分析原因,找到问题,再修改。

zsy777 发表于 2009-12-9 01:38:49

mark

skyxjh 发表于 2009-12-10 21:40:19

受益!

longfeixue 发表于 2009-12-11 09:55:56

学习

yueguanghenji 发表于 2009-12-13 17:22:14

学习中.....

huangning 发表于 2010-3-15 15:39:47

hao ..

swustlx86 发表于 2010-3-22 16:43:38

学习

xiaowangkanqiu 发表于 2010-3-26 12:30:18

hao

abcrazy 发表于 2010-3-28 01:25:15

mark
好文!

longwu03272009 发表于 2010-5-4 23:40:08

mark

tangwei039 发表于 2010-5-5 08:16:22

mark

zcmhff 发表于 2010-5-12 10:52:42

正在学习中

rake 发表于 2010-5-12 11:37:46

学习
页: [1] 2
查看完整版本: AVR应用经验