- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2003.2.16 DSP原理及应用 第4章 C55x处理器的软件设计 小存储器模式下,.text(代码段)、.switch(状态转化段)以及.cinit/.pinit(变量初始化段)的长度和位置都不受限制; 小存储器模式下,数据指针为16位。 在采用数据指针寻址时,XARx寄存器的高7位指向.bss段所在的数据页,并在程序运行时始终指向该段。 1.小存储器模式 第4章 C55x处理器的软件设计 如果在编译器中设置-ml选项,则编译器将按照大存储器模式编译程序。 大存储器模式下可以更加方便地存放数据,而不必过多地考虑数据页的限制。 在该模式下,数据指针为23位,而堆栈和系统堆栈必须放在同一页中; 代码段可以跨越页边界以外; 除代码段外的其他所有的段只能放在一页存储器之中。 2.大存储器模式 第4章 C55x处理器的软件设计 C55x的堆栈主要用来保存处理器信息,向函数传递参数以及分配局部变量。 堆栈在一块地址按由高到低排列的连续存储器之中,编译器通过堆栈指针(SP)操作堆栈。 C55x还存在辅助堆栈,主堆栈主要存放低16位地址,而辅助堆栈则存放C55x返回的高8位地址,编译器通过辅助堆栈指针(SSP)操作辅助堆栈。 堆栈的大小由链接器设置,__STACK_SIZE和__SYSSTACK_SIZE两个全局符号存放的是堆栈的长度值。 系统默认主堆栈和辅助堆栈的长度都是1000个字节。 3.C/C++系统堆栈 第4章 C55x处理器的软件设计 编译器为动态内存分配提供了如下函数: malloc calloc realloc 在C语言中调用这些函数会在.sysmem段定义的内存池中分配内存。__SYSMEM_SIZE中存放的内存池的大小(单位为字节),系统默认大小为2000个字节。 动态内存分配只能通过指针访问,可分配的内存大小受内存池中剩余空间限制,动态内存的优点是系统只在需要时才分配,不用时就可以释放所申请的空间,被系统使用。 4.动态内存分配 注意:如果所申请的空间需要经常访问,建议申请静态内存,因为如果申请和释放内存的操作很频繁,将过多占用系统资源,降低程序的执行效率。 第4章 C55x处理器的软件设计 4.动态内存分配 接下来给出申请动态内存的例子,由例子可以看到在定义变量指针时不需要定义数组的大小,而只在申请内存时才需给出申请的内存长度。 struct big *table; table =(struct big *)malloc(100*sizeof(struct big)); 第4章 C55x处理器的软件设计 5.结构的对齐 当编译器为结构分配空间时,将为结构的所有成员分配空间。 例如一个结构包含一个长整型的成员(32位),则长整型会被分配到长整型边界上。 为了保证分配,编译器会在结构的开头、中间或结尾进行填充,以保证结构的长度为偶数。 第4章 C55x处理器的软件设计 链接器对汇编器编译好的代码和数据进行链接时,所依据的是链接命令文件,即.cmd文件。 在链接命令文件中定义了段名,段的起始地址,段的长度,初始化段的初始值等。 4.4.3 链接命令文件 下面给出一个.cmd文件的具体实例: /**************************************************************** * lnk55x obj files... -o out file -m map file lnk.cmd * cl55x src files... -z -o out file -m map file lnk.cmd /****************************************************************/ -c /*不区分大小写 */ -m a1.map /*生成.map文件*/ 第4章 C55x处理器的软件设计 -stack 0x1800 /*主堆栈尺寸*/ -sysstack 0x1800 /*系统堆栈尺寸*/ -heap 0x100
文档评论(0)