共3条
1/1 1 跳转至页
ST7 求ST7 C语言程序定位C例程?
问
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:
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:
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |