2872|0

2618

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

C2000 CLA的使用与常见CLA内存问题的解决方案 [复制链接]

作者:Chen Yang, Benjamin Zhou, Strong Zhang

 

CLA(Control Law Accelerator)控制率加速器是一个独立可编程的32位浮点数字处理单元,为快速触发响应及数学运算而设计。CLA独立于C28x CPU工作,时钟频率与CPU相同,可执行算法以及周期性的计算工作。通过增加平行的处理单元CLA,拓展了C28x CPU的性能。当前C2000系列产品共有3种类型的CLA, 不同的C2000型号对应不同的CLA类型, 各类型的差别及对应的C2000器件型号详情如图1所示。Type 2型的CLA可直接读取ADC 结果寄存器,极大减小ADC采样至输出的延时,提高系统的响应并允许系统以更高的频率运行;并且可直接操作所有的Epwm,HRPWM,eCAP,eQEP,CMPSS,DACSDFM,PGA,SPI,LIN,FSI,PMBUS,CLB和GPIO数据寄存器;CLA可独立地响应外设中断。利用CLA执行一些周期性任务可以解放CPU,使其工作于其他系统任务。

查看详情

图1 CLA类型及对应C2000器件

 

CLA的使用包括初始化设置和任务定义。初始化由CPU完成,包括程序内存和数据内存分配,任务的触发配置;Type 2型CLA提供 8个独立的任务(也可配置为7个独立的任务和1个底层持续运行的任务),这些任务类似中断服务函数,由中断触发并运行至任务结束,并且可配置在任务完成时产生中断, CLA 框图如图2所示。

查看详情

图2 CLA框图

 

CLA可访问RAMLS0-LS7 区块的内存,并且每个块可以配置为CPU专用或CPU与CLA之间共享数据。这些内存块复位时默认分配给CPU,需要由CPU初始化后才可用于与CLA共享数据。如果这些内存块被配置为数据共享的,则可进一步配置为程序内存或数据内存,程序内存用于存放CLA的程序代码,数据内存用于存放供CLA程序使用的变量和系数,并且有专用的消息内存MSG RAMs用于在CPU和CLA之间传递数据, CLA的Memory及寄存器操作方式描述如图3所示。

查看详情

图3 CLA Memory及寄存器操作

 

CLA的初始化是在软件初始化期间由CPU执行,主要包括6个步骤:

  1. 从Flash中复制CLA 任务代码至CLA 程序内存中
  2. 分配CLA数据内存
  3. 配置CLA寄存器:包括使能CLA时钟;分配CLA任务函数地址;选择任务触发源;根据需要使能软件触发任务;映射CLA程序内存和数据内存到CLA空间
  4. 在PIE中配置CLA任务完成中断的服务函数
  5. 在MIER寄存器中使能CLA任务触发
  6. 初始化触发源外设,使其能触发CLA任务

 

在CLA开发过程中,工程师往往专注于代码层面对CLA初始化,CLA_task的配置以及算法设计,忽略了更为底层的问题——CMD文件中CLA内存分配问题。不合理的内存分配可能会导致编译报错及内存溢出。

本博文将举例使用TI的TMS320F280049进行CLA开发时,由于内存分配错误导致的具体报错。

本例中在完成了CLA初始化,CLA_task的中断函数配置后,点击编译CCS报43个“#17003-D” warnings,如图4:

查看详情

图4 #17003-D Warning

 

Description Resource Path Location Type

#17003-D</a> relocation to symbol "CLAscratch_end" overflowed; the 6-bit relocated address 0xee is too large to encode in the 16-bit unsigned field (type = 'R_ABS16_OC' (107), file = "../xxxxxxx", offset = 0x00000312, section = "Cla1Prog")

 

警告显示CLAscratch_end内存溢出,问题定位至CMD文件,检查CMD中与scratch相关的内存分配, 如图5。

查看详情

图5 CMD文件scratchpad描述

发现仅有.scrathpad分配至RAMLS1,并未找到CLAscratch_end以及对CLA_SCRATCHPAD_SIZE的定义

于是,打开.map文件判断是否分配了__cla_scratchpad_end/start,在.map文件中搜索scratchpad如图6所示。

查看详情

图6 .map文件中cla_scratchpad_end描述

 

如图6,在.map中仅仅找到__cla_scratchpad_end,可以判断工程使用了scratchpad但是并没有__cla_scratchpad_start的内存分配。

至此找到了问题原因,解决方案就是需要在CMD文件中对scratchpad进行相关配置, 如图7所示。

参考配置如下:

①在CMD文件的头部添加以下代码,如图所示

  1. CLA_SCRATCHPAD_SIZE = 0x100;  
  2. --undef_sym=__cla_scratchpad_end  
  3. --undef_sym=__cla_scratchpad_start  

查看详情

图7 scratchpad配置

 

②在CMD文件的SECTIONS{}代码部分的末尾添加以下代码 

  1.   CLAscratch  :  
  2.                 { *.lib(CLAscratch)  
  3.                  . += CLA_SCRATCHPAD_SIZE;  
  4.                  *.lib(CLAscratch_end) } > RAMLS1,   
  5.                  PAGE = 1  

再次编译,#17003-D警告已经消失,编译通过,结果如图8所示。

查看详情

图8 修改CMD后编译结果

 

            此时,再次查看.map文件,发现__cla_scratchpad_end/start以及CLA_SCRATCHPAD_SIZE已经成功分配,如图9所示。

查看详情

查看详情

查看详情

图9 修改CMD文件编译生成.map文件图

 

以上就是关于#17003-D warning”的解决方案,希望通过这个例子,让广大工程师在CLA开发时能够注意到CMD对CLA内存正确配置的重要性,防止在实际开发时遇到问题,难以排查。

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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