Vimman's Sky https://bbs.21ic.com/?194686 [收藏] [复制] [RSS] 如何把一件简单的事情做得复杂起来呢?请您仔细阅读我的blog。

日志

让单片机也来运行EXE文件

已有 2033 次阅读2008-12-15 04:48 |系统分类:ARM| 单片机, EXE, LPC23xx

这些天调试通了LPC2368的SD/MMC接口,移植了一个FAT16文件系统上去,单片机终于可以拿来做一个DOS啦。于是想尝试一下让单片机也来运行一个EXE程序。通过研究,发现只需以下几步就可以实现最简单的EXE程序动态加载并运行。
   第一步,通过分散加载文件,将程序分为两个加载块LOAD1和LOAD2,其对应的运行地址分别为两个EXEC1、EXEC2。让LOAD1&EXEC1相同,置于片内FLASH中;LOAD2&EXEC2相同,置于片内SRAM中。将BootLoader,文件系统和主程序放在LOAD1,需要动态加载的EXE程序放在LOAD2中。
   第二步,设置EXE入口ExeEntry()。首先将其写为空函数,编译,连接并将完整的HEX程序烧入到片内FLASH中作为常驻代码。
   第三步,修改ExeEntry()为实际需要的代码,通过fromelf将目标映像根据两个加载块拆分成两个bin文件。将需要动态加载的bin文件作为exe程序。
   第四步,将上述bin文件copy到SD卡内,单片机上电后读取该文件,并fread到ExeEntry这个地址上。关闭文件,执行ExeEntry,这时候执行的代码就应该是SD卡内该可执行文件的代码啦。这时候如果LOAD2的程序再变化,重新编译并通过fromelf拆分成一个独立的bin文件后,可以单独copy到SD卡执行即可。
   不过上述方法是通过copy代码到RAM中实现的,因此有很大的局限性,一是因为RAM小无法放置大的代码,另一个是程序掉电后消失需要重新加载。不过可以证明EXE已经不仅仅是高端CPU的专用可执行程序了,下一步考虑用C8051F+SD卡来实现一下8051单片机执行EXE程序。


本文系原创,转载请声明出处为http://vimman.21ic.org


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (6 个评论)

回复 dylan 2008-12-16 07:50
很有创意的做法!顶!
回复 ricky 2008-12-17 02:29
太赞了,用这种方法调试程序就太方便了,你这差不多是实现了文件系统和给51写了个bootloader

QUOTE:
以下为vimman的回复: 谢谢,不过51的还没来得及搞呢:)
回复 oet 2008-12-19 15:41
好主意,可以考虑用lpc2478+sdram来实现,这样可玩的余地就大了
回复 wangyue 2008-12-20 05:23
EXE文件是X86的机器语言,和51的机器语言完全不同啊,能运行吗?楼主是否实现,还是仅仅是想法啊

QUOTE:
以下为vimman的回复: 在LPC2368上是没问题的,关键是对ARM linker的理解;C8051F的思路是把IAP功能,因为51的架构不支持在RAM或者XRAM中运行代码。
回复 ddy 2009-7-29 08:19
lz只不过是做了个加载另一个bin文件的bootloader而已,怎么能说运行exe文件呢? exe文件是基于intelEx86的硬件环境, debug后的汇编代码用到的寄存器,根本就和你的lpc2478嵌入式系统不是一回事。 如果你了解点wince和evc的编译操作就明白了
回复 ic 2009-10-31 12:47
楼主的 EXE 文件是 PC 上的 EXE 吗?如果是,PC 的机器码和 8051 的机器吗都不同,怎么能运行。