搜索
bottom↓
回复: 28

九九的STM32笔记(八)IAR平台,在内存中调试STM32

[复制链接]

出0入0汤圆

发表于 2009-2-24 13:32:20 | 显示全部楼层 |阅读模式
我们玩ARM9,一般都是在内存里调试程序,速度飞快。STM32下也可以这样,虽说现在的flash寿命已经很长了,但flash中调试烧录程序还是一个很慢的过程,有时候程序上一个小小的改动要花上几倍的时间下载代码,这确实是不能忍受的。
  我们也可以在开发STM32时,在内存中调试程序。
  STM32这颗Cortex-M3控制器,与其他许多ARM一样,提供了BOOT0和BOOT1两个管脚用于启动选择。
BOOT1=x  BOOT0=0  从用户闪存启动,这是正常的工作模式。
BOOT1=0  BOOT0=1  从系统存储器启动,这种模式启动的程序功能由厂家设置。(用于串口ISP)
BOOT1=1  BOOT0=1  从内置SRAM启动,这种模式可以用于调试。
  在芯片上电复位时,BOOT0和BOOT1两个管脚的状态将决定芯片从何处启动。

1.当BOOT0和BOOT1均设置为逻辑1时,系统将从内置SRAM中启动,这是代码内存调试的第一个条件。

2. 然后,我们需要在代码中设置正确的中断向量表位置。中断向量表通常被放置在用户程序的开始,所以flash中运行时,向量表位于0x08000000处,而当代码被放置在SRAM中运行时,他的位置就成了0x20000000。在初始化NVIC时,我们可以放置如下代码,定义向量表的位置

    NVIC_SetVectorTable(0x20000000 , 0x0);

    NVIC_SetVectorTable(0x08000000 , 0x0);

3. 在编译器中,要进行正确的设置。这里以IAR 5.4为例说明。
    3.1.  工程选项中Linker项,Config选项卡中,指定Linker Configuration File为stm32f10x_ram.icf, 该文件在FWLIB安装包中可以获得,IAR4和5分别有不同的配置文件。
    3.2.  同样是工程选项中Debug项,Download选项卡中,去掉所有钩子,不下载代码到flash

  经过以上步骤,代码就可以在内存中调试,下载速度飞快,调试速度也比flash中快了不少!

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-2-24 13:41:07 | 显示全部楼层
防真器用ST-LINKII也可以么?

出0入0汤圆

 楼主| 发表于 2009-2-24 13:49:49 | 显示全部楼层
STLINK也可以类似的设置

出0入0汤圆

发表于 2009-2-24 15:37:42 | 显示全部楼层
hao

出0入0汤圆

发表于 2009-2-24 16:25:54 | 显示全部楼层
我在用IAR时发现4.42与5.20安装包里的头文件不同,4.42里的头文件在5.20里面没有了,还需要手动复制一个.

出0入0汤圆

发表于 2009-2-24 17:23:44 | 显示全部楼层
hao

出0入0汤圆

发表于 2009-2-24 18:48:56 | 显示全部楼层
楼主的分享不错,顶一下!

出0入0汤圆

发表于 2009-2-26 22:31:33 | 显示全部楼层
1.当BOOT0和BOOT1均设置为逻辑1时,系统将从内置SRAM中启动,这是代码内存调试的第一个条件。

用万利开发板经过测试发现,代码内存调试与BOOT0和BOOT1的设置没有关系。

出0入0汤圆

发表于 2009-2-26 22:35:09 | 显示全部楼层

(原文件名:设置.JPG)


(原文件名:设置1.JPG)

出0入0汤圆

发表于 2009-2-26 22:36:12 | 显示全部楼层
其中RAM.INI 如下:

FUNC void Setup (void) {

  SP = _RDWORD(0x20000000);          // Setup Stack Pointer

  PC = _RDWORD(0x20000004);          // Setup Program Counter

  _WDWORD(0xE000ED08, 0x20000000);   // Setup Vector Table Offset Register

}


LOAD .\Obj\EK-STM32F103VB.axf INCREMENTAL      // Download,.axf

Setup();                             // Setup for Running


g, main

出0入0汤圆

 楼主| 发表于 2009-2-28 16:51:45 | 显示全部楼层
我今天也试了,的确没有关系

奇怪的时刚买回万利板的时候,记得好像要跳线后才能正常,可能是当时设置还有点问题吧~~

更正:内存中调试代码与BOOT0、1的状态无关

出0入0汤圆

发表于 2009-3-12 22:01:27 | 显示全部楼层
问题: 再RAM调试程序的话,RAM好小啊,除非是10几K的还差不多吧,而且好多变量也要占RAM

出0入0汤圆

发表于 2009-4-17 18:08:00 | 显示全部楼层
Mark

出0入0汤圆

发表于 2009-7-10 21:50:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-6 00:55:26 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2010-3-17 13:38:58 | 显示全部楼层
mark

出0入46汤圆

发表于 2010-5-24 11:21:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-6 13:41:11 | 显示全部楼层
JH

出0入0汤圆

发表于 2010-9-1 17:16:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-26 15:36:05 | 显示全部楼层
回复【8楼】jiangjx
-----------------------------------------------------------------------

请问你这是MDK下的sram调试吧,你具体说一下步骤吗?
因为,我在网上看到一个跟这类似的资料,结果却不能从sram调试!

出0入0汤圆

发表于 2010-11-26 18:41:09 | 显示全部楼层
一样的问题

出0入0汤圆

发表于 2011-1-4 17:28:39 | 显示全部楼层
回复【10楼】jjldc  九九
我今天也试了,的确没有关系
奇怪的时刚买回万利板的时候,记得好像要跳线后才能正常,可能是当时设置还有点问题吧~~
更正:内存中调试代码与boot0、1的状态无关

-----------------------------------------------------------------------

我在DX32板上试过,BOOT0、1的引脚均为1时有效,可以实现从RAM启动。
既然芯片的数据手册中写了,那就不可能无效。可能是你哪里的操作方法有误吧。

回复【9楼】jiangjx  
其中ram.ini 如下:
func void setup (void) {
  sp = _rdword(0x20000000);          // setup stack pointer
  pc = _rdword(0x20000004);          // setup program counter
  _wdword(0xe000ed08, 0x20000000);   // setup vector table offset register
}
load .\obj\ek-stm32f103vb.axf incremental      // download,.axf
setup();                             // setup for running
g, main

-----------------------------------------------------------------------
这种方式很不好,虽然第一次按KEIL的调试按钮能够正常调试,但是如果设计过程中按下KEIL的复位按钮,那PC的指针将重新指向0x8000000。除非你在KEIL的命令行窗口中执行setup(),否则必须先退出调试模式再进入才可正常调试。

出0入0汤圆

发表于 2011-7-6 16:11:03 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-7 19:44:09 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2011-8-10 15:58:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-11 11:38:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-7 09:09:48 | 显示全部楼层
搞不懂你们 这么小的ram放的下吗你们

出0入0汤圆

发表于 2014-2-9 06:58:19 来自手机 | 显示全部楼层
有用谢谢

出0入0汤圆

发表于 2014-3-3 08:41:54 | 显示全部楼层
谢谢楼主分享!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-17 10:14

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

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