
STVD7的开发环境中提供了非常方便的手段,可以轻松的实现C语言程序的存储定位。以下说明以我另一个帖子的例子作为前提: ST7 16位通用定时器中的输出比较功能(Output Compare)详解5 A s+ T4 n5 e$ ~ 假定我有一个函数delay()需要定位到0x8000开始的区域;有三件事要做: 1)原有的代码段是默认定位在从0x8000开始的区域,把默认代码段重定位到从0x9000开始的区域;6 |6 p* [; r1 w# [4 N7 L8 c 2)在函数delay()前用#pragma定义一个新的代码段,命名为.delay_code,程序片断如下; 3)将新的代码段.delay_code定位在从0x8000开始到0x8FFF结束的区域。 0 C* g/ e* B4 T3 s! o5 C & w: g. ]6 q( O* Y4 x( q! } 程序片断: --------------------------------------------------------------------------------) @0 X( S6 i8 {0 T* D. { #pragma section (delay_code) // 定义新代码段 2 e- R) I# U ?% o2 I# T% U7 W# N void delay(void) { unsigned char counter;) r5 ~0 \* {" k \ for (counter = 0; counter < 100; counter++) _asm("nop");4 c$ K# A7 \+ }: s1 g } #pragma section () // 以下代码恢复到默认代码段 -------------------------------------------------------------------------------- : G- U) L f: t# V 完成代码段的定位、重定位,请按Project/Settings...,按照下图配置就可完成: 7 m8 P% I, p6 o3 T4 H1 D' @ 编译完后的.map文件显示定位成功: --------6 v9 Y0 I- U% v4 | Segments -------- 3 M3 e( m% y5 n/ O! C7 O start 00009000 end 000090da length 218 segment .text |