|
STVD7的开发环境中提供了非常方便的手段,可以轻松的实现C语言程序的存储定位。以下说明以我另一个帖子的例子作为前提: ST7 16位通用定时器中的输出比较功能(Output Compare)详解 假定我有一个函数delay()需要定位到0x8000开始的区域;有三件事要做: 1)原有的代码段是默认定位在从0x8000开始的区域,把默认代码段重定位到从0x9000开始的区域; 2)在函数delay()前用#pragma定义一个新的代码段,命名为.delay_code,程序片断如下;+ y! c* n" F5 L+ L0 z6 q8 p1 X+ { 3)将新的代码段.delay_code定位在从0x8000开始到0x8FFF结束的区域。 8 H3 H2 l1 N3 {4 Q% Z, [+ j, o 程序片断: ' `$ o) ^/ k" o -------------------------------------------------------------------------------- #pragma section (delay_code) // 定义新代码段 & O/ ?' R2 H: ~ void delay(void)4 S% |+ L; m/ L; i! {7 H# ~ { unsigned char counter;* w# g/ s8 ^" ` for (counter = 0; counter < 100; counter++) _asm("nop"); } / a# g* ^2 U2 P( s& M. J9 e5 C N #pragma section () // 以下代码恢复到默认代码段 0 G! s$ y4 a6 v2 p2 g" x -------------------------------------------------------------------------------- 完成代码段的定位、重定位,请按Project/Settings...,按照下图配置就可完成: 9 T; D! ]5 W8 D4 \ 编译完后的.map文件显示定位成功: --------2 a% c6 [7 l/ A( c: ]$ u( G' H Segments -------- start 00009000 end 000090da length 218 segment .text |
微信公众号
手机版