4.宽松ANS模式(-p选项) Relaxed Iso mode ●使用-pr选项可以使编译器工作在宽松ANS模 式中: ◆违反严格的ANS标准的情况下不发送警告消 息〔普通ANS模式中会发送)也不发送错误消 息(严格ANS模式中会发送 ◆编译接受对 ANSI C标准的扩展,甚至是和 ANSI C冲突的时候
4. 宽松ANSI模式(–pr选项) ⚫ 使用-pr选项可以使编译器工作在宽松ANSI模 式中: ◆ 违反严格的ANSI标准的情况下不发送警告消 息(普通ANSI模式中会发送), 也不发送错误消 息(严格ANSI模式中会发送); ◆ 编译接受对ANSI C标准的扩展,甚至是和 ANSI C冲突的时候。 28 Relaxed ISO Mode
627存储器模式 C编译器将存储器当作一个由代码子模块和数据子 模块组成的线性模块。 ●每个由c程序生成的代码子模块或数据子模块被放 到各自的连续存储空间中。 ●编译器认为目标存储器的全部24位地址都有效。 ●编译器支持两种存储器模型: ◆小存储模式和大存储器模式。 ◆两种存储模式的数据在存储器中的放置和访问不同
6.2.7存储器模式 ⚫ C编译器将存储器当作一个由代码子模块和数据子 模块组成的线性模块。 ⚫ 每个由C程序生成的代码子模块或数据子模块被放 到各自的连续存储空间中。 ⚫ 编译器认为目标存储器的全部24位地址都有效。 ⚫ 编译器支持两种存储器模型: ◆小存储模式和大存储器模式。 ◆两种存储模式的数据在存储器中的放置和访问不同。 29
1.小存储器模式(默认模式) 用小存储器模式得到比大存储模式更少的代码和数据 小存储器模式下以下段都分配在64KB单页存储器内 bss和data段(所有静态和全局数据)。 ◆ stack和 sysstack段(第一和第二系统堆栈)。 ◆ systen段(动态存储空间)。 ◆cons段 在小存储器模式中,对text段(代码)、 switch段( switch语句) 和 init段(变量初始化)的大小和位置没有限制。 ●小存储器模式下编译器使用16位数据指针来访问数据。XARn 寄存器的高7位用来设置指向包含bss段的存储页。在程序执 行过程中它们的值保持不变。 30
1. 小存储器模式(默认模式) ⚫用小存储器模式得到比大存储模式更少的代码和数据。 ⚫小存储器模式下,以下段都分配在64KB单页存储器内: ◆.bss和.data段(所有静态和全局数据)。 ◆.stack和.sysstack段(第一和第二系统堆栈)。 ◆.sysmem段(动态存储空间)。 ◆.const段。 30 ⚫在小存储器模式中,对.text段(代码)、.switch段(switch语句) 和.cinit段(变量初始化)的大小和位置没有限制。 ⚫小存储器模式下编译器使用16位数据指针来访问数据。XARn 寄存器的高7位用来设置指向包含.bss段的存储页。在程序执 行过程中它们的值保持不变
2大存储器模式 ●大存储器模式支持不严格的数据放置。用 ml shell 选项就可以应用该模式。 在大存储器模式下,数据指针为23位,在存储器中 占2字空间。, stack和 sysstack段必须在同一页上。 在大存储器模式下编译代码时,必须和rts55xib 运行时间库链接。 ●链接器不允许同时存在大存储器模式和小存储器模 式。应用程序中的所有文件都必须使用相同的存储 器模式。 31
2.大存储器模式 ⚫ 大存储器模式支持不严格的数据放置。用-ml shell 选项就可以应用该模式。 ⚫ 在大存储器模式下,数据指针为23位,在存储器中 占2字空间。.stack和.sysstack段必须在同一页上。 ⚫ 在大存储器模式下编译代码时,必须和rts55x.lib 运行时间库链接。 ⚫ 链接器不允许同时存在大存储器模式和小存储器模 式。应用程序中的所有文件都必须使用相同的存储 器模式。 31
628存储器分配 1.C编译器生成的段 ●C编译器生成的段有两种基本的类型即初始化段和未 初始化段 初始化段有:汇编器产生data段,但C编译器并不用此段。 ◆cin段包含初始化数据表格和常数; ◆pin段,含实时运行时调用全局对象构造器的表格; ◆cons段,包含用 const定义(不能同时被 volatile定义 的字符串常量和数据 ◆ switch段,包含 switch语句所用表; ◆text段,包含所有可执行代码
6.2.8 存储器分配 1. C编译器生成的段 ⚫C编译器生成的段有两种基本的类型, 即初始化段和未 初始化段; ⚫初始化段有: ◆.cinit段, 包含初始化数据表格和常数; ◆.pinit段, 含实时运行时调用全局对象构造器的表格; ◆.const段, 包含用const定义(不能同时被volatile定义) 的字符串常量和数据; ◆.switch段, 包含switch语句所用表; ◆.text段, 包含所有可执行代码。 ¤汇编器产生.data段, 但C编译器并不用此段。 32