打印

STM32 内部RAM boot问题请教,请香主和大家帮忙看看,谢谢

[复制链接]
5352|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
maomao2126|  楼主 | 2010-5-16 20:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,刚开始学习STM32f103zet6,对存储器的映射不是太了解。从而产生如下的疑问,请大家帮忙看看。

   我将GPIO的demo code download到内部RAM中,程序可以正常运行,但是看memory 窗口0x2000 0000的地址的数据,跟用keil生成的bin文件的数据不一样。

我目前使用MDK,用jlink来进行debug。个人理解,程序download 到内部ram,那0x2000 0000的位置的数据应该和keil 生成的bin的数据相同。


   并且如果程序reset后停在Main起始位置时,PC指针 = 0x0800 01c6,查相关资料指明0x0800 00000--0x0807 ffff为flash区域。即便是0x2000 0000被映到
0x0000 0000的位置开始,但是怎么会跑到0x0800 01c6位置呢。

   请高手帮忙解答一些,先谢谢大家了。

   可能这个问题真的很菜,但是我想了好久没有想明白,请大家帮帮忙,再次感谢了。
沙发
vigia| | 2010-5-17 09:57 | 只看该作者
看看你的板子的BOOT引脚是怎么连接的?是否连接为从RAM BOOT的方式。

使用特权

评论回复
板凳
香水城| | 2010-5-17 10:16 | 只看该作者
1)是否按照在RAM中运行的模式编译链接?
2)怎么知道下载到了RAM中?

使用特权

评论回复
地板
maomao2126|  楼主 | 2010-5-17 11:44 | 只看该作者
谢谢两位,目前boot设定的是SRAM boot 方式,不知道这种方式是否是将code 烧到内部ram

如果不是那code 怎么会跑起来,我的板子上根本没有SRAM,SRAM有问题我拿掉了
我现在用的是红牛的开发板

使用特权

评论回复
5
maomao2126|  楼主 | 2010-5-17 11:49 | 只看该作者
香主,是否按照在RAM中运行的模式编译链接  是什么意思?
你是值keil中的设定吗?
我是菜鸟,刚开始学,请多多见谅

再次谢谢了!

使用特权

评论回复
6
maomao2126|  楼主 | 2010-5-17 22:35 | 只看该作者
终于搞明白了,看了memory map才理解过来,如下:
Symbol Name                              Value     Ov Type        Size  Object(Section)

    ../../microlib/init/entry.s              0x00000000   Number         0  entry.o ABSOLUTE
    ../../microlib/init/entry.s              0x00000000   Number         0  entry2.o ABSOLUTE
    ../../microlib/init/entry.s              0x00000000   Number         0  entry5.o ABSOLUTE
    ../../microlib/init/entry.s              0x00000000   Number         0  entry7.o ABSOLUTE
    STM32F10x.s                              0x00000000   Number         0  stm32f10x.o ABSOLUTE
    STM32_Init.c                             0x00000000   Number         0  stm32_init.o ABSOLUTE
    dc.s                                     0x00000000   Number         0  dc.o ABSOLUTE
    demo_0.c                                 0x00000000   Number         0  demo_0.o ABSOLUTE
    handlers.s                               0x00000000   Number         0  handlers.o ABSOLUTE
    init.s                                   0x00000000   Number         0  init.o ABSOLUTE
    RESET                                    0x08000000   Section      236  stm32f10x.o(RESET)
    .ARM.Collect$$$$00000000                 0x080000ec   Section        0  entry.o(.ARM.Collect$$$$00000000)
    .ARM.Collect$$$$00000001                 0x080000ec   Section        4  entry2.o(.ARM.Collect$$$$00000001)
    .ARM.Collect$$$$00000004                 0x080000f0   Section        4  entry5.o(.ARM.Collect$$$$00000004)
    .ARM.Collect$$$$00000007                 0x080000f4   Section        8  entry7.o(.ARM.Collect$$$$00000007)
    .ARM.Collect$$$$00002712                 0x080000fc   Section        4  entry2.o(.ARM.Collect$$$$00002712)
    __lit__00000000                          0x080000fc   Data           4  entry2.o(.ARM.Collect$$$$00002712)
    .text                                    0x08000100   Section       28  stm32f10x.o(.text)
    .text                                    0x0800011c   Section      156  stm32_init.o(.text)
    .text                                    0x080001b8   Section       76  demo_0.o(.text)
    .text                                    0x08000204   Section       36  init.o(.text)
    i.__scatterload_copy                     0x08000228   Section       14  handlers.o(i.__scatterload_copy)
    i.__scatterload_null                     0x08000236   Section        2  handlers.o(i.__scatterload_null)
    i.__scatterload_zeroinit                 0x08000238   Section       14  handlers.o(i.__scatterload_zeroinit)
    STACK                                    0x20000000   Section      512  stm32f10x.o(STACK)

使用特权

评论回复
7
maomao2126|  楼主 | 2010-5-17 22:55 | 只看该作者
但是从上面的memory map来看,程序实际上还是在内部flash中,而不是内部ram。这部分应该是跟我的MDK设定有关,如下:

  (晕,怎么加载图片啊)

算了,MDK基本配置如下:option for tarfet-->target:
  off-chip    start       size
  IROM1     0x00800000   0x80000   (应该是跟这里的设定有很大的关系)  IRAM1     0x20000000   0x10000

使用特权

评论回复
8
maomao2126|  楼主 | 2010-5-17 23:03 | 只看该作者
按照上面的思路,继续寻求  程序如何被烧写到 内部ram

修改MDK的配置,如下:
off-chip    start       size
  IROM1     0x20000000   0x4000   
IRAM1     0x20004000   0xc000(这里size定义为0xc000是考虑内部ram的总size为0x10000)
按照这样的配置编译出的memory map 如下:

Image Symbol Table

    Local Symbols

    Symbol Name                              Value     Ov Type        Size  Object(Section)

    ../../microlib/init/entry.s              0x00000000   Number         0  entry.o ABSOLUTE
    ../../microlib/init/entry.s              0x00000000   Number         0  entry2.o ABSOLUTE
    ../../microlib/init/entry.s              0x00000000   Number         0  entry5.o ABSOLUTE
    ../../microlib/init/entry.s              0x00000000   Number         0  entry7.o ABSOLUTE
    STM32F10x.s                              0x00000000   Number         0  stm32f10x.o ABSOLUTE
    STM32_Init.c                             0x00000000   Number         0  stm32_init.o ABSOLUTE
    dc.s                                     0x00000000   Number         0  dc.o ABSOLUTE
    demo_0.c                                 0x00000000   Number         0  demo_0.o ABSOLUTE
    handlers.s                               0x00000000   Number         0  handlers.o ABSOLUTE
    init.s                                   0x00000000   Number         0  init.o ABSOLUTE
    RESET                                    0x20000000   Section      236  stm32f10x.o(RESET)    .ARM.Collect$$$$00000000                 0x200000ec   Section        0  entry.o(.ARM.Collect$$$$00000000)
    .ARM.Collect$$$$00000001                 0x200000ec   Section        4  entry2.o(.ARM.Collect$$$$00000001)
    .ARM.Collect$$$$00000004                 0x200000f0   Section        4  entry5.o(.ARM.Collect$$$$00000004)
    .ARM.Collect$$$$00000007                 0x200000f4   Section        8  entry7.o(.ARM.Collect$$$$00000007)
    .ARM.Collect$$$$00002712                 0x200000fc   Section        4  entry2.o(.ARM.Collect$$$$00002712)
    __lit__00000000                          0x200000fc   Data           4  entry2.o(.ARM.Collect$$$$00002712)
    .text                                    0x20000100   Section       28  stm32f10x.o(.text)
    .text                                    0x2000011c   Section      156  stm32_init.o(.text)
    .text                                    0x200001b8   Section       76  demo_0.o(.text)
    .text                                    0x20000204   Section       36  init.o(.text)
    i.__scatterload_copy                     0x20000228   Section       14  handlers.o(i.__scatterload_copy)
    i.__scatterload_null                     0x20000236   Section        2  handlers.o(i.__scatterload_null)
    i.__scatterload_zeroinit                 0x20000238   Section       14  handlers.o(i.__scatterload_zeroinit)
    STACK                                

编译的地址基本上跟自己的想法一致,但是程序烧写时提示flash download fail。奇怪,难道程序还是烧到flash?但是此时的boot 早已经选择成SRAM boot了,包括6楼的测试都是设定的SRAM boot。不太理解,继续查找原因,有知道的高手也帮忙解答一下,谢谢了。

使用特权

评论回复
9
maomao2126|  楼主 | 2010-5-17 23:15 | 只看该作者
通过baidu,上面的设定没有错误。但是需要烧写 脚本文件,找个脚本试试先。
好了,问题基本搞清楚,非常感谢 香主 和 vigia。
结贴了

使用特权

评论回复
10
zwll| | 2010-5-17 23:17 | 只看该作者
学习了

使用特权

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

本版积分规则

2

主题

266

帖子

1

粉丝