打印

编写CMD文件+读取Bitmap

[复制链接]
1030|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Jasmines|  楼主 | 2017-10-9 16:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编写CMD文件+读取Bitmap


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

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


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

  • /*  
  • *  Linker command file  
  • *  
  • */  
  •   
  • -c  
  • -heap  0x41000  
  • -stack 0xa000  
  •   
  • /* Memory Map 1 - the default */  
  • MEMORY  
  • {  
  •     L1PSRAM (RWX)  : org = 0x0E00000, len = 0x7FFF  
  •     L1DSRAM (RWX)  : org = 0x0F00000, len = 0x7FFF   
  •   
  •     L2SRAM (RWX)   : org = 0x0800000, len = 0x080000  
  •     MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000  
  •     DDR3 (RWX)     : org = 0x80000000,len = 0x10000000  
  • }  
  •   
  • SECTIONS  
  • {  
  •     .csl_vect   >       MSMCSRAM  
  •     .text       >       MSMCSRAM  
  •     GROUP (NEAR_DP)  
  •     {  
  •     .neardata  
  •     .rodata   
  •     .bss  
  •     } load > MSMCSRAM  
  •     .stack      >       MSMCSRAM  
  •     .cinit      >       MSMCSRAM  
  •     .cio        >       MSMCSRAM  
  •     .const      >       MSMCSRAM  
  •     .data       >       MSMCSRAM  
  •     .switch     >       MSMCSRAM  
  •     .sysmem     >       MSMCSRAM  
  •     .far        >       MSMCSRAM  
  •     .testMem    >       MSMCSRAM  
  •     .fardata    >       MSMCSRAM  
  •     platform_lib >       MSMCSRAM  
  • }  

[color=rgb(51, 102, 153) !important]复制代码


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

为了更详细的追踪问题,我在子程序中添加了许多信息输出,

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

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

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

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


既然是在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文件如下

  • /*  
  • *  Linker command file  
  • *  
  • */  
  •   
  • -c  
  • -heap  0x10000000  /* 512MB */  
  • -stack 0x10000  
  •   
  • /* Memory Map */  
  • MEMORY  
  • {  
  •     L1PSRAM (RWX)  : org = 0x0E00000, len = 0x7FFF  
  •     L1DSRAM (RWX)  : org = 0x0F00000, len = 0x7FFF   
  •   
  •     L2SRAM (RWX)   : org = 0x0800000, len = 0x080000  
  •     MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000  
  •     DDR3 (RWX)     : org = 0x80000000,len = 0x7FFFFFFF  /* length=2^32-1, 4GB */  
  • }  
  •   
  • SECTIONS  
  • {  
  •     .csl_vect   >       MSMCSRAM  
  •     .text       >       MSMCSRAM  
  •     GROUP (NEAR_DP)  
  •     {  
  •     .neardata  
  •     .rodata   
  •     .bss  
  •     } load > DDR3 /*MSMCSRAM*/  
  •     .stack      >       DDR3 /*MSMCSRAM*/  
  •     .cinit      >       MSMCSRAM  
  •     .cio        >       DDR3 /*MSMCSRAM*/  
  •     .const      >       MSMCSRAM  
  •     .data       >       MSMCSRAM  
  •     .switch     >       MSMCSRAM  
  •     .sysmem     >       DDR3 /*MSMCSRAM*/  
  •     .far        >       MSMCSRAM  
  •     .testMem    >       MSMCSRAM  
  •     .fardata    >       MSMCSRAM  
  •     platform_lib >       MSMCSRAM  
  • }  

[color=rgb(51, 102, 153) !important]复制代码

修改之后,测试可行





相关帖子

沙发
biechedan| | 2017-10-9 22:08 | 只看该作者
可以直接通过CCS读取图片吗?

使用特权

评论回复
板凳
wangdezhi| | 2017-10-9 22:09 | 只看该作者
这个跟CMD有什么关系?

使用特权

评论回复
地板
baimiaocun2015| | 2017-10-9 22:10 | 只看该作者
这个看着蛮复杂的

使用特权

评论回复
5
biechedan| | 2017-10-9 22:16 | 只看该作者
怎么才能在DSP芯片内部运算呢?

使用特权

评论回复
6
wangdezhi| | 2017-10-9 22:16 | 只看该作者
不是可以直接使用CCS读取文件。

使用特权

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

本版积分规则

745

主题

1077

帖子

10

粉丝