28335例程中加printf显示一些cmd文件出错

2019-03-24 09:37发布

我在头文件里面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的长度要求增大了啊,那必须是要做修改的啊。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
jonny0811
1楼-- · 2019-03-25 06:06
 精彩回答 2  元偷偷看……
bkn1860
2楼-- · 2019-03-25 06:38
jonny0811 发表于 2015-12-16 12:50
这样确实可以,但我看了内存映射表,你看一下就会发现里面还有很多区域的reserved的,没被使用的哦!{:1_ ...

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

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

这么说来,如果ramlink cmd不能满足我工程中对段的要求。那只能去flash里面调试或者说用外部ram了。内部ram只有点点大,也只能调试一些小点的程序咯?
bkn1860
4楼-- · 2019-03-25 15:26
 精彩回答 2  元偷偷看……
jonny0811
5楼-- · 2019-03-25 18:26
bkn1860 发表于 2015-12-16 13:20
是的,MCU的RAM都是比较少,28335仿真少量程序可以在RAM中跑,超过了就只能放到Flash中仿真。放到RAM中运 ...

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

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

一周热门 更多>

相关问题

    相关文章