搜索
bottom↓
回复: 13

在SRAM中运行跟在SRAM中调试的区别及实现方式

[复制链接]

出0入0汤圆

发表于 2012-4-15 10:49:53 | 显示全部楼层 |阅读模式
本帖最后由 lester1101 于 2012-4-15 18:44 编辑

以STM32F103为例,
   
        芯片出厂时内部通常都固化一段引导程序(bootblock),存放于系统闪存,地址为0x1FFF0000

        我们知道ARM开机时物理结构决定默认程序入口为0地址的中断向量表,而STM32F1030复位后总是从0X04取地址开始执行程序,

       然后在SYSCLOCK的第4个时钟上升沿,采样锁定boot引脚的值入动态重映射寄存器MEM_MODE,

1   若采样的boot值为01,则片上地址为0x1FFF0000的系统闪存被映射到0x00地址,执行里面的程序bootblock,即第4个脉冲后虽然系统是在从0地址取指令,实际取得是地址0X1FFF0000后面的指令

2  若采样的boot值为00或10,则片上地址为0X08000000的用户闪存被映射到0X00地址,执行里面用户写的程序,
即第4个脉冲后虽然系统是在从0地址取指令,实际取得是地址0X08000000后面的指令
    注:这种情况下,用户可以在用户程序开始的地方设计一段程序,将外部norflash或者nandflash中的应用程序,搬移到外部SDRAM或内部SRAM,然后对外部SDRAM或内部SRAM进行重映射到0x00,然后PC指向0地址,运行应用程序,用户在开始的地方设计的这段程序就是所谓的bootloader


3   若采样的boot值为11,则片上地址为0X20000000的SRAM被映射到0X00地址,执行里面的程序,
即第4个脉冲后虽然系统是在从0地址取指令,实际取得是地址0X20000000后面的指令
     

      关键就是映射值为SRAM的情况,sram里面一开始不可能有代码,必须搬运过去然后再映射为sRAM,这个搬运的过程就是在SRAM中运行跟在SDRAM中调试的区别所在:

1     在SRAM中运行靠的是flash中的bootloader程序【开机时boot引脚映射值为flash,然后flash里的bootloader程序先将代码搬运到ram,然后修改映射值为SRAM】,
2      而在SRAM中调试,开机boot引脚默认映射值为SRAM,在系统运行前开发链接器要将代码搬运到SRAM。


我也是初学,不知我的理解有没有错误,不过还是有一个不清楚的地方,stm32貌似不能映射为外部SRAM,但却能在外部SRAM中调试,STM32如果能重映射为外部SRAM,怎么重映射呢,是不是通过软件修改FSMC寄存器?还是改MMU?
MMU怎么改呢?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入31汤圆

发表于 2012-4-15 11:01:38 | 显示全部楼层
cortex-m3内核有个中断向量表映射寄存器,看一看吧

另外要深刻理解bootloader的一些东西,就要了解几个重要的概念,程序的加载域、运行域、PIC(位置无关代码),基本原理清楚以后,不管你是通过设置寄存器进行中断向量映射,还是同过MMU,归根到底都是一样的

出0入0汤圆

发表于 2012-4-15 11:39:40 | 显示全部楼层
>> stm32貌似不能映射为外部SRAM

stm32f4似乎能映射为外部SRAM

出0入0汤圆

 楼主| 发表于 2012-4-15 17:10:29 | 显示全部楼层
zchong 发表于 2012-4-15 11:01
cortex-m3内核有个中断向量表映射寄存器,看一看吧

另外要深刻理解bootloader的一些东西,就要了解几个重 ...

感谢回复,请问该寄存器怎么改?改哪个寄存器?改MMU又怎么改?

出0入31汤圆

发表于 2012-4-15 18:37:26 | 显示全部楼层
lester1101 发表于 2012-4-15 17:10
感谢回复,请问该寄存器怎么改?改哪个寄存器?改MMU又怎么改?

#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
这个是ST库里的,对于cortex-m3来说没有mmu,先别管mmu了,把cortex-m3搞清楚再看看其它的吧

出0入0汤圆

发表于 2012-4-18 22:31:07 | 显示全部楼层
这样设置 SCB->VTOR 可行否 ?

        PUBLIC  __vector_table

        DATA
__vector_table
        DCD     sfe(CSTACK)
        DCD     Reset_Handler             // Reset Handler


  /* Vector Table Relocation in Internal FLASH. */
  /* Vector Table Relocation in Internal SRAM. */
  SCB->VTOR = (unsigned int)&__vector_table;

出0入0汤圆

 楼主| 发表于 2012-4-19 00:14:22 | 显示全部楼层
zchong 发表于 2012-4-15 18:37
#ifdef VECT_TAB_SRAM
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Inte ...

请前辈指教这个寄存器设置之后是什么结果呢,只是向量表重映射么?存储器能通过这样重映射吗?

出0入31汤圆

发表于 2012-4-19 08:58:39 | 显示全部楼层
不能,这个仅仅是向量表

出0入0汤圆

发表于 2012-4-19 09:02:13 | 显示全部楼层
本帖最后由 dr2001 于 2012-4-19 09:04 编辑

映射出去干什么呢?
CM3是能改向量表基地址的,Flash里边写个简单程序,把向量表基地址改了,Load SP和Reset向量跳转即可。

不过CM3运行在非Flash上,效率可能会低,和内部硬件实现有关。除非特别需求外,还是跑Flash比较好。

出0入0汤圆

发表于 2012-4-19 09:06:14 | 显示全部楼层
lester1101 发表于 2012-4-19 00:14
请前辈指教这个寄存器设置之后是什么结果呢,只是向量表重映射么?存储器能通过这样重映射吗? ...

映射向量表,代码编译成PIC的,就可以随便用了。

常用是代码编译在SRAM地址空间,重映射向量表。

出0入0汤圆

发表于 2013-4-7 19:08:25 | 显示全部楼层
大神们能否更详细点

出0入0汤圆

 楼主| 发表于 2013-9-21 10:26:22 | 显示全部楼层
现在无意中又看到了自己的这个帖子,没想到是一年之后了,进行回顾重新理解也希望能帮助到跟我有一样困惑的同学者,也谢谢之前回复的前辈,当初没能理解你们的深意,现在理解了:

之前的困惑其实是没有理解编译这个概念:

一般情况下,MCU的编译器编译代码时是将代码编译在从0地址开始的空间里的,这是由编译器设计之初就决定的,这也是每一个MCU都有他对应的编译器的原因,这样如果芯片不支持将某部分位置(如SRAM)映射或重映射到0地址,原则上是不能够在这部分位置运行程序的,除非用特殊编译方式,即前辈们说的PIC位置无关域编译方式,才可以在任何位置运行

所以程序在哪边运行还是要根据芯片来定,不同的芯片有各自的特点,有些适合在RAM运行,有些不适合在RAM运行,还要根据不同芯片各自的特点去运用它

出0入0汤圆

发表于 2013-9-22 21:50:26 | 显示全部楼层
先MARK一下,我也是很糊涂。

出0入0汤圆

发表于 2016-7-31 22:41:01 | 显示全部楼层
dr2001 发表于 2012-4-19 09:06
映射向量表,代码编译成PIC的,就可以随便用了。

常用是代码编译在SRAM地址空间,重映射向量表。 ...

你好 请问mdk可以编译为位置无关代码吗 mdk中勾选c和asm选型卡中ropi  最后结果发现放在随意位置就会死机
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 17:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表