打印

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

[复制链接]
5415|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
开发环境MDK5.10; 芯片为GD32F130C8T6;仿真器为JLINK;我分配ROM起始地址为0x08001000时,仿真无法跑到main函数,进入仿真后就死在这样一个地方:

我勾选了仿真进入main,还是一样。
我更改了IROM1地址,也试过改了sct文件里的地址,也改了程序里的中断向量偏移,都是进不了main;

我地址改为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 | 只看该作者
还有人遇到这个问题么?还有什么地方可以修改呢?

使用特权

评论回复
5
sunmeat| | 2015-9-7 09:15 | 只看该作者
楼主直接烤个官方的例程不就OK了么

使用特权

评论回复
6
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
7
大叔乔东| | 2015-9-7 21:32 | 只看该作者
xujeff7 发表于 2015-9-7 09:47
已解决,谢谢!
官方例程都是0x08000000起始地址的,改成0x08001000同样进不了main;
仔细实验发现MDK无 ...

一直知道MDK需要烧boot,原来IAR不用也可以的。

使用特权

评论回复
8
xujeff7|  楼主 | 2015-9-8 09:33 | 只看该作者
大叔乔东 发表于 2015-9-7 21:32
一直知道MDK需要烧boot,原来IAR不用也可以的。

早说我就不用那么折腾到处找资料了!最后找不到就自己尝试看看,没想到真是这个问题!一直用IAR惯了,思维定势以为开发环境都是万能的,呵呵

使用特权

评论回复
9
styleno1| | 2015-9-8 15:18 | 只看该作者
本帖最后由 styleno1 于 2015-9-8 15:20 编辑

用Keil多年,没这个问题。
编辑说明:修改

使用特权

评论回复
10
Ketose| | 2015-9-8 17:42 | 只看该作者
不好好看数据手册.
GD32F130C8T6 系统引导的时候如果是从ROM引导,那么MCU复位后,硬件会把Flash映射到0x0800000处,然后硬件从0x0800000处取SP指针,接着从0x0800004处取中断向量表的Reset_Handler中断向量,执行复位后的初始化。而0x08000000处放的其实是中断向量表,也就是启动文件里初始化的。
你把你的程序烧到0x08001000处。硬件还是从0x0800000处执行。不是你把程序烧在哪里就从哪里执行,明白不?

使用特权

评论回复
11
Ketose| | 2015-9-8 17:48 | 只看该作者
如果你执意要放在0x08001000处,
你可以修改sct文件 把启动文件放在0x08000000,这个是不能变的。
把你的main放在0x08001000处,这样是可以的。

使用特权

评论回复
12
MicroMMU| | 2015-10-1 22:00 | 只看该作者
仿真前烧下flash

使用特权

评论回复
13
大叔乔东| | 2015-10-27 19:17 | 只看该作者
0x08000000,这个地址你好好的改的干嘛,哈哈!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

1

粉丝