打印

STM32的程序的烧写? 运行 ?调试?调试脚本相关问题

[复制链接]
4532|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ducha|  楼主 | 2010-5-6 15:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ducha 于 2010-5-7 09:49 编辑

STM32的启动方式了解
但是对其的调试方式和储存介质一直糊涂
目前知道
调试可以在 片内的FLASH 和 RAM来进行,不知我用FSMC外挂的SRAM 可以不?

我将一段代码COPY到外部SRAM ,然后跳过去,没好使,不知是跳的问题 还是跳过去不能运行?
看到论坛上有人说可以在外部SRAM中运行,不知怎么弄。
官方给的那个FSMC/SRAM_DataMemory例程也没看明白到底在干什么
,
代码可以在 内部RAM、flash、
fsmc外挂的NOR 上可以运行么?NAND 是不行的对吧?
沙发
ducha|  楼主 | 2010-5-6 19:13 | 只看该作者
已经知道 SRAM中肯定是可以运行代码的了,我试过使用MDK在外部SRAM运行调试
STM32  外扩SRAM地址0x68000000(FSMC)

但是我 将代码(某函数)Copy到 此处0x68000000
然后用函数指针绝对跳转到此处
发生异常

求解

使用特权

评论回复
板凳
txcy| | 2010-5-6 20:55 | 只看该作者
哪些存储介质上运行,不是很理解

使用特权

评论回复
地板
香水城| | 2010-5-6 20:59 | 只看该作者
已经知道 SRAM中肯定是可以运行代码的了,我试过使用MDK在外部SRAM运行调试
STM32  外扩SRAM地址0x68000000(FSMC)

但是我 将代码(某函数)Copy到 此处0x68000000
然后用函数指针绝对跳转到此处
发生异常

求解 ...
ducha 发表于 2010-5-6 19:13


编译这个函数时是否指定它最终的运行地址?是否指定产生的代码是绝对跳转还是相对跳转?

我不知道如何设置编译器去指定这些内容,但如果不注意这个问题,多半会产生你碰到的问题。

使用特权

评论回复
5
ducha|  楼主 | 2010-5-7 09:18 | 只看该作者
谢谢楼上提示,外部SRAM 中的问题解决了,我现在可以在外部FSMC中调试,需要写调试脚本(ExRAM.ini)在操作SRAM之前初始化。
现在想用外部的NOR FLASH 第一步实现对其的烧写 同样是使用FSMC 地址为0X64000000,2M 16Bit
使用的是J-LINK -V7 开发环境为MDK3.7   不知怎么做?还请指点

第二步请问能否在nor flash 上仿真,怎么做。貌似是先将程序烧到NOR flash 然后调试是吧?具体怎么做呢?

使用特权

评论回复
6
ducha|  楼主 | 2010-5-7 09:22 | 只看该作者
3# txcy
  我没说清,包括
外部NOR FLASH 、NAND FLASH SRAM
内部 RAM 、flash
我想知道如何在这些存储介质上运行、调试程序
目前就剩下 NOR FLASH 不了解了,现在还未能烧写NORFLASH

使用特权

评论回复
7
IJK| | 2010-5-7 09:30 | 只看该作者
既然可以在外部SRAM 调试,那就可以在外部NOR FLASH 调试,当然调试脚本(比如ExNOR.ini)也是需要的,唯一差别就在烧写。外部NOR FLASH 需要Flash Loader,这跟内部FLASH也需要Flash Loader是差不多的道理。

使用特权

评论回复
8
ducha|  楼主 | 2010-5-7 09:45 | 只看该作者
本帖最后由 ducha 于 2010-5-7 10:41 编辑

7# IJK



先编写一个Flash Loader 并用J-LINK烧写到内部Flash,然后从 内部Flash 启动,
然后通过某种通信方式将另一个.BIN传给Flash loader ,让Flash loader 完成对NOR Flash 的烧写。
之后再跳转到 烧写的地址处运行。
这种方法是可行的,对吧?
但现在我想问,
1.能否 使用J-FLASH 直接烧写NOR FLASH ,别误会我不是不做Flash Loader,连Loader都做不了也太。。。呵呵。。 不过用J-FLASH这样岂不更方便,


2 NOR FLASH 的调试
先看在外部SRAM如何调试
EXt SRAM.INI 内容
InitSRAM();                                   // 配置 FSMC用于SRAM
LOAD obj\output.axf INCREMENTAL                // 下载程序到外部SRAM
CopyVectTable();                                        // 将外部SRAM的中断向量表复制到CPU内部RAM
Setup();                                     // 配置堆栈和PC指针
g, main                                                                // 运行到 main()函数后暂停

分析外部SRAM的调试脚本实际上是首先完成了FSMC的初始化在下载程序到外部SRAM,然后跳转执行,调试
大胆猜测 NOR FLASH的调试 也是先完成 FSMC的初始化 在下载到 NOR FLASH中在云寻调试,不知对不?这样是不是就直接完成了烧写,他那个是又可以调试 。。。

使用特权

评论回复
9
ducha|  楼主 | 2010-5-7 10:44 | 只看该作者
4# 香水城
已经找到问题出在哪里了,我之间将函数COPY到SRAM 但是 该函数里有子函数(存在相对寻址)正如你说的这不是绝度寻址,导致寻址异常;
此外在COPY时 没有注意PC-1(因为要保存PC 到LR)导致之前COPY的东西有问题。
谢谢版主帮忙啊。

使用特权

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

本版积分规则

11

主题

75

帖子

1

粉丝