4151|4

162

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

初学坠入迷雾,重复终究无果,文档指点迷津 [复制链接]

本帖最后由 watershade 于 2017-3-12 20:44 编辑




此内容由EEWORLD论坛网友watershade原创,如需转载或用于商业用途需征得作者同意并注明出处
这真是折腾的周末,昨天下午开始继续学习C2000.按照教程main简单了解了
建立portable project的方法。
过程不难,都做的很好。可是到了调试的时候却出现了问题。
提示.ebss空间不足。我检查了其中提到的F28027Fx_generic_ram.cmd.

图1

其中提到了:
   .stack           : > RAMM1,     PAGE = 1
   .ebss            : > RAMM1,     PAGE = 1
   .econst          : > RAMM1,     PAGE = 1
   .esysmem         : > RAMM1,     PAGE = 1
我个人觉得没有问题,因为在MEMORY里面RAMM1定义是0x400。根据错误提示,而.ebss只需要0x22。
如果stack不大,不至于呀。可是stack是未初始化区域。它的大小在哪里。cmd里面没找到呀。
作为一个不用功的新手,我很惭愧。对CCS还是不够熟悉。我在CCS7和CCS6之间来回切换建立项目,也在不同版本
下建立项目。还是一样的错误。当然我也更换过cmd。但是没用。
我已经放弃了。就看main之后的内容,然后又看了labs。这是我发现labs讲的不是和main一样吗?只是main的比较粗略。这时,我又一步一步看。终于发现了问题所在。

           图2

红圈中之前是0x300.需要将其缩小到0x200.
这样一编译就通过了:

           图3

但是,我仍然有疑惑。即便stack保留0x300的空间。不是剩下0x100的RAMM1空间吗?
而.ebss只需要0x22不是吗?至少这个工程是这样。那说明还有东西占据了这个空间。
那好,我们查看官方对于存储的规定是什么?

             图4

这是http://processors.wiki.ti.com/in ... derstanding_Linking网址提供的。
但是不幸的是,这个网页我没有用心看。所以对图表的理解就是在SARAM区域,目前另一种可能性是MALLOC占据了空间。
但是是不是呐?
我打开memory allocation视图:

           图5

视图很明确的告诉我:你太low了。我把.econst放在这里了。
它这样搞,当然在我设置.stack是0x300时。没有任何空间了。
又查看代码的确如此。
在.ebss下面刚好是.econst(上面提到了)。那么问题是这个.econst按照图4不应该在flash区吗,在PAGE0?
但是我也能够理解将存储从PAGE0搬到PAGE1这种应用。但是那也应该在可变变量区域。
我同时看到早F2802x_Headers_nonBIOS.cmd的PAGE 1种定义了许多区段。比如SPI-A register 。EPWM什么的。
这显然是硬件相关的存储区域。但是为什么硬件设备的寄存器在这个区域呐?这不是掉电就消失的吗?
所以这个区域会不会是在上电后,通过引导加载到这个区域的。另外这个区域也不见到就是上面的.econst存储的区域。
因为origin的数值不一样。是不是内存映射?
看来手册没有认真看的结果。



那到底.econst是在哪里指定的。还刚好是256呐?
吃完饭,想起看map文件了:

原来这部分存的是中断向量表。何以见得?
f2802x_pievect.obj这个文件想必是f2802x_pievect.c的目标文件。
OK,那好办。我们去见见中断向量表的真面目:

好的我数一数一共几个?不多不少128个。难道不应该是256吗?或者说4*128(32-bit),可偏偏是256.
哪再仔细看InitPieVectTable函数,这个想必就是用来实现中断向量表初始化程序。
程序先跳过了三个存储区,然后125次循环移位赋值。可是这里的每次跳转的存储区也是uint32的长度,也就是说等同于4个字节。所以我不懂呀?
那好,继续看在哪里实现的中断向量初始化。在上面提到的nonBIOS色SECTION起始的地方,看到了一个UNION.
  UNION run = PIE_VECT, PAGE = 1
   {
      PieVectTableFile
      GROUP
      {
         EmuKeyVar
         EmuBModeVar
         FlashCallbackVar
         FlashScalingVar
      }
   }
  暂时对cmd的语法还不能完全理解,毕竟偷了懒没看手册。这里的PIE_VECT应该就是我要找的区段.econst。
  继续寻寻觅觅,发现这里的表示的PIE_VECT含义如下:
   PIE_VECT    : origin = 0x000D00, length = 0x000100     /* PIE Vector Table */
  实际上我期望的是origin = 0x000600.所以这个不是,但是大小相对应。我意识到找错了,但这两个会不会有什么关联呐?

  我同时意识到要在调用InitPieVectTable函数之前找。但是还是找不到,那么这部分到底在哪里?


此外,我还想了解controlSUITE中nonBIOS.cmd和BIOS.cmd的区别。





这里将两个从官方下载的教程给出,希望可以帮到你:
1、main: sdoapps_ws_f28027_ccsv6_fundamentals-workshop-main.pptx (3.99 MB, 下载次数: 16)
2、labs: sdoapps_ws_f28027_ccsv6_fundamentals-workshop-labs.pptx (2.41 MB, 下载次数: 17)

最新回复

看一下cmd文件中ram和flash的内存分配,如果不满足的话,可以尝试修改一下内存分配。 或者如楼上版主所说,换flash写入。  详情 回复 发表于 2017-3-20 23:08
 
点赞 关注(1)
个人签名望大家不吝赐教

回复
举报

1万

帖子

28

TA的资源

裸片初长成(高级)

沙发
 
一般情况下要烧到FLASH里,这样程序空间才够用。

程序稍微大一点就不能只在RAM里运行了。

点评

谢谢。还是TI第一次告诉我Real-Time Debug是啥意思。  详情 回复 发表于 2017-3-13 23:11
 
 

回复

162

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
dontium 发表于 2017-3-12 23:30
一般情况下要烧到FLASH里,这样程序空间才够用。

程序稍微大一点就不能只在RAM里运行了。

谢谢。还是TI第一次告诉我Real-Time Debug是啥意思。
 
个人签名望大家不吝赐教
 
 

回复

667

帖子

3

TA的资源

版主

4
 
看一下cmd文件中ram和flash的内存分配,如果不满足的话,可以尝试修改一下内存分配。
或者如楼上版主所说,换flash写入。

点评

谢谢访问? 俺是新手,你觉得我说的是这个意思吗?  详情 回复 发表于 2017-3-21 20:17
 
 
 

回复

162

帖子

0

TA的资源

纯净的硅(中级)

5
 
nemo1991 发表于 2017-3-20 23:08
看一下cmd文件中ram和flash的内存分配,如果不满足的话,可以尝试修改一下内存分配。
或者如楼上版主所说 ...

谢谢访问?
俺是新手,你觉得我说的是这个意思吗?
 
个人签名望大家不吝赐教
 
 

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

随便看看
查找数据手册?

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