打印
[其他ST产品]

str711 地址问题

[复制链接]
5479|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guwengchuixue|  楼主 | 2009-8-4 14:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
菜鸟提问,希望得到帮助!!
最近刚使用STR711,看了DATASHEET和相关例程,收获不少,但是还是有些疑问:

将str711设置为内部FLASH启动,也就是说将FLASH的地址映射到0x0,那么当运用程序读FLASH的地址为什么要使用0x4****x,而不是0;写的时候我看到例程怎么两个地址都可以写,如写0X400c2100,可以用0X400c2100,也可以使用0X000c2100;而读必须使用0X400c2100。难道同一个物理单元同时拥有两个地址?
想了很久,查了很久,资料很少,没有搞明白。
沙发
香水城| | 2009-8-4 14:34 | 只看该作者
没错,同一个物理单元同时拥有两个地址!

使用特权

评论回复
板凳
guwengchuixue|  楼主 | 2009-8-4 15:15 | 只看该作者
谢谢!
怪不得,这点跟其他芯片有太大的差别了,还是感觉st的资料少了,特别是中文的资料

使用特权

评论回复
地板
香水城| | 2009-8-4 15:19 | 只看该作者
我们目前主推的产品是STM32,如果你刚开始学,还是看STM32比较好。STM32的功能和性能比STR7有了全面的提升,对于客户作新设计,我们已经不推荐使用STR7了。

使用特权

评论回复
5
guwengchuixue|  楼主 | 2009-8-4 15:31 | 只看该作者
哦。这样子阿。不过我只设计软件,硬件不是我们公司负责,所以只能学习 STR7。
还有个问题,浏览了一下该论坛,说:flash第一次擦除写要在RAM中运行,是什么意思,每次上电都要这样吗?
好象没有这个必要吧.

使用特权

评论回复
6
香水城| | 2009-8-4 15:36 | 只看该作者
每次上电都要这样。

使用特权

评论回复
7
guwengchuixue|  楼主 | 2009-8-4 15:42 | 只看该作者
好象我现在没有这么做都可以,所有程序都是在FLASH 中运行,照样可以读写BANK1,没有出错,
我在ADS中设置R0为0X40000000,程序下载到FLASH中,设置FLASH启动.应该所有程序都是在FLASH运行吧.但是就是没有出错!!!

使用特权

评论回复
8
guwengchuixue|  楼主 | 2009-8-4 15:51 | 只看该作者
好象现在有时候会开机无反应,应该是程序不执行还是跑飞掉,不知道是不是这个问题引起的,想请教一下,每次上电 要在RAM里运行第一次读写FLASH是如何做的?方法是怎么样的?谢谢!!

使用特权

评论回复
9
香水城| | 2009-8-4 16:22 | 只看该作者
把需要操作的函数拷贝到RAM中,再调用RAM中的函数。

记得以前有一个例子,你找找看。

使用特权

评论回复
10
guwengchuixue|  楼主 | 2009-8-4 16:51 | 只看该作者
很遗憾,我在论坛中搜索了一下,没有找到该例子,那个例子是在论坛中吗?.那么想向版主请教一下,程序要实现从flash跳到ram,再从ram跳到FLASH是如何实现的是不是要在C语言中插入汇编使用LDR直接跳转,还是如何用C语言实现的?

使用特权

评论回复
11
guwengchuixue|  楼主 | 2009-8-4 18:26 | 只看该作者
o!!!!!!!!!

使用特权

评论回复
12
香水城| | 2009-8-4 18:42 | 只看该作者
本帖最后由 香水城 于 2009-8-4 18:49 编辑

你到STR7的分类阅读区找找,我也回忆一下。

刚才好像找到一个,但是旧版换新版时链接丢了。

使用特权

评论回复
13
guwengchuixue|  楼主 | 2009-8-6 18:09 | 只看该作者
有没有相关例子啊啊,或者稍微详细说明一下方法阿????

使用特权

评论回复
14
ST_ARM| | 2009-8-7 10:07 | 只看该作者
这个设置是根据编译器来设置的,不知道你使用的是什么开发软件。如果你使用的是IAR,我这里有相应的例程,里面有关于IAR方面的设置。如果你使用的是Keil(正版的),你可以咨询ARM或英蓓特。

使用特权

评论回复
15
guwengchuixue|  楼主 | 2009-8-7 10:18 | 只看该作者
谢谢,能发给我做的参考吗,邮箱是guwengchuixue@163.com
我是使用ADS1.2

使用特权

评论回复
16
guwengchuixue|  楼主 | 2009-8-7 10:56 | 只看该作者
我想了想,就是不明白。程序执行如何从flash跳到ram又从ram跳回flash,而在ram中要运行的程序是如何复制过去,在flash中如何确定这段程序的开始复制地址和结束地址?

使用特权

评论回复
17
vigia| | 2009-8-7 11:14 | 只看该作者
程序怎么跳,怎么拷贝都不是你关心的,是编译器完成的。

比如A在FLASH中运行,又调用B,B在RAM运行,B又调用C。你需要在写程序时指明A和C在flash中,B在RAM中(ADS怎么指定函数地址我不知道,你找找ADS的help文件吧),这样编译器会自动生成一段初始化代码,在main函数执行前自动拷贝B到RAM指定地址中。A在调用B时,会调用B在RAM中的地址,B去调用C,也是跳到C在flash中的地址,这些都不需要你关心。

使用特权

评论回复
18
guwengchuixue|  楼主 | 2009-8-10 16:04 | 只看该作者
谢谢!!
不过再我的理解,函数调用是使用相对地址跳转,怎么可能在FLASH和RAM中跳转而不用我们处理呢?
不正确之处还请大侠没指正。

使用特权

评论回复
19
Neoo| | 2009-8-10 16:14 | 只看该作者
C语言里面程序可以分为code,RO,RW,ZI(每个程序可以有单独的,也可以公用)在link的时候根据链接脚本分配这些段的地址,在main函数初始化的时候把bin文件中的这些代码拷贝到相应的地址上。这些拷贝都不需要人工的干预

使用特权

评论回复
20
guwengchuixue|  楼主 | 2009-8-11 17:18 | 只看该作者
这个有点明白,比如:main函数是在FLASH中运行,LINK时地址为FLASH地址,如定义函数runram();其连接为RAM地址.当开机时自动将runram()相关代码拷贝到RAM中,这个是明白的.不明白的地方是:当main函数调用runram()函数时,会自动跳转到RAM运行吗?如果会,那么当该函数结束时,会自动跳转回main函数继续运main函数的代码?

使用特权

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

本版积分规则

17

主题

53

帖子

0

粉丝