MDK5.10仿真无法进入main问题

[复制链接]
6721|12
 楼主| xujeff7 发表于 2015-9-6 18:35 | 显示全部楼层 |阅读模式
开发环境MDK5.10; 芯片为GD32F130C8T6;仿真器为JLINK;我分配ROM起始地址为0x08001000时,仿真无法跑到main函数,进入仿真后就死在这样一个地方:

MDK仿真不进main

MDK仿真不进main

我勾选了仿真进入main,还是一样。
我更改了IROM1地址,也试过改了sct文件里的地址,也改了程序里的中断向量偏移,都是进不了main;
QQ截图20150906181955.jpg QQ截图20150906182054.jpg QQ截图20150906182133.jpg
我地址改为0x08000000就正常了,可以正常仿真。
同样环境我用IAR6.4,我更改ICF文件到0x08001000地址,IAR是可以进行仿真的。
但目前公司要求用MDK开发环境,不知道有没有同学碰到过这个问题?怎么办?
 楼主| xujeff7 发表于 2015-9-6 18:38 | 显示全部楼层
补充一下,我查看了MDK编译出来的map文件,确实偏移量应该是对了,但仿真为什么不能进入main并正常运行呢?
__Vectors_Size                           0x0000015a   Number         0  startup_stm32f0xx.o ABSOLUTE
    __Vectors                                0x08001000   Data           4  startup_stm32f0xx.o(RESET)
    __Vectors_End                            0x0800115a   Data           0  startup_stm32f0xx.o(RESET)
    __main                                   0x0800115d   Thumb Code     8  __main.o(!!!main)
    __scatterload                            0x08001165   Thumb Code     0  __scatter.o(!!!scatter)
    __scatterload_rt2                        0x08001165   Thumb Code    44  __scatter.o(!!!scatter)
    __scatterload_rt2_thumb_only             0x08001165   Thumb Code     0  __scatter.o(!!!scatter)
    __scatterload_null                       0x08001173   Thumb Code     0  __scatter.o(!!!scatter)
    __scatterload_copy                       0x08001199   Thumb Code    26  __scatter_copy.o(!!handler_copy)
    __scatterload_zeroinit                   0x080011b5   Thumb Code    28  __scatter_zi.o(!!handler_zi)
    __rt_lib_init                            0x080011d1   Thumb Code     0  libinit.o(.ARM.Collect$$libinit$$00000000)
    __rt_lib_init_alloca_1                   0x080011d3   Thumb Code     0  libinit2.o(.ARM.Collect$$libinit$$0000002C)
    __rt_lib_init_argv_1                     0x080011d3   Thumb Code     0  libinit2.o(.ARM.Collect$$libinit$$0000002A)
    __rt_lib_init_atexit_1                   0x080011d3   Thumb Code     0  libinit2.o(.ARM.Collect$$libinit$$00000019)
    __rt_lib_init_clock_1                    0x080011d3   Thumb Code     0  libinit2.o(.ARM.Collect$$libinit$$0000001F)
dbayj 发表于 2015-9-6 20:28 | 显示全部楼层
本帖最后由 dbayj 于 2015-9-6 20:30 编辑

…………………………
 楼主| xujeff7 发表于 2015-9-6 20:44 | 显示全部楼层
还有人遇到这个问题么?还有什么地方可以修改呢?
sunmeat 发表于 2015-9-7 09:15 | 显示全部楼层
楼主直接烤个官方的例程不就OK了么
 楼主| xujeff7 发表于 2015-9-7 09:47 | 显示全部楼层
sunmeat 发表于 2015-9-7 09:15
楼主直接烤个官方的例程不就OK了么

已解决,谢谢!
官方例程都是0x08000000起始地址的,改成0x08001000同样进不了main;
仔细实验发现MDK无法自己引导芯片到main,我在0x8000000地址编写了bootloader跳转到0x08001000后MDK仿真工程就可以去到main了;
而IAR无这个问题,即使把0x08000000这个地方的代码都擦掉,环境都能引导芯片执行到0x08001000这个地址的main函数。

评分

参与人数 1威望 +3 收起 理由
大叔乔东 + 3

查看全部评分

大叔乔东 发表于 2015-9-7 21:32 | 显示全部楼层
xujeff7 发表于 2015-9-7 09:47
已解决,谢谢!
官方例程都是0x08000000起始地址的,改成0x08001000同样进不了main;
仔细实验发现MDK无 ...

一直知道MDK需要烧boot,原来IAR不用也可以的。
 楼主| xujeff7 发表于 2015-9-8 09:33 | 显示全部楼层
大叔乔东 发表于 2015-9-7 21:32
一直知道MDK需要烧boot,原来IAR不用也可以的。

早说我就不用那么折腾到处找资料了!最后找不到就自己尝试看看,没想到真是这个问题!一直用IAR惯了,思维定势以为开发环境都是万能的,呵呵
styleno1 发表于 2015-9-8 15:18 | 显示全部楼层
本帖最后由 styleno1 于 2015-9-8 15:20 编辑

用Keil多年,没这个问题。
编辑说明:修改
Ketose 发表于 2015-9-8 17:42 | 显示全部楼层
不好好看数据手册.
GD32F130C8T6 系统引导的时候如果是从ROM引导,那么MCU复位后,硬件会把Flash映射到0x0800000处,然后硬件从0x0800000处取SP指针,接着从0x0800004处取中断向量表的Reset_Handler中断向量,执行复位后的初始化。而0x08000000处放的其实是中断向量表,也就是启动文件里初始化的。
你把你的程序烧到0x08001000处。硬件还是从0x0800000处执行。不是你把程序烧在哪里就从哪里执行,明白不?
Ketose 发表于 2015-9-8 17:48 | 显示全部楼层
如果你执意要放在0x08001000处,
你可以修改sct文件 把启动文件放在0x08000000,这个是不能变的。
把你的main放在0x08001000处,这样是可以的。
MicroMMU 发表于 2015-10-1 22:00 来自手机 | 显示全部楼层
仿真前烧下flash
大叔乔东 发表于 2015-10-27 19:17 | 显示全部楼层
0x08000000,这个地址你好好的改的干嘛,哈哈!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部