2652|1

6947

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

TI DSP-各种段的定义 [复制链接]

在cmd文件中能看到各种段.text .cinit .const等,这和通常系统中仅有TEXT, DATA, BSS( 或者arm系统的code,data,zi段 ),heap, stack有很大的区别:

TI段的定义:
已初始化的段:.text  .cinit  .const  .econst  ..pinit  .switch
.text:  所有可以执行的代码和常量
.cinit: 全局变量和静态变量的C初始化记录
.const: 包含字符串常量和初始化的全局变量和静态变量(由const)的初始化和说明
.econst: 包含字符串常量和初始化的全局变量和静态变量(由far const)的初始化和说明
.pinit:  全局构造器(C++)程序列表
.switch:  包含switch 声明的列表

未初始化的段:.bss  .ebss  .stack  .sysmem  .esysmen(另一种理解:这些段就认为存储空间而已)
.bss:  为全局变量和局部变量保留的空间,在程序上电时.cinit空间中的数据复制出来并存储到.bss空间中
.ebss:  为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.ebss中
.stack:  为系统堆栈保留的空间,主要用于和函数传递变量或为巨变变量分配空间
.sysmem:  为动态存储分配保留的空间,如果有宏函数,此空间被空函数占用,如果没有的话,此空间保留为0
.esysmen:  为动态存储分配保留的空间,如果有far函数,此空间被相应的占用,如果没有的话,此空间保留为0。

可以看到已初始化段相当于通常系统的TEXT, DATA, BSS, 只不过ti将有些段进行了进一步的深化。而未初始化段中,堆对应的是sysmem(esysmem), 栈对应stack。 bss和ebss在任何系统中都是必须的,但是可能其它系统把这些细节掩盖了,比如arm直接让__main操作了。TI也有相应的系统函数完成上述的数据复制搬运工作(主要是一些有初始化值的常量,存储的时候需要将这些值保存在flash中,运行的时候需要在ram中),这个函数就是cint00函数。
如果一个系统既想要支持24X汇编,要想要支持28X汇编,要想使用c函数(哪个项目这么变态,不好意思我的一个项目就是这样),那么需要打开ti的-m20 (在compiler的runtime model options)来支持,但是一旦打开这个选项,cint00就无法正常调用,也就是这这种混合代码中,你的全局变量不能在函数体外给它赋值,没有cini00它将无法实现拷贝工作,解决方法是,要么自己手写一个cinit00函数,要么你的全局变量在函数的初始化中赋值。

最新回复

好熟悉啊,这一段段的  详情 回复 发表于 2015-3-5 23:00
点赞 关注
 

回复
举报

172

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
好熟悉啊,这一段段的
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条
电源解决方案和技术 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

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