问题起始于 ---> 用MDK开发LPC2114,在proteus中仿真。
出现的问题是,将编译得到的hex文件加载到proteus中,仿真毫无反应。而用ADS1.2编译得到的 hex加载进proteus中又是正常的。
---> 在网上查了一下,最后可以实现在proteus上运行.http://forum.eepw.com.cn/thread/252237/1
第二个问题 ---> 为什么删除hex文件倒数第二行才能在proteus上运行。于是开始查hex格式
看到这篇文章http://hi.baidu.com/chris_zheng/item/701a2cefc9adcc235b2d6450
Intel Hex也分为INTEL 8 INTEL 16 INTEL 32
下面分别展示一下,51单片机程序的hex,STM32程序生成的hex,以及LPC2114生成的hex,以及ADS1.2生成的hex
:0300000002033CBC :0C033C00787FE4F6D8FD7581140203837D :0F05A0002B30302E30202064733138623230001F ............ :0E032E00C3E49FFFE49EFEE49DFDE49CFC22E0 :00000001FF
//STM32 :020000040800F2 :10000000B0020020890100088D0100088F0100085E :10001000910100089301000895010008000000000C ....... :1013700090130008000000200C0000002801000865 :101380009C1300080C000020A40200004401000887 :0C13900000000000000000000000000051 :04000005080000ED02 :00000001FF
//lpc :020000040000FA :1000000018F09FE518F09FE518F09FE518F09FE5C0 :1000100018F09FE50000A0E1F0FF1FE518F09FE554 :1000200058000000400000004400000048000000AC :100030004C000000000000005000000054000000D0 .......... :100D600060C0800007070404040707007C0D000032 :0C0D700000000040E804000054010000F6 :0400000500000110E6 :00000001FF
//ADS1.2 :020000040000FA :1000000018F09FE518F09FE518F09FE518F09FE5C0 :1000100018F09FE5805F20B9F0FF1FE518F09FE51D :10002000F00000004000000044000000A0000000BC ................ :100BE00000000000000000001C0C0000000000409D :100BF000000000001C0C0000600400400000000029 :100C00001C0C000000200040000000001C0C000034 :0C0C100000000000000000406004000034 :00000001FF
在hex格式的文章里看到“I32HEX or INTEL 32, 32-bit format. Allows usage of 04 and 05 records. The data field endianness may be byte-swapped.Beware! Byte-swapped data might be more confusing. It is possible to misinterpret the byte order in case of I16HEX and I32HEX.”
分别看上面几个hex的内容,只有stm32,LPC程序得出的hex的倒数第二行多了个05 records。倒数第二句意思应该是往地址0000处写入了一段数据。在proteus进入单步调试状态,打开FLASH窗口,发现地址0处不是LDR PC,Reset_Addr,地址0x04才是LDR PC,Reset_Addr。