6132|15

171

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

28335例程中加printf显示一些cmd文件出错 [复制链接]

我在头文件里面include了stdio.h并在main里面使用了pfrintf。后来系统编译的时候说我.text的段内存不够大。我看了一下初始时的cmd里面,text是放在page0里面的,长度只有0x1000。加上stdio.h之后,编译器说.text需要占用长度2200。因为cmd里有所有的段地址都安排好的,而且几乎是相邻的。那我就重新定义了一个段RAML9,选取了一个空间,定义了长度,将.text指定到这个段去。结果编译的时候就出现C28xx: Loader: One or more sections of your program falls into a memory region that is not writable.
我觉得了修改段长度或是自己定义一个新的段这是允许的,但我不知道是不是有些段不能给用户操作使用。请问出现这个错误是什么原因呢?但我不修改的话,加了新的头文件进来,对.text的长度要求增大了啊,那必须是要做修改的啊。

最新回复

reserved是不能随意占用的  详情 回复 发表于 2015-12-17 12:42
 
点赞 关注

回复
举报

667

帖子

3

TA的资源

版主

沙发
 
可以修改cmd,把没用的部分用起来就好,修改一下分配。

点评

版主啊,我昨晚再看了一下datasheet,好像并不是所有的ram空间都可以自由配置,有一部分是保留的。不知道能不能占用,我再研究研究  详情 回复 发表于 2015-12-16 10:21
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
nemo1991 发表于 2015-12-15 22:52
可以修改cmd,把没用的部分用起来就好,修改一下分配。

版主啊,我昨晚再看了一下datasheet,好像并不是所有的ram空间都可以自由配置,有一部分是保留的。不知道能不能占用,我再研究研究

点评

所以CMD文件修改要参照datasheet  详情 回复 发表于 2015-12-16 12:34
 
 
 

回复

140

帖子

0

TA的资源

版主

4
 
.text分配到RAM说明你用的RAM仿真,你可以可以考虑把代码烧录到Flash中运行,那样.text的空间就足够大了

点评

这样确实可以,但我看了内存映射表,你看一下就会发现里面还有很多区域的reserved的,没被使用的哦!  详情 回复 发表于 2015-12-16 12:50
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

5
 
jonny0811 发表于 2015-12-16 10:21
版主啊,我昨晚再看了一下datasheet,好像并不是所有的ram空间都可以自由配置,有一部分是保留的。不知 ...

所以CMD文件修改要参照datasheet

点评

我后来试了个办法,可以了。我工程里面有RAML1 2 3……,而RAML2跟RAML3是没有使用的,然后我就把它删除了,将RAML1的长度从1000扩展到3000.这样就能装下.text段了。但我还是想知道我之前这样做为什么不行,因为我之  详情 回复 发表于 2015-12-16 13:06
 
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

6
 
bkn1860 发表于 2015-12-16 12:27
.text分配到RAM说明你用的RAM仿真,你可以可以考虑把代码烧录到Flash中运行,那样.text的空间就足够大了

这样确实可以,但我看了内存映射表,你看一下就会发现里面还有很多区域的reserved的,没被使用的哦!

点评

Flash和RAM的分配主要还是参照Memory Map来修改 。28335 能使用的RAM L0~L7(双映射),M0,M1。其他地址是不能使用的  详情 回复 发表于 2015-12-16 13:08
 
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

7
 
ltbytyn 发表于 2015-12-16 12:34
所以CMD文件修改要参照datasheet

 
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

8
 
ltbytyn 发表于 2015-12-16 12:34
所以CMD文件修改要参照datasheet

我后来试了个办法,可以了。我工程里面有RAML1 2 3……,而RAML2跟RAML3是没有使用的,然后我就把它删除了,将RAML1的长度从1000扩展到3000.这样就能装下.text段了。但我还是想知道我之前这样做为什么不行,因为我之前所选取的地方,是datasheet里面内存映射表上显示着reserved的区域,有很大的一片区域是保留着的,我觉得不用好浪费啊,我就直接RAML9 origin=0x0c0000,length=0x03000.大家不妨看一下28335里面page0的这个区域是reserved没被使用的

点评

reserved是不能随意占用的  详情 回复 发表于 2015-12-17 12:42
 
 
 

回复

140

帖子

0

TA的资源

版主

9
 
jonny0811 发表于 2015-12-16 12:50
这样确实可以,但我看了内存映射表,你看一下就会发现里面还有很多区域的reserved的,没被使用的哦!{:1_ ...

Flash和RAM的分配主要还是参照Memory Map来修改 。28335 能使用的RAM L0~L7(双映射),M0,M1。其他地址是不能使用的

点评

这么说来,如果ramlink cmd不能满足我工程中对段的要求。那只能去flash里面调试或者说用外部ram了。内部ram只有点点大,也只能调试一些小点的程序咯?  详情 回复 发表于 2015-12-16 13:15
 
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

10
 
bkn1860 发表于 2015-12-16 13:08
Flash和RAM的分配主要还是参照Memory Map来修改 。28335 能使用的RAM L0~L7(双映射),M0,M1。其他地 ...

这么说来,如果ramlink cmd不能满足我工程中对段的要求。那只能去flash里面调试或者说用外部ram了。内部ram只有点点大,也只能调试一些小点的程序咯?

点评

是的,MCU的RAM都是比较少,28335仿真少量程序可以在RAM中跑,超过了就只能放到Flash中仿真。放到RAM中运行优点是不用擦写Flash,运行速度快一些。  详情 回复 发表于 2015-12-16 13:20
 
 
 

回复

140

帖子

0

TA的资源

版主

11
 
jonny0811 发表于 2015-12-16 13:15
这么说来,如果ramlink cmd不能满足我工程中对段的要求。那只能去flash里面调试或者说用外部ram了。内部r ...

是的,MCU的RAM都是比较少,28335仿真少量程序可以在RAM中跑,超过了就只能放到Flash中仿真。放到RAM中运行优点是不用擦写Flash,运行速度快一些。

点评

说得太好了。我刚刚又仔细看了一下datasheet。除开被reserve的区域,能用的真的不多。除了你说的那几个部分剩下的不是提供给我们自由分配的。但我发现,就算是随意分配了(比方说乱分配到reserved区域),如果程序没  详情 回复 发表于 2015-12-16 13:32
 
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

12
 
bkn1860 发表于 2015-12-16 13:20
是的,MCU的RAM都是比较少,28335仿真少量程序可以在RAM中跑,超过了就只能放到Flash中仿真。放到RAM中运 ...

说得太好了。我刚刚又仔细看了一下datasheet。除开被reserve的区域,能用的真的不多。除了你说的那几个部分剩下的不是提供给我们自由分配的。但我发现,就算是随意分配了(比方说乱分配到reserved区域),如果程序没错,编译的时候是不会报错的,只有在你烧写的时候。会报错。但编译过后点开map看看,会发现你所分配到reserved里的段里面已经被占用了,也就是你编译的时候把资料写进去了,尽管那个段不能给我们这样用。但编译器在烧写程序的时候才报错。你觉得呢?

点评

reserve区域是TI预留的区域,说白了就是那段地址没有对应的实际内存,编译器编译只会根据CMD文件来分配,所以编译时是没有问题的。烧录过程是编译器通过仿真器对MCU Flash和RAM进行操作的过程,这个时候擦写Flash或  详情 回复 发表于 2015-12-16 13:46
 
 
 

回复

140

帖子

0

TA的资源

版主

13
 
jonny0811 发表于 2015-12-16 13:32
说得太好了。我刚刚又仔细看了一下datasheet。除开被reserve的区域,能用的真的不多。除了你说的那几个部 ...

reserve区域是TI预留的区域,说白了就是那段地址没有对应的实际内存,编译器编译只会根据CMD文件来分配,所以编译时是没有问题的。烧录过程是编译器通过仿真器对MCU Flash和RAM进行操作的过程,这个时候擦写Flash或者RAM导入数据肯定会报错,没有Flash和RAM的区域擦、写、校验都会返回错误标志。

点评

说得太好了,谢谢你  详情 回复 发表于 2015-12-16 16:31
 
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

14
 
bkn1860 发表于 2015-12-16 13:46
reserve区域是TI预留的区域,说白了就是那段地址没有对应的实际内存,编译器编译只会根据CMD文件来分配, ...

说得太好了,谢谢你
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

15
 
jonny0811 发表于 2015-12-16 13:06
我后来试了个办法,可以了。我工程里面有RAML1 2 3……,而RAML2跟RAML3是没有使用的,然后我就把它删除 ...

reserved是不能随意占用的

点评

晓得了,谢谢版主  详情 回复 发表于 2015-12-17 15:26
 
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

16
 
ltbytyn 发表于 2015-12-17 12:42
reserved是不能随意占用的

晓得了,谢谢版主
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表