5079|3

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教2407数据区与程序存储区的问题!谢谢 [复制链接]

我用2407做一个液晶显示,因为有存放大量字符数据的常量数组,我把这些数组定义为const unsigned char 类型。cmd文件如下:
-o LCD.out
- stack 60
MEMORY
{
    PAGE 0:    /* Program Memory */
        VECS:           org=00000h,   len=00040h         
        FLASH:          org=00050h,   len=07FB0h                           PROG:           org=08000h,   len=07FFh
    PAGE 1:    /* Data Memory */
            B2:             org=00060h,   len=00020h           /* internal DARAM */   
        B0:             org=00200h,   len=00100h           /* internal DARAM */   
        B1:             org=00300h,   len=00100h           /* internal DARAM */   
        SARAM:          org=00800h,   len=00800h   /* internal SARAM
}
SECTIONS
{  
        .text        : {} >   FLASH      PAGE 0           /* initialized */   
        .data        : {} >   FLASH      PAGE 0   
        .cinit        : {} >   FLASH      PAGE 0           /* initialized */   
        .switch        : {} >   FLASH      PAGE 0           /* initialized */   
        .const        : {} >   FLASH       PAGE 0           /* initialized */     
        .bss        : {} >   SARAM      PAGE 1       /* uninitialized */   
        .stack        : {} >   SARAM      PAGE 1           /* uninitialized */     
        .vectors  : {} >   VECS       PAGE 0   /* initialized */
}
这样定义是不是应是把这些数组放到flash区里了?!编译的时候没有问题,但是一仿真运行就进到NMI中断了。我外部调试用的RAM是64kbit*16位的。在不外扩存储器的情况下把这些数组怎么样才能放到程序存储区而程序又能正常运行,请教大家这个应该怎么解决,急切等待大家的帮助。万分感谢!!!

最新回复

我的qq:402177605 我不明白的地方是我怎么修改 库和编译库中的文件,库是封装好的, 怎么把boot.obj归档到到rts.2xx.lib库中。 共同学习一下! 具体实现方法如下,在CMD文件中加入如下的脚本命令: .const : load=CODE PAGE 0 run=DATA PAGE 1 { _const_run=.;//(获得当前运行地址) *(.c_mark) *(.const)_const_length=.-_const_run;} 然后对运行时间库中的boot.asm文件进行如下步骤的操作: 1)从rts.rc源文件库中提取boot.asm Dspar -x  rts.src  boot.asm 2)添加上面的代码到boot.asm 3)重新编译boot.asm 生成boot.obj文件dspa  -v2xx  boot.asm 4)把boot.obj归档到到rts.2xx.lib库中。 dspar -r  rts2xx.lib boot.obj 此时生成新的文件rts2xx.Lib将代替原来的rts2xx.Lib。在编译时C语言程序将链接到新的rts2xx.lib。当DSP上电初始化时,DSP会自动地将程序空间的.const的数据搬移到数据空间的中运行地址,从而达到了充分利用2407A片内存储器节省成本的目的。   详情 回复 发表于 2007-12-4 03:37
 
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你的问题解决了吗?
我也遇到了相同的问题,仿真一运行,程序就跑飞,也是NMI中断的问题。高手看下该怎么解决啊!
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

给你个参考文章

此文章我没有实验可以借鉴
基于TMS320LF2407嵌入系统GUI图文设计新方法

  

摘  要:提出一种基于TMS320LF2407的嵌入式系统GUI图文界面设计新方法。利用TMS320LF2407A程序空间与数据空间分离的特性和内部集成flash存储器的特点,重新设计运行时间支持库,进行片上大容量图文字库设计。 关键词:DSP TMS320LF2407A   SED1335   液晶显示 片上flash。中图分类号:TP316              文献标识码:A              文章编号:1006-7973(2006)01-0097-03 一、TMS320LF2407存储空间配置特性分析为了加快运算速度DSP处理器都采用程序空间和数据空间相互独立的哈佛体系结构和COFF数据格式,这种格式是以段(.section)为核心的存储形式,可以随存储系统的不同进行个性化配置,提高了代码对存储空间的利用和管理,特别适合哈佛结构的处理器。TI公司CCS集成开发环境下的C语言编译器将针对DSP的结构特点自动产生7个初始化段)并且对他们所在的存储空间有严格要求:.bss,.sysmem,.stack和.const段必须放在数据空间page1,其它由编译器自动生成的段要放在程序空间page0。从.cinit和.const段功能看,两个段都是完成对变量的初始化,他们的区别就在于.cinit段是在系统上电时进行全局变量和全局静态变量初始化。由于DSP系统一般的上电工作顺序是:1.开启看门狗和初始化.cinit段的数据,2.创建C语言运行环境,3.进入用户程序入口main(),4.完成用户初始化。从工作顺可以看出如果采用在.cinit段初始化完成以后,程序运行到用户初始化阶段才关闭看门狗的常规方法,那么在设计大容量图文字库时就会因为看门狗超时不断复位DSP系统使整个系统瘫痪。因此必须设计一种新的方法来设计来实现字库设计。由于无法使用.cinit作为存储段。我们就将研究重点转向与.cinit段功能相似的.const段。但是从表1我们可以看出.const只能映射到数据空间(Page1页)但是它映射的物理存储器可以是RAM或者ROM。而TMS320LF2407片内flash是不能映射到page1页。也就是说如果直接使用.const段来保存大容量字库,就必须外挂flash达不到设计的初衷。如果将字库保存在数据空间的RAM中一旦掉电所有数据将全部丢失,该方案也不可行。因此我们只能利用CCS集成开发环提供的运行地址和装载地址不同的特性,将.const段装载到程序空间的片内flash,运行时从flash拷贝到数据空间的RAM,然后开始执行用户代码,那么就会给DSP处理器一种假象好像.const段一直是在数据空间(即程序空间的物理存储器虚拟映射到数据空间)。从而实现了对片内剩余flash的最大限度的利用,减少了设计成本和体积。二、TMS320LF2407程序空间flash虚拟映射到数据空间解决方案首先我们从TI公司TMS320LF2407的运行时间库中提取出boot.asm加入下面代码CONST_COPY.set 1.if CONST_COPY.sect \".c_mark\".label __const_load//装载地址.global __const_run,//运行地址__const_length  //const段长度.text.endif.if  CONST_COPYconst_copy:LARPAR3LRLK AR3,#__const_length BANZ  cont,*-,AR2 B  quit cont:LRLK  AR2,#__const_runLALK  #__const_loadcloop:TBLR  *+,AR3 ADDK  1        BANZ  cloop,*
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

4
 

我也有不明白的地方你要弄懂了告诉我

我的qq:402177605
我不明白的地方是我怎么修改
库和编译库中的文件,库是封装好的,
怎么把boot.obj归档到到rts.2xx.lib库中。
共同学习一下!


具体实现方法如下,在CMD文件中加入如下的脚本命令:
.const : load=CODE PAGE 0 run=DATA PAGE 1
{ _const_run=.;//(获得当前运行地址)
*(.c_mark)
*(.const)_const_length=.-_const_run;}
然后对运行时间库中的boot.asm文件进行如下步骤的操作:
1)从rts.rc源文件库中提取boot.asm Dspar -x  rts.src  boot.asm
2)添加上面的代码到boot.asm
3)重新编译boot.asm 生成boot.obj文件dspa  -v2xx  boot.asm
4)把boot.obj归档到到rts.2xx.lib库中。
dspar -r  rts2xx.lib boot.obj
此时生成新的文件rts2xx.Lib将代替原来的rts2xx.Lib。在编译时C语言程序将链接到新的rts2xx.lib。当DSP上电初始化时,DSP会自动地将程序空间的.const的数据搬移到数据空间的中运行地址,从而达到了充分利用2407A片内存储器节省成本的目的。
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表