6624|3

19

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

CCS+C6678LE开发记录04:编写CMD文件+读取Bitmap [复制链接]

这里所说的CMD文件是指在CCS的Project中添加的CMD文件。

就我目前所理解的,大概就是链接装配到Target上用到的“指令”。


首先来看看默认的CMD文件(安装MCSDK后)是什么样的

  1. /*  
  2. *  Linker command file  
  3. *  
  4. */  
  5.   
  6. -c  
  7. -heap  0x41000  
  8. -stack 0xa000  
  9.   
  10. /* Memory Map 1 - the default */  
  11. MEMORY  
  12. {  
  13.     L1PSRAM (RWX)  : org = 0x0E00000, len = 0x7FFF  
  14.     L1DSRAM (RWX)  : org = 0x0F00000, len = 0x7FFF   
  15.   
  16.     L2SRAM (RWX)   : org = 0x0800000, len = 0x080000  
  17.     MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000  
  18.     DDR3 (RWX)     : org = 0x80000000,len = 0x10000000  
  19. }  
  20.   
  21. SECTIONS  
  22. {  
  23.     .csl_vect   >       MSMCSRAM  
  24.     .text       >       MSMCSRAM  
  25.     GROUP (NEAR_DP)  
  26.     {  
  27.     .neardata  
  28.     .rodata   
  29.     .bss  
  30.     } load > MSMCSRAM  
  31.     .stack      >       MSMCSRAM  
  32.     .cinit      >       MSMCSRAM  
  33.     .cio        >       MSMCSRAM  
  34.     .const      >       MSMCSRAM  
  35.     .data       >       MSMCSRAM  
  36.     .switch     >       MSMCSRAM  
  37.     .sysmem     >       MSMCSRAM  
  38.     .far        >       MSMCSRAM  
  39.     .testMem    >       MSMCSRAM  
  40.     .fardata    >       MSMCSRAM  
  41.     platform_lib >       MSMCSRAM  
  42. }  
复制代码

一般简单的测试,添加默认的CMD文件就可以了,详细步骤参见


CCS+C6678LE开发记录03:常规入门HeloWorld

https://bbs.eeworld.com.cn/thread-476179-1-1.html


但是在一次测试(读取Bitmap图片)中发现了一些问题

为了更详细的追踪问题,我在子程序中添加了许多信息输出,以下是一个示例

在对小尺寸图片进行测试时发现没有问题,

当图片尺寸太大时就会出现“内存分配失败”的错误

我特意找来一张6k*4k的超大图片测试,的确有问题


内存分配出问题一般是因为没有足够的空闲

对于那些零散的小块如果不足所需,也只能寻找更大的空闲区域

如果找不到就会返回失败信息


既然是在heap上分配,那么我们就需要检查CMD文件中关于MEMORY分配的布局了

显然,默认的-heap=0x41000 显然不够用


于是修改-heap  0x10000000  /* 512MB */ 够用了


关于一些段的含义,可以参考

.bss      存放全局和静态变量
.ebss     长调用的.bss(超过了64K地址限制)
.stack    存放C语言的栈
.sysmem   存放C语言的堆
.esysmem  長调用的.sysmem(超过了64K地址限制)
.text     可执行代码和常数(program)
.switch   switch语句产生的常数表格(program/低64K数据空间)
.pinit    Tables for global constructors (C++)(program)
.cinit    用来存放封全局和静态变量的初始化常数值(program)
.const    全局和静态的const变量初始化值和字符串常数,(data)
.econst   长.const(可定位到任何地方)(data) 始化块


我们将内存映射的MEMORY中DDR3设置得更大一些,

然后让heap等sections装入到这一段,这样就可改写CMD文件如下

  1. /*  
  2. *  Linker command file  
  3. *  
  4. */  
  5.   
  6. -c  
  7. -heap  0x10000000  /* 512MB */  
  8. -stack 0x10000  
  9.   
  10. /* Memory Map */  
  11. MEMORY  
  12. {  
  13.     L1PSRAM (RWX)  : org = 0x0E00000, len = 0x7FFF  
  14.     L1DSRAM (RWX)  : org = 0x0F00000, len = 0x7FFF   
  15.   
  16.     L2SRAM (RWX)   : org = 0x0800000, len = 0x080000  
  17.     MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000  
  18.     DDR3 (RWX)     : org = 0x80000000,len = 0x7FFFFFFF  /* length=2^32-1, 4GB */  
  19. }  
  20.   
  21. SECTIONS  
  22. {  
  23.     .csl_vect   >       MSMCSRAM  
  24.     .text       >       MSMCSRAM  
  25.     GROUP (NEAR_DP)  
  26.     {  
  27.     .neardata  
  28.     .rodata   
  29.     .bss  
  30.     } load > DDR3 /*MSMCSRAM*/  
  31.     .stack      >       DDR3 /*MSMCSRAM*/  
  32.     .cinit      >       MSMCSRAM  
  33.     .cio        >       DDR3 /*MSMCSRAM*/  
  34.     .const      >       MSMCSRAM  
  35.     .data       >       MSMCSRAM  
  36.     .switch     >       MSMCSRAM  
  37.     .sysmem     >       DDR3 /*MSMCSRAM*/  
  38.     .far        >       MSMCSRAM  
  39.     .testMem    >       MSMCSRAM  
  40.     .fardata    >       MSMCSRAM  
  41.     platform_lib >       MSMCSRAM  
  42. }  
复制代码

修改之后,测试可行

但是这样做似乎效率很低,我在测试一张1024*768大小的RGB图片时,读取数据用了了3分多钟!

最新回复

楼主可否附上读取图片文件的全部操作?刚开始学习,需要详细一些,谢谢!  详情 回复 发表于 2016-3-3 15:59
点赞 关注(2)
 

回复
举报

2700

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
不应该这么慢吧,是你的程序影响了速度的可能性大一些。
个人签名作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅!
EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你好我看网上其他人,没有cmd这个步骤,而是建立一个配置文件,想问下有为什么
 
 
 

回复

3

帖子

1

TA的资源

一粒金砂(初级)

4
 
楼主可否附上读取图片文件的全部操作?刚开始学习,需要详细一些,谢谢!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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