这几天遇到了一个问题:
同样的一份hex文件,在keil(j-link)里烧录,程序能正常运行,但是通过J-flash反读出来的hex文件,会比原来的hex文件多出一段数据 比如:原来的hex在0x08049444的地址已经结束,反读出来的hex在此地址之后会多出一段数据。
通过keil调试,memory窗口定位,在disassembly里对应地址显示的全是汇编,都是寄存器操作,没有对应代码。截取部分如下:
0x08049477 0000 MOVS r0,r0
0x08049479 0000 MOVS r0,r0
0x0804947B 0100 LSLS r0,r0,#4
0x0804947D 3240 ADDS r2,r2,#0x40
0x0804947F 4210 TST r0,r2
0x08049481 0301 LSLS r1,r0,#12
0x08049483 245D MOVS r4,#0x5D
0x08049485 1AF4 SUBS r4,r6,r3
0x08049487 01AA LSLS r2,r5,#6
用j-flash烧录或者上位机(can通讯),程序运行不起来,但是反读出来的hex与原本的hex一致!!!
想问问大佬是什么原因?keil的编译器问题还是其他的原因?
附加:单片机是stm32f407VGT6,程序时boot+app,这里运行不起来指的是app
0x08049479 0000 MOVS r0,r00x0804947B 0100 LSLS r0,r0,#40x0804947D 3240 ADDS r2,r2,#0x400x0804947F 4210 TST r0,r20x08049481 0301 LSLS r1,r0,#120x08049483 245D MOVS r4,#0x5D0x08049485 1AF4 SUBS r4,r6,r30x08049487 01AA LSLS r2,r5,#60x08049489 1401 ASRS r1,r0,#160x0804948B 7C39 LDRB r1,[r7,#0x10]0x0804948D 5291 STRH r1,[r2,r2]0x0804948F 32C8 ADDS r2,r2,#0xC80x08049491 0206 LSLS r6,r0,#80x08049493 071B LSLS r3,r3,#280x08049495 0332 LSLS r2,r6,#12
|