||
这些天调试通了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