论坛风格切换切换到宽版
  • 6544阅读
  • 17回复

单片机的开发 [复制链接]

上一主题 下一主题
离线1259
 
发帖
373
只看楼主 倒序阅读 0楼 发表于: 2004-09-09
说说自己对单片机的开发的一些理解

单片机也就是mcu,或叫微控制器,是把cpu和存储器以及一些简单的外围设备集成在一起的芯片,可以方便的完成一些控制和计算的工作。

主要想说说单片机的开发。

单片机的开发离不开仿真,而仿真则离不开仿真器。

仿真主要是验证所开发的程序的执行情况,看看程序运行的结果和所预期的是不是一样。如果不一样,出现了什么问题,如何修改等。

仿真器包括软件仿真器和硬件仿真器。

软件仿真器也叫指令仿真器。现在,开发单片机的程序一般都不是在单片机的硬件平台上完成的,而是在pc机等上边完成的。因为这样工作起来更方便,不用每次都把代码放到单片机的硬件平台上去运行,另外,对于一些rom型,otp型的单片机,也必须这样做。但是要直接在pc机上跑单片机的程序,显然是不行的,这就相当于在80x86的cpu上跑8051的cpu的程序。所以,这里就需要指令仿真器了,也就是一般说的软件仿真器。它的作用就是在pc机上模拟出一个单片机的运行环境。在这个运行环境中,就可以运行单片机的指令了。常用的单片机开发工具,比如8051的keil,委福,pic的mplab,等都有软件仿真器。

但是仅在软件仿真器上运行程序,一般是不够的,因为单片机的特点就是实时性,要经常进行输入输出的控制,这些都是不规则的,所以,写好的程序还要放在单片机的硬件平台上再进行调试,这就需要硬件仿真器了。

硬件仿真器的功能就是监控运行在单片机内的程序,比如程序运行的走向,断点的情况,各寄存器的情况以及运行时间等等。所以硬件仿真器是比较复杂的,它是和单片机内部的硬件有关的。

单片机的硬件仿真器有几种形式,第一种是单片机本身的硬件是不支持在线仿真的。这一类的典型代表就是80x51系列单片机,这是因为80x51单片机设计的比较早,当时还没有提出在线仿真和在线编程等要求,后来,为了兼容性,8x51就一直不能支持在线仿真了。因为这类单片机的内部没有为硬件仿真器留下接口,所以,硬件仿真器就不能深入到单片机的内部去进行跟踪,监控。解决这个问题的方法,就是在硬件仿真器的内部,再造一个和待开发的目标mcu功能一样的mcu,并且把跟踪监控所需的电路也做在一起,这样,用户的目标代码实际就是运行在硬件仿真器里边了。所以,开发51系列单片机的时候,都有一个仿真头,用这个仿真头代替目标板上的单片机。这样就完成了硬件方针的功能。这种形式的仿真,是完全实时性的,效果是最好的。但是,因为在仿真器里边要再造一个目标mcu,有时候是用相近的mcu做的,有的时候是用fpga做的,所以,这类仿真器的价格都比较高。因为功能最强,效果最好,所以,基本上所有的单片机都有这种类型的硬件仿真器,以为实时性要求严格的场合应用。只不过对那些支持在线仿真的单片机,我们一般就不用这种仿真器了。

第二种类型的硬件仿真器是针对有在线仿真的功能的单片机而制作的。后来再开发的单片机,很多都具有在线方针的功能,比如pic系列单片机。这种单片机的特点就是,在设计芯片的时候,就在内部预留了仿真功能所需要的接口,这样,仿真器就只要和这个接口打交道,就可以完成硬件仿真的功能,不需要在仿真器的内部再造一个目标mcu了。所以这类仿真器的电路都比较简单,比如pic系列的icd和icd2等。这种类型的方针器使用很方便,很多还具有在线编程的功能。但是,这种仿真器也有它的缺点,首先是,单片机内部的仿真功能不够强,比如不能支持很多的断点,仿真接口的速度不够快,实时性能不是很好,另外,由于io端口数量的限制,仿真口还经常和其他io口线复用。但是它毕竟方便实用,所以,大多数场合用这种仿真器也就可以了,如果要求再高,就要使用第一种类型的仿真器了。

第三种就是jtag类型的仿真器了,它实际上和第二种类型的仿真器,原理是一样的。只不过,它的内部方针功能更强,并且做成了统一的标准。另外,因为一般都是比较大型的mcu或者dsp上用,所以io管脚不成问题,jtag都是用单独的io管脚。


还有一个相关的内容就是单片机的编程问题,早先的8051没有内部的程序存储器,要使用外部的存储器,所以,编程实际上是对另一个存储器芯片。但是,现在的大部分的单片机都有内部的flash型程序存储器。这就要对不同类型的单片机进行编程了。一种方法是使用通用的编程器,但是好一些的都比较贵。另一种方法就是选用有在线编程功能的单片机,这类单片机现在有很多,51系列的单片机,如philps和atmel都有很多,虽然不支持在线仿真,但是却可以支持在线编程。用的时候,只要事前在目标板上留出2个io口,就可以进行编程了。而pic系列的单片机都有在线仿真和在线编程的功能,直接使用icd和icd2就可以完成了。


最后想说一下pic单片机和51系列单片机比较的事情,其实,我对此没有任何倾向性,他们各有长处,这就好比硬要笼统的比较男人好还是女人好一样,没有什么实际意义。

我个人觉得pic的单片机的灵活性要大一些。它的型号很多,配置比较灵活,但是这对ham来说,用处并不很大,因为我们自己做肯定不会用到很多型号,常用的一两个就够了。

但是,我觉得对ham影响比较大的是开发工具的问题。就像上边所说的51系列的硬件仿真器都比较贵,尤其是支持那些新型号mcu的仿真器,都要千元以上,而且这样的仿真器还没有编程的功能。而使用pic系列的单片机,它的开发工具相对要好办的多,自己做或者买现成的都可以,只要几百元就可以了。

以上是我做单片机的一些理解,欢迎指正和讨论。
离线bd7bq
发帖
1491
只看该作者 1楼 发表于: 2004-09-09
我还一直没有用仿真器,我是用实验板上的led来调试程序的,实验板上有4个七段数字led,对应32个io口,我是在程序里设置某个led的状态来指示程序运行的情况的.很不方便,要反复写程序和ic,我的笔记本没有lpt口,我用的编程器又是不支持usb的labtool的lt48,买了一个usb转lpt的线,发现这种转换只支持打印机的usb和lpt转换,后来只好又拼了一个台机来使用.看来要弄个仿真器了.
离线ljchip
发帖
457
只看该作者 2楼 发表于: 2004-09-12
我有个同事开发单片机程序不用仿真器,他可是个编程高手。
他自己在单片机程序中加入调试语句,用条件编译定制。等调试好了,做个条件编译标识,一切就ok了。基本做法是:利用单片机的uart输出各个模块的各调试点的数据(可以是ram的所有数据),直接由pc机显示调试信息。如果有项目要用到uart也没关系,可以错开项目与调试输出信息的波特率,这点很重要!据说是我国国防战线上的调试方法。基本是可行的,我一直没有去做,亲眼见过,挺有效的。
bg5sbh
离线迷思
发帖
2388
只看该作者 3楼 发表于: 2004-09-12
我以前开发的单板(通讯设备)从来都是串口调试,有的板原来连串口调试都没有,全靠面板指示灯,不过用指示灯是太累了点:(
离线1259
发帖
373
只看该作者 4楼 发表于: 2004-09-12
'
我有个同事开发单片机程序不用仿真器,他可是个编程高手。
他自己在单片机程序中加入调试语句,用条件编译定制。等调试好了,做个条件编译标识,一切就ok了。基本做法是:利用单片机的uart输出各个模块的各调试点的数据(可以是ram的所有数据),直接由pc机显示调试信息。如果有项目要用到uart也没关系,可以错开项目与调试输出信息的波特率,这点很重要!据说是我国国防战线上的调试方法。基本是可行的,我一直没有去做,亲眼见过,挺有效的。
bg5sbh
'

现在很多做arm/linux系统的也这样做,使用串口调试,但是在条件允许的时候,还是建议用标准的开发工具,而且一般的ham也还没有掌握那样的方法。所以,还是建议刚开始学单片机的爱好者,沿用通用的开发方法,不用一些较特殊的方法。等到能够自己随心所欲的时候,那时想怎样就可以怎样了。

最后,从工程管理的角度来说,现在做东西已经是靠集体组织来做了,尽量强调标准和统一。个人英雄主义的时代已经过去了。虽然我们还是渴望王志东和求伯钧那样的英雄。

还要说明的一点就是,现在很多研发过程中的方法,都是在特殊的条件下产生的。以arm开发为例,一套arm公司原厂的开发系统要10万元人民币左右。现在绝大部分的手机里边都是用的arm芯片,而做手机的厂商,不论国内和国外,都要大量购买和装备这样的开发系统。而其他一些规模相对较小的公司,却没有力量这样做,只能使用一些国内做的开发系统,甚至不用开发系统,就像刚才说的用串口调试的方法。但是应该承认,这并不是常规的方法,更不是最好的方法,但是,这些比较原始的方法在国内用的还是比较多的。当然是用这种方法对人的要求就比较高了。但是这是违背科学技术的规律的,而且更不符合现在工程化,标准化的要求。

工欲善其事,必先利其器。这个道理大家都明白,这也是我们国内现在和国外先进技术存在差距的一个地方。这一方面是我们的经济实力造成的,但是另一方面也跟我们的工程管理有很大的关系,我接触的很多客户,这些开发工具虽然比较贵,但是绝对也没有到买不起的地步,但是很多人都不愿意买,都认识不到好的工具的价值。不能从投入产出比的角度去考虑,而更多的只看到了他的成本比较高,却看不到他提高工作效率的一面。

很多好的技术企业,包括国内的,和国外的,他们的优势并不在于他们有多少多少高手,而在于他们有一套行之有效的工作制度和工作方法,每一个普通的工程师,按照这样的方法都可以做好工作。如果接触一些大公司的研发人员,你可能会发现,他们也不过如此。

所以,我还是建议大家在开始学单片机的时候,买几本标准的指导书,按照正规的方法一步一步的学习。只要可以做同样的事情,你不会比那些高手们差的。相反,你的基础更扎实,更有发展。

最后,我多次接触军工系统的单位,我的很多同学和朋友也在军工和航天的科研院所工作,相反,国家每年都要下拨大量的资金用于先进的开发工具和测试设备的采购。如果他们都用那样的原始方法开发航天飞船,战斗机里的实时系统,那是不可想象的。但是,有些科研单位,没有国家任务,资金比较少,这就很正常了,和前边说的问题一样,其实他们也不是买不起好的开发工具,只不过钱都干别的去了。

-----------------------------------------------------------------

用条件编译进行调试,在一些情况下是可以的。但是,为了发现某处的问题,必须进行多次条件编译和运行,才能确定问题的所在,即使经验丰富,也要反复几次,但是,如果使用硬件仿真器,一次就可以确定问题在什么地方。在调试硬件的过程中,仿真器的用处是很大的。如果调完硬件,有的时候就可以直接写程序,烧mcu了,但是也要比较熟练的程序员才可以。并不是刚开始学的ham就能做到的。
离线bg4rhe
发帖
756
只看该作者 5楼 发表于: 2004-09-12
杂志上看到,清华有个邵贝贝,反对使用仿真器,他的主要意思是 有了仿真器后,就会以不变应万变,就是只会用自己仿真器能仿真的单片机去开发一切产品,不会去选择不同的单片机。

btw.楼主水平很高啊,以后多指导我们啊!
离线ba3dp
发帖
3281
只看该作者 6楼 发表于: 2004-09-12
引用1259的话题:
我的观点是:学习单片机开发要利用现有条件,以最小的代价学会它。因为我穷
如果是研发产品,开发系统一定要齐全,这样才能保证研发速度和产品
的可靠性,稳定性。
个人力量薄弱,才疏学浅,望各位贤达不吝指正。
离线ljchip
发帖
457
只看该作者 7楼 发表于: 2004-09-16
应用串口调试的方法与使用仿真器调试各有其优点的:

使用仿真器调试不能完全代表实际的芯片运行,有许多这样的例子:仿真器调试通过的程序烧入到芯片反而
不能正常运行。采用串口调试的芯片可以正常运行。
现在大多数的仿真器都不能调试片内扩展的xdata、pdata,串口调试在这方面具有优势!
在串口调试中除了前面叙述的:可以发送出ram的数据。同时也可以加入调试命令的,即:可以加入串口
调试的“at命令”,运用这些调试命令可以得到许多mcu内部的调试信息!程序各模块运行结束可以输出模块
信息,出错点可以自动输出错误信息,并且程序中止运行(这要求人工编写)。甚至某些方面优于仿真器
调试。但仿真器有可以设置断点,单步运行的优点。

单片机软件的开发设计主要还是要注重程序的结构。良好的程序结构可以避免很多人为的错误,因为要遵循
程序的结构要求,就会是使编程依照某个规则编写,避免一些无规则的拆东墙补西墙的错误。在ram充足的
情况下程序结构尽量选择基于消息的编程方式。即:所有的输入量以消息的形式传送到消息队列(这是底层)
消息本身可以包含:消息号(1字节),消息参数(2字节或者更多,可以自定义)。对消息的处理(这是
上层:应用层),提取消息后分析功能(消息号),作相应处理和删除消息。当应用层读取消息队列为“空”
时,程序可以sleep了。当中断到来唤醒(mcs51可以做到)mcu去处理输入量和读消息队列,重复运行。在
ram不足时可以采用有输入量时立即处理的方式。即:有输入量立即分析其所属功能模块,立即转往执行。
不区分上下层关系。前者实时性与多任务方面要优于后者。

bg5sbh
离线红旗
发帖
271
只看该作者 8楼 发表于: 2004-10-30
这个帖子不错
不能沉了

感谢各位指教!大家继续!
离线bg2igs
发帖
1426
只看该作者 9楼 发表于: 2004-11-27
好帖,支持........................
离线arley
只看该作者 10楼 发表于: 2004-12-08
好帖啊!!!!!!支持!!!!!
离线xzyong
只看该作者 11楼 发表于: 2004-12-09
多谢1259兄!顶破了!
离线BG7TBL
发帖
2965
只看该作者 12楼 发表于: 2004-12-11
我刚开始是用指示灯调试的,后来还是感觉仿真器好用。
离线bd3si
发帖
13698
只看该作者 13楼 发表于: 2004-12-11
[ ]好帖,支持........................[ ]
离线bd5it
发帖
2355
只看该作者 14楼 发表于: 2004-12-13
'
我有个同事开发单片机程序不用仿真器,他可是个编程高手...
'

编程低手也不用仿真器,比如我
离线efree
发帖
554
只看该作者 15楼 发表于: 2004-12-14
'
说说自己对单片机的开发的一些理解
单片机也就是mcu,或叫微控制器,是把cpu和存储器以及一些简单的外围设备集成在一起的芯片,可以方便的完成一些控制和计算的工作。
主要想说说单片机的开发。
单片机的开发离不开仿真,而仿真则离不开仿真器。
仿真主要是验证所开发的程序的执行情况,看看程序运行的结果和所预期的是不是一样。如果不一样,出现了什么问题,如何修改等。
仿真器包括软件仿真器和硬件仿真器。
软件仿真器也叫指令仿真器。现在,开发单片机的程序一般都不是在单片机的硬件平台上完成的,而是在pc机等上边完成的。因为这样工作起来更方便,不用每次都把代码放到单片机的硬件平台上去运行,另外,对于一些rom型,otp型的单片机,也必须这样做。但是要直接在pc机上跑单片机的程序,显然是不行的,这就相当于在80x86的cpu上跑8051的cpu的程序。所以,这里就需要指令仿真器了,也就是一般说的软件仿真器。它的作用就是在pc机上模拟出一个单片机的运行环境。在这个运行环境中,就可以运行单片机的指令了。常用的单片机开发工具,比如8051的keil,委福,pic的mplab,等都有软件仿真器。
但是仅在软件仿真器上运行程序,一般是不够的,因为单片机的特点就是实时性,要经常进行输入输出的控制,这些都是不规则的,所以,写好的程序还要放在单片机的硬件平台上再进行调试,这就需要硬件仿真器了。
硬件仿真器的功能就是监控运行在单片机内的程序,比如程序运行的走向,断点的情况,各寄存器的情况以及运行时间等等。所以硬件仿真器是比较复杂的,它是和单片机内部的硬件有关的。
单片机的硬件仿真器有几种形式,第一种是单片机本身的硬件是不支持在线仿真的。这一类的典型代表就是80x51系列单片机,这是因为80x51单片机设计的比较早,当时还没有提出在线仿真和在线编程等要求,后来,为了兼容性,8x51就一直不能支持在线仿真了。因为这类单片机的内部没有为硬件仿真器留下接口,所以,硬件仿真器就不能深入到单片机的内部去进行跟踪,监控。解决这个问题的方法,就是在硬件仿真器的内部,再造一个和待开发的目标mcu功能一样的mcu,并且把跟踪监控所需的电路也做在一起,这样,用户的目标代码实际就是运行在硬件仿真器里边了。所以,开发51系列单片机的时候,都有一个仿真头,用这个仿真头代替目标板上的单片机。这样就完成了硬件方针的功能。这种形式的仿真,是完全实时性的,效果是最好的。但是,因为在仿真器里边要再造一个目标mcu,有时候是用相近的mcu做的,有的时候是用fpga做的,所以,这类仿真器的价格都比较高。因为功能最强,效果最好,所以,基本上所有的单片机都有这种类型的硬件仿真器,以为实时性要求严格的场合应用。只不过对那些支持在线仿真的单片机,我们一般就不用这种仿真器了。
第二种类型的硬件仿真器是针对有在线仿真的功能的单片机而制作的。后来再开发的单片机,很多都具有在线方针的功能,比如pic系列单片机。这种单片机的特点就是,在设计芯片的时候,就在内部预留了仿真功能所需要的接口,这样,仿真器就只要和这个接口打交道,就可以完成硬件仿真的功能,不需要在仿真器的内部再造一个目标mcu了。所以这类仿真器的电路都比较简单,比如pic系列的icd和icd2等。这种类型的方针器使用很方便,很多还具有在线编程的功能。但是,这种仿真器也有它的缺点,首先是,单片机内部的仿真功能不够强,比如不能支持很多的断点,仿真接口的速度不够快,实时性能不是很好,另外,由于io端口数量的限制,仿真口还经常和其他io口线复用。但是它毕竟方便实用,所以,大多数场合用这种仿真器也就可以了,如果要求再高,就要使用第一种类型的仿真器了。
第三种就是jtag类型的仿真器了,它实际上和第二种类型的仿真器,原理是一样的。只不过,它的内部方针功能更强,并且做成了统一的标准。另外,因为一般都是比较大型的mcu或者dsp上用,所以io管脚不成问题,jtag都是用单独的io管脚。
还有一个相关的内容就是单片机的编程问题,早先的8051没有内部的程序存储器,要使用外部的存储器,所以,编程实际上是对另一个存储器芯片。但是,现在的大部分的单片机都有内部的flash型程序存储器。这就要对不同类型的单片机进行编程了。一种方法是使用通用的编程器,但是好一些的都比较贵。另一种方法就是选用有在线编程功能的单片机,这类单片机现在有很多,51系列的单片机,如philps和atmel都有很多,虽然不支持在线仿真,但是却可以支持在线编程。用的时候,只要事前在目标板上留出2个io口,就可以进行编程了。而pic系列的单片机都有在线仿真和在线编程的功能,直接使用icd和icd2就可以完成了。
最后想说一下pic单片机和51系列单片机比较的事情,其实,我对此没有任何倾向性,他们各有长处,这就好比硬要笼统的比较男人好还是女人好一样,没有什么实际意义。
我个人觉得pic的单片机的灵活性要大一些。它的型号很多,配置比较灵活,但是这对ham来说,用处并不很大,因为我们自己做肯定不会用到很多型号,常用的一两个就够了。
但是,我觉得对ham影响比较大的是开发工具的问题。就像上边所说的51系列的硬件仿真器都比较贵,尤其是支持那些新型号mcu的仿真器,都要千元以上,而且这样的仿真器还没有编程的功能。而使用pic系列的单片机,它的开发工具相对要好办的多,自己做或者买现成的都可以,只要几百元就可以了。
以上是我做单片机的一些理解,欢迎指正和讨论。
'
好文,好人,顶
离线关则勇
发帖
8862
只看该作者 16楼 发表于: 2004-12-14
好帖.12333234234343434
离线bellstudio
发帖
2820
只看该作者 17楼 发表于: 2004-12-19
有价值!好好品味!12435456