网站大量收购独家精品文档,联系QQ:2885784924

第6章C语言程序设计重点.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 C/C++语言程序设计 6.1 C55x C/C++语言概述 汇编语言依赖于计算机硬件,程序的可读性和可移植性比较差。一般高级语言具有很好的可移植性,但是难以实现汇编语言的某些功能(如对内存地址的操作、位操作等)。 C/C++语言作为一种高级语言,既可以访问物理地址又可以进行位操作,能直接对硬件进行操作,能实现汇编语言的大部分功能,适合用作DSP开发语言。 6.1.2 C55x C/C++语言概况 C55x C/C++编译器全面支持ANSI C/C++语言标准,能够把按照标准ANSI C/C++规范编写的源程序进行全面优化,编译成C55x 汇编语言源程序。 C55x C/C++编译器工具拥有完整的实时运行库。 C55x C/C++编译器输出文件的特性。 6.2 C55x C/C++语言编程基础 C55x C语言支持的数据类型: 定义各种数据类型时应注意如下规则: 避免设int和long为相同大小 对定点算法(特别是乘法)尽量使用int数据类型。用long类型作乘法操作数会导致调用运行时间库(run-time library)的程序 避免设char为8位或long为64位 最好使用int类型作循环指数变量和其它位数不太重要时的整型变量,因为int是对目标系统操作最高效的整数类型,而不管芯片结构如何 6.2.2 关键字 1. const 将这个关键字使用到对任意变量或数组的定义上可以确保它们的值不改变。 如果定义一个对象为const,那么const段就会为该对象分配存储空间。 2. ioport C55x C编译器增加了ioport关键字来支持I/O寻址模式 ioport类型限定词可以和标准类型(数组、结构体、共用体和枚举)一起使用 可以和const及volatile一起使用。 ioport可以单独使用,这种情况下int限定词就是默认的 ioport类型限定词只能用于全局或静态变量。局部变量不能用ioport限制,除非变量是个指针 例6-1,ioport关键字的使用。 ioport int k ; /*valid* / void foo(void) { ioport int i ; /*invalid* / ioport int *j ; /*valid* / } 3. interrupt C55x C编译器增加了interrupt关键字,来指定某个函数为中断函数。 5. volatile 在任何情况下,优化器会通过分析数据流来避免存储器访问。 如果程序依靠存储器访问,则必须使用volatile关键字来指明这些访问。 编译器将不会优化任何对volatile变量的引用 6.2.3 寄存器变量和参数 寄存器变量就是用register关键字声明的变量。 根据是否使用优化器,C编译器对寄存器变量采用不同的处理方式。 编译器会尽量分配好所声明的寄存器变量。 整型、浮点型和指针类型对象都可以声明为寄存器变量,而其它类型对象不行。 6.2.4 asm指令 asm指令可以直接将C55x汇编语言指令嵌入到编译器的汇编语言输出中。 指令格式: asm (“assembler text”); 6.2.5 Pragma指令 Pragma指令告诉编译器的预处理器如何处理函数。 必须在函数体外确定pragma,且必须出现在任何声明、定义或对函数和符号引用之前。否则,编译器会输出警告。 6.2.6存储器模式 使用小存储器模式将得到比使用大存储模式时更少的代码和数据。 在小存储器模式中,在单页(64KB)存储器内的以下段必须都分配合适: .bss和.data段(所有静态和全局数据)。 .stack和sysstack段(第一和第二系统堆栈)。 .sysmem段(动态存储空间)。 .const段。 在小存储器模式中,对.text段(代码)、.switch段(switch语句)和.cinit段(变量初始化)的大小和位置没有限制。 小存储器模式下编译器使用16位数据指针来访问数据。XARn寄存器的高7位用来设置指向包含.bss段的存储页。 2.大存储器模式 大存储器模式支持不严格的数据放置。 在大存储器模式下,数据指针为23位,在存储器中占2字空间。.stack和.sysstack段必须在同一页上。 在大存储器模式下编译代码时,必须和rts55x.lib运行时间库链接。应用程序中的所有文件都必须使用相同的存储器模式。 链接器不允许同时存在大存储器模式和小存储器模式。 6.2.7 存储器分配 1. C编译器生成的段 C编译器生成的段有两种基本的类型,即初始化段和未初始化段 初始化段有: .cinit段, 包含初始化数据表格和常数 .pinit段, 包含实时运行时调用的数据表格 .const段

您可能关注的文档

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档