|
STVD7的开发环境中提供了非常方便的手段,可以轻松的实现C语言程序的存储定位。以下说明以我另一个帖子的例子作为前提: ST7 16位通用定时器中的输出比较功能(Output Compare)详解: f0 Q5 C: r2 c2 Z# P& M; n* E 假定我有一个函数delay()需要定位到0x8000开始的区域;有三件事要做:& d: V3 Z: v6 t1 ]; V* K 1)原有的代码段是默认定位在从0x8000开始的区域,把默认代码段重定位到从0x9000开始的区域; 2)在函数delay()前用#pragma定义一个新的代码段,命名为.delay_code,程序片断如下;9 B- I& d* N; l' T/ m5 A+ ]) b# k7 ? 3)将新的代码段.delay_code定位在从0x8000开始到0x8FFF结束的区域。 - r. S- K+ P/ D) z4 n* ]/ E4 j. W 8 _& p* L4 B5 c, I3 \ 程序片断: - F) ]) g1 o" F n9 ? -------------------------------------------------------------------------------- #pragma section (delay_code) // 定义新代码段 : m4 B- F1 r& ?/ k1 Y% H, N2 K void delay(void) { unsigned char counter; for (counter = 0; counter < 100; counter++) _asm("nop"); } #pragma section () // 以下代码恢复到默认代码段 1 e/ Y( j% @' p6 n- r" q5 X -------------------------------------------------------------------------------- 完成代码段的定位、重定位,请按Project/Settings...,按照下图配置就可完成: 5 e9 E* x+ I6 W 编译完后的.map文件显示定位成功: -------- Segments. P( q4 n, L1 m -------- ! _( A3 r* W* p- M9 @; K: A2 N start 00009000 end 000090da length 218 segment .text |
微信公众号
手机版