这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ST7 求ST7 C语言程序定位C例程?

共3条 1/1 1 跳转至

ST7 求ST7 C语言程序定位C例程?

院士
2006-09-17 18:14:16     打赏
ST7 求ST7 C语言程序定位C例程?



关键词: 语言程序     定位     例程    

院士
2006-12-22 22:43:00     打赏
2楼
ST7 C语言程序定位问题
IDE: ST7 VISUAL DEVELOP
C COMPLILER : COSMIC CXST7 16K
能够给出具体的C代码??


1: 在link的时候指定在lkf文件中定义session,并设置好其物理位置。
然后在c文件中指定代码所在的session

链接器就知道如何链接了,然后查看map文件。 2: 在lkf文件不支持我的改写啊在lkf文件不支持我的改写啊
有什么设置之类的么  3: 没有你说不支持你的改写是什么意思?

你在lkf文件中定义之后,在.c文件中的相应程序之前用
#pragma section xxx 来指定,应该会有效。 4: ST7 C语言程序定位:在STVD7中如何配置STVD7的开发环境中提供了非常方便的手段,可以轻松的实现C语言程序的存储定位。以下说明以我另一个帖子的例子作为前提:
ST7 16位通用定时器中的输出比较功能(Output Compare)详解

假定我有一个函数delay()需要定位到0x8000开始的区域;有三件事要做:
1)原有的代码段是默认定位在从0x8000开始的区域,把默认代码段重定位到从0x9000开始的区域;
2)在函数delay()前用#pragma定义一个新的代码段,命名为.delay_code,程序片断如下;
3)将新的代码段.delay_code定位在从0x8000开始到0x8FFF结束的区域。

程序片断

#pragma section (delay_code) // 定义新代码段

void delay(void)
{
    unsigned char counter;
    for (counter = 0; counter < 100; counter++)
        _asm("nop");
}

#pragma section () // 以下代码恢复到默认代码段


完成代码段的定位、重定位,请按Project/Settings...,按照下图配置就可完成:


编译完后的.map文件显示定位成功:
            --------
            Segments
            --------

start 00009000 end 000090da length   218 segment .text        <—— 默认代码段
start 000090dd end 000090dd length     0 segment .const
start 00008000 end 0000800c length    12 segment .delay_code    <—— 新代码段
start 00000080 end 00000080 length     0 segment .bsct
start 00000080 end 00000088 length     8 segment .ubsct
start 00000088 end 00000089 length     1 segment .share
start 00000200 end 00000200 length     0 segment .data
start 00000200 end 00000200 length     0 segment .bss
start 00000000 end 00000c51 length  3153 segment .debug
start 0000ffe0 end 00010000 length    32 segment .const
start 000090da end 000090dd length     3 segment .init 5: 顺便问一下在#pragma section (delay_code) // 定义新代码段

后面不需要加@far吗?

#pragma section (delay_code) @far ;


如果我要定义一堆变量在RAM1的某个区域的时候,发现如果我不加入@far,在map文件中找到定义的section 只有0个长度啊? 6: 非常感谢各位的帮助,问题已经解决了非常感谢各位的帮助,问题已经解决了
对开发环境还不够熟悉。 7: 后面不需要加@far吗? 8: 9: 10: 回答grant_jx:COSMIC CXST7中如何分配变量到指定RAM区见下例:首先你要定义一个新的无初始化数据段my_data,然后在随后定义变量时使用@near修饰符表示该变量要分配到长地址RAM区,最后按我上面的例子在Project Settings中加入一个新的段。

例子中的变量counter前没有@near修饰符,它被分配到默认的短地址RAM区,这可能就是你所见到的情况。



#pragma section @near [my_data]
unsigned char counter;
@near unsigned char my_array[100];
11: 请问"@"这个符号用来干吗? 12: 这时编译器规定的,没有详细研究,估计是为了区分其他标识符吧有必要一定搞清楚吗?可能要仔细看下原始资料了,但估计没有讲。 13: 谁有COSMIC  16K  的LICESENS那位师兄有的话,帮我发一个?THANKS!
  E-MAIL:ZHWANG@SUNCUPID.COM.CN 14: 这位同志,为什么你要反复问同一个问题呢?问了问题不看回答吗? 15: 16:

专家
2022-08-04 23:14:36     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]