AT89S52到ARM的移植Word格式文档下载.docx
《AT89S52到ARM的移植Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《AT89S52到ARM的移植Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
4.1数据类型的定义8
4.2留心double和long8
第五章单片机与ARM的移植9
第六章总结10
第一章绪论
本论文是探究从单片机到ARM移植中会发生的问题,也就是8位机到32位机的移植中,会出现的问题,其中包括字节的变换,数据类型的不同,需要考虑的问题分析等等。
第二章ARM和单片机的区别
目前大量的中、低端嵌入式应用,主要使用8/16位单片机。
在国内,由于历史的原因,主要是以MCS51核为主的许多不同型号单片机,主要厂商有Atmel、Philips、Winbond、宏晶等。
还有一些近几年发展较快的新型单片机,如PIC、AVR、MSP430系列等。
这些单片机各有特点,但从目前的发展角度来看,单片机针对特定应用领域的个性化发展愈发明显。
2.1、软件方面
这应该是最大的区别了。
引入了操作系统。
为什么引入操作系统?
有什么好处?
1)方便。
主要体现在后期的开发,即在操作系统上直接开发应用程序。
不像单片机一样一切都要重新写。
前期的操作系统移植工作,还是要专业人士来做。
2)安全。
这是LINUX的一个特点。
LINUX的内核与用户空间的内存管理分开,不会因为用户的单个程序错误而引起系统死掉。
这在单片机的软件开发中没见到过。
3)高效。
引入进程的管理调度系统,使系统运行更加高效。
在传统的单片机开发中大多是基于中断的前后台技术,对多任务的管理有局限性。
2.2、硬件方面
现在的8位单片机技术硬件发展的也非常得快,也出现了许多功能非常强大的单片机。
但是与32ARM相比还是有些差距吧。
ARM芯片大多把SDRAM,LCD等控制器集成到片子当中。
在8位机,大多要进行外扩。
总的来说,单片机是个微控制器,ARM显然已经是个微处理器了。
引入嵌入式操作系统之后,可以实现许多单片机系统不能完成的功能。
比如:
嵌入式web服务器,java虚拟机等。
也就是说,有很多免费的资源可以利用,上述两种服务就是例子。
如果在单片机上开发这些功能可以想象其中的难度。
ARM处理器的优势详解
对于如今大量出现的32位嵌入式应用,以笔者之见,ARM处理器的优势主要有以下几个方面:
高性能、低功耗、低价格。
把ARM处理器的性能拿来和一些著名的通用处理器(如Pentium)相比是不合适的,因为他们各自针对的应用需求是不同的。
Pentium处理器采用多条指令流水线的超标量结构,追求通用应用目标下的超强性能,功耗大,可以用散热器加风扇散热。
ARM针对嵌入式应用,在满足性能要求的前提下,力求最低的功率消耗。
ARM结构的优点是能兼顾到性能、功耗、代码密度、价格等几个方面,而且做得比较均衡。
在性能/功耗比(MIPS/W)方面,ARM处理器具有业界领先的性能。
基于ARM核的芯片价格也很低,目前ARMCortexM的芯片价格可低至10元人民币左右。
丰富的可选择芯片
ARM只是一个核,ARM公司自己不生产芯片,采用授权方式给半导体生产商。
目前,全球几乎所有的半导体厂家都向ARM公司购买了各种ARM核,配上多种不同的控制器(如LCD控制器、SDRAM控制器、DMA控制器等)和外设、接口,生产各种基于ARM核的芯片。
目前,基于ARM核的各种处理器型号有好几百种,在国内市场上,常见的有ST、TI、NXP、Atmel、Samsung、OKI、Sharp、Hynix、Crystal等厂家的芯片。
用户可以根据各自的应用需求,从性能、功能等方面考察,在许多具体型号中选择最合适的芯片来设计自己的应用系统。
由于ARM核采用向上兼容的指令系统,用户开发的软件可以非常方便地移植到更高的ARM平台。
广泛的第三方支持
以如今的技术,设计一个处理器并非难事,但要使这个处理器得到大家认可,并取得市场成功却是非常困难的,其中涉及许多技术与非技术的因素和环节,还包括时机、运气。
因为现在许多产品的开发,不是一个简单的处理器加几百条指令、语句就可以解决的。
要用到32位处理器,一般都要有编译器、高效的开发工具(仿真器及调试环境)、操作系统、协议栈等,这些东西都不是一个芯片生产商可以解决的,而需要许多第三方的支持。
这就像一粒种子,需要土壤、空气、水等环境才能发芽、成长。
这也是我们的一些“中国芯”该反思之处。
ARM通过近20年的培育、发展,得到了广泛的第三方合作伙伴支持。
目前,除通用编译器GCC,ARM有自己的高效编译、调试环境(MDK、Keil),全球约有50家以上的实时操作系统(RTOS)软件厂商和30家以上的EDA工具制造商,还有很多高效率的实时跟踪调试工具的厂商,对ARM提供了很好的支持。
用户采用ARM处理器开发产品,既可以获得广泛的支持,也便于和同行交流,加快开发进度,缩短产品的上市时间。
完整的产品线和发展规划
ARM核根据不同应用需求对处理器的性能要求,有一个从ARM7、ARM9到ARM10、ARM11,以及新定义的CortexM/R/A系列完整的产品线。
前几年应用较多的主要是基于V4架构的ARM7TDMI、ARM720T、ARM920T核的一些处理器芯片,如NXP的LPC2000系列、ST的STR7/9系列、Atmel的AT91系列和Samsung的S3C系列。
近两年,ARMCortex系列以更好的性能、更低的价格得到快速推广,典型的就是基于CortexM3的STM32系列。
ARMCortexM/R/A系列分别针对不同的应用领域。
M系列主要面向传统微控制器(MCU/单片机)应用,这类应用面很广,要求处理器有丰富的外设,并且各方面比较均衡;
R系列强调实时性,主要用于实时控制,如汽车引擎;
A系列面向高性能、低功耗应用系统,如智能手机。
选用ARM处理器进行开发,技术积累性较强,生命周期长,设计重用度高,不易被淘汰。
用户在选择ARM处理器时,可以针对应用需求,从大量的ARM芯片中选用满足性能、功能要求的产品,以获得较好的性价比。
ARM处理器在便携、手持式设备以及工业控制等应用领域,在今后相当长的时间内是一个很好的选择。
当然,没有一种型号的处理器是可以覆盖所有应用的,也不是搬上一个嵌入式OS,就可以很好地解决软件问题的。
第三章8位MCU如何升级至32位MCU
首先,我们从MCU之间的转变开始,循序渐进。
目前的MCU市场分为三个部分,8位、16位和32位内核(4位内核MCU现在已相当少用,故在本次比较中将其忽略)。
对于这三个部分中的每一个,其规模大体相同。
传统上8位内核占最大的市场份额。
根据一些分析人士报告,可能32位内核市场占有率已经超过了8位内核。
即使目前尚未超过,时间也不会太长。
32位内核市场份额是迄今为止增长最快的。
8位内核和16位内核仍在增长,但在速度方面远不如32位内核(8位内核的增长速度仍快于16位内核)
在很长的一段时间内,很多人相信16位MCU可能会被8位MCU和32位MCU取代。
目前的32位MCU器件采用最新技术制造(与8位内核和16为内核相比)。
MCU制造商能够使用这些最新的技术,使得32位MCU体积变得越来越小,因而变得越来越廉价。
由于32位MCU所具有的价格和性能,很多分析人士相信,设计工程师将跳出16位领域,直接转向具有高性能的产品,保证其设计的未来。
8位MCU无论是在性能还是存储处理能力方面均达到了其极限。
这也是目前存在16位和32位MCU的原因之所在。
随着行业按照摩尔法则的轨迹发展,32位MCU变得越来越小和越来越廉价,以至于在传统的8位和16位领域方面也具有了竞争力。
与8位和16位MCU相比,这些新的32位MCU具有更高的处理能力。
典型的8位MCU的速度在10~30MIPS之间。
16位MCU介于20和40MIPS之间。
而新的32位MCU通常具有80~100MIPS的处理能力!
这是处理能力和速度方面的重大改进。
与8位和16位MCU相比,很多32位MCU具有更小的体积,通常具有更低的功耗。
较小的体积通常意味着更好的功耗、更低的电流消耗和更低的有效输入电压。
一些新产品的休眠电流几乎无法测量,提供的输入电压低至0.5V。
这就为32位MCU提供了巨大优势。
在当今市场上,功率为王。
即使某一应用不是以电池为供电,目前的设计人仍不得不考虑功耗。
对于插入栅板的应用,出于多种原因,仍必须是“绿色”的。
某些顶级产品必须针对市场目的,或是因为政府命令和标准。
例如,最新的消费电子器件目前均是兼容能源之星(EnergyStar)的。
如果你目前正在使用8位MCU,你可能会在下一设计中考虑32位MCU。
即使下一代设计仍继续使用8位MCU,目前也有很多步骤方法可帮助你做好最终的移植备。
今天做一些研究,并进行正确决策,就能为明天的设计提供保证。
当你开始考虑转移至32位MCU时,或许会认为将遇到一些问题。
例如,你认为自己需要学习新的架构;
你可能需要重写自己的所有代码,以便与新的内核协调工作;
或许你感觉32位MCU过于艰难和复杂,它们不是为了便于使用而设计的,而是为了性能设计的,这意味着,你将不得不考虑它们所拥有的数以千计的寄存器;
或许你关心可能将不得不学习一整套新的软件工具,你将需要熟悉全新的硬件工具;
或许你还认为,32位MCU并不针对你的应用,你无法为自己的设计找出正确的成套外围器件。
你可能会关心上述一种或多种问题,但它们全都是必要的考虑事项吗?
让我们分别分析它们.
大多数设计者认为,当他们从8位MCU转移到32位MCU时,将不得不学习新的体系架构。
问题是大多数公司有自己的老式8位MCU产品系列和新的32位MCU产品系列。
每年,他们可能仍会为8位产品系列推出少量新的产品,他们希望把握机会,从失误中学习,并在32位系列中更正错误。
你或许无法在器件上发现相同的外围部件。
不同系列的代码不兼容,或不具有管脚兼容性,因而你将不得不重新完成整个电路板。
尽管真实的情形是这样的,你无法在不改变设计核心的情况下实现移植,但你也希望无需再次学习所有的内容。
一些公司开始发布新的产品,在8位版本和32位版本之间具有完全相同的成套外围组件。
组件中唯一改变的是其内核。
其他部分,包括管脚布局位置,均保持不变。
如果你目前使用的是8位MCU,明天就能移植到该公司的32位MCU上,同时仍能使用相同的印刷电路板。
这方面的一个例子是Cypress半导体公司最近发布的PSoC?
3和PSoC5架构。
这两种架构具有相同的外围组件、封装和管脚。
PSoC3架构,采用了新的单周期/指令8051,运行频率高达67MHz,能够方便地与PSoC5版本兼容。
PSoC5版本采用了ARMCortex-M0处理器,运行频率高达80MHz。
这类产品使得从一种架构到另一架构的移植变得简单易行。
使用这些新工具,能够按照你所希望的方式进行设计。
人们还认为,你将不得不为新的32位产品重写所有的代码。
情形并非总是如此。
对于在8位和32位内核之间具有匹配外围组件的很多这类新产品,它们的固件也是兼容的。
这些芯片采用高级语言(如C语言),能够编写一套代码,可以选择针对8位产品进行编译,或选择32位产品并重新编译。
你可以采取略微复杂的方法,使用高级语言编写代码,仍调用针对特定内核的寄存器如果你遵守高级编程的精神,移植仍相当容易。
你可能考虑工具会怎样呢?
与你正在使用的特定内核相比,你可能更关注集成开发环境(IDE)。
一旦你掌握了它,你不会愿意学习新的。
但是,如果你拥有一种可在两种架构上工作的IDE,情况会怎样呢?
Cypress公司新的PSoCCreator?
软件就是这方面的一个例子。
它是一种能与8位器件和32位器件一起工作的集成开发环境(IDE)。
保证设计未来前景的一种良好方式是,在今天就选择相应的产品(即使你仍与8位内核打交道),通过该产品,能够为8位设计和32位设计使用相同的工具。
与软件工具类似,硬件工具也出现在跨平台应用方面。
一些公司已开发出了带有硬件开发工具箱的模块系统。
这样,你就能够拔出8位模块,并用32位模块取而代之。
板上的所有其他部分保持不变。
它们通常采用相同的编程和调试工具。
你真正能够做到,学习一次,普遍适用。
真正应考虑的是,很多公司为销售8位产品的不同市场开发了32位产品。
这意味着你无法找到支持设计的正确的32位产品。
因而,你不仅要为32位产品支付更多的成本,还需花费更多的成本购买外部分离器件。
但是,如果你能设计自己的芯片会怎样呢?
类似于FPGA或CPLD,但以更简单的方式使用图形环境会怎样呢?
如果你能在工具中实现自己的设计方案,创建它并将程序纳入器件中,是否会很好呢?
太好以至于似乎不真实,是吗?
当然不。
使用PSoC3和PSoC5,这是可能的。
你现在可以围绕32为内核设计外围器件,确保它们是适合于设计的正确器件。
与以往相比,对于设计人员来说目前更重要的是灵活性。
市场比以前变化得更快,竞争每天都在加剧,每个人都致力于更低的成本。
今天选择正确的8位器件系列能够保障你的明天。
使用这些新的工具,能够对8位MCU进行设计,或许它是贵公司产品组合的基本版本,随后,你可以承担你的任务,使用相同的项目文件,并将其移植到32位内核上。
现在你能够增加更多性能。
很快,它将成为贵公司的高端特色产品,从而获得更高的利润。
32位MCU是嵌入式设计的下一代方向。
何时采取行动取决于你。
或许是现在,或许是数年内,但在某一点上,你的8位MCU将耗尽其能力,无法满足当前市场始终变化的需求。
大多数设计人员对该步骤感到恐惧。
但它并不一定是痛苦的。
我们考察了一些目前可以采取、使该转变尽可能平稳的行动。
如果你目前仍在进行8位内核设计,请确保你所使用的产品系列具有32位的对应产品。
对于工具来说情况同样。
目前很多公司均提供能在不同架构上使用的相同软件和硬件工具。
今天选择正确的器件(8位或32位)将能够帮助你以及你的设计在明天获得更大的成功。
第四章基本数据类型有关问题及回答
4.1数据类型的定义
uint8_t,uint16_t,和uint32_t不一定是8位,16位和32位的,这些都是通过typedef定义的,在不同的位机上面是不一样的,例如:
typedefuint8_tunsignedchar;
typedefuint16_6unsignedshortint;
typefefuint32_tunsignedint;
而在这个定义之下,及时换了平台,也能保证位机,只需要修改typedef或#define,如果跨平台onfig的话,系统会根据你选的BSP编译,你可以自己编写一个c程序,用sizeof函数取得你想知道的数据类型在系统中的位数。
为了保证可移植性,最好自己定义类型别名.移植到相应的系统上时,只要重新定义这些自己定义的类型就可以了,
4.2留心double和long
因为double和long都是多位数,所以在移植过程中会导致程序出错,所以一般在移植中我们都把这两种类型转换成unsignedint类型,以防止移植过程中出错,导致程序移植失败。
4.3留心sizeof
sizeof返回类型为unsignedlong,如果返回给int型变量,可能发生截断。
4.4留心边缘效应
局部代码发生类型改变,可能导致其他代码发生64位转换,例如函数的返回值由Int变为sszie_t,则所有调用该函数并获取其返回值的地方,都有可能发生意想不到的64位转换。
4.5留心longarray对效率的影响
Long/unsignedlong数组在移植中可能被截断,所以如果int就足够,尽量不要使用Long,这一点,对于pointerarrary同样适用。
第五章单片机与ARM的移植
5.1写驱动
在上文中我们就说出了单片机与ARM的区别,但是那些都不足以帮助我们移植成功,
在单片机中我们控制针脚的时候仅仅只是利用其系统定义的P0.0到P3.0接口,而ARM里面如果要控制我们所需的硬件使其动起来,则需要写一个对应的驱动来控制器GPIO口,就那我们组所做的音乐播放器吧,在其硬件上,ARM板上的引脚就足以支撑起我们所做的LED板,而不需要我们另外再加两个译码器。
而这个驱动我们就需要去懂得ARM内核,根据它的内核我们才能写出相应的驱动,这就是移植的第一步写驱动。
5.2改程序
在上文中,我们说到了写驱动,驱动属于底层,而我们写完驱动之后就是更改程序,在单片机中,我们永远不需要读取驱动,因为单片机仅仅只是一个控制器而不是处理器,我们需要把驱动文件读取出来,用C/C++中的OPEN函数,读出程序之后,就开始对程序写入我们所需要控制的外部设备,而在ARM有一种机制叫做PWM,这是一个定时脉冲对于音乐来说,这个是一个非常有利的工具,这跟单片机的不同之处就在于ARM只是处理,而不是去实行,所以ARM起源于单片机但比单片机更高级,它有多线程,所以在我们的音乐中,我们可以利用多线程来控制灯光的闪烁,而不是利用其频率的间隙。
第六章总结
以上就是单片机到ARM需要注意的地方,而且在实践中,我意识到了跨平台是一件很不容易的事情,在一定的地方,造成的结果就是不一样,所以我们往往需要的注意的地方很多,而不仅仅只是把程序在ARM的开发环境中变异一下,所以这次的移植让我学会了很多。