专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
DSP芯片CMD文件中各段的实验验证(下)
2019-07-13 10:33
发布
生成海报
站内文章
/
DSP
14014
0
1030
接上文。
4、验证.const段和.econst段(因为两个段基本上是一样的,所以只验证.econst一个段。)
.const 显式初始化的全局和静态的const变量和字符串常量 不超过64K长度
.econst长调用的常量 数据中的任何地方
定义字符串常量数组str[]、全局const变量c、局部static const变量c_static_local。
指针p和字符变量ccc是实验辅助变量。
编译并查看map文件及仿真窗口,如下:
分析:
可以看到辅助变量p和ccc都是放在.stack上的。
字符串”string”,全局const变量c和局部static const变量c_static_local都是放在.econst上的。
即.econst上的大小为 7 + 2 = 9。
结论:const定义的全局变量、static const 局部变量、字符串常量都是存放在.econst或.const段上的。
注意:const定义的变量必须初始化。
5、验证.pinit (这个测试是在另外一个工程文件中测试的)
.pinit:全局构造器(C++)程序列表
在main文件中编写如下测试程序:
注意是全局构造器程序列表,所以要定义一个全局对象才行。
编译并查看map文件,如下:可以看到确实生成了.pinit段,段上有数据。
6、验证.switch
.switch switch语句产生的表
在main文件中编写如下测试程序:
编译并查看map文件,如下:可以看到确实生成了.switch段,段上有数据,而且.switch段是属于初始化段。
注意:Jump tables for large switch statements。如果switch表很小的话,在map文件中是不会生成switch段的。
经过我实际测试发现,小于12个case时map文件不会生成switch段。
7、验证.sysmem段和.esysmem段(因为两个段基本上是一样的,所以只验证.esysmem一个段。)
.sysmem malloc函数产生的内存 不超过64K长度
.esysmem far_malloc函数产生的内存 数据中的任何地方
在main文件中编写如下测试程序:
编译并查看map文件,如下:可以看到确实生成了.esyemem段。但是malloc出来的内存空间是属于动态存储区,
所以在map文件无法体现出大小及数据,需要运行程序才能看到结果。
编译运行程序如下:
可以看到0x008c00是.esysmem段的起始地址,第一个存储单元的4代表有4个存储数据,第2个数据是0,由系统预留的。
第3到第5个数据都是0061,而’a’的ASCII码正好是0x0061=97。即第3到第5个数据都是’a’。
Ta的文章
更多
>>
.cpp文件、.rc文件、.h文件的区别
0 个评论
DSP芯片CMD文件中各段的实验验证(下)
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮