66

帖子

0

TA的资源

一粒金砂(初级)

41
 
明天开始看COSMIC的两个编译器手册。。。

哈哈,估计又是一大堆问题上来晕乎。。。
此帖出自stm32/stm8论坛
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

42
 
ST干吗不定义一个指令助记符?又不要成本
我的理解是,这条指令因为只能用在中断向量表中,而不能用在其它地方,是否为它定义一个助记符并不重要。

如果定义了助记符,是否就意味着可以用在其它地方,如果不明就里的人在写程序时,尤其是写汇编程序时,使用了这条指令,那样不是会产生更大的麻烦?所以似乎不给它定义一个指令助记符是更好的选择。
此帖出自stm32/stm8论坛
 
 

回复

85

帖子

0

TA的资源

一粒金砂(中级)

43
 
呵呵,初用ST芯片的,都会有少少不习惯。
ST芯片很多观念与美系不一样。
此帖出自stm32/stm8论坛
 
 

回复

23

帖子

0

TA的资源

一粒金砂(初级)

44
 
                                 请问香水城主,COSMIC编译器是否支持变量地址的绝对定位?!
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

45
 
请问香水城主,COSMIC编译器是否支持变量地址的绝对定位?!
可以呀,C语言能够访问所有的硬件寄存器,他们的地址都是绝对定位的。具体如何操作我不是很清楚。

除了硬件寄存器外,好像没有必要对变量地址进行绝对定位吧?有什么特别的需要吗?
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

46
 
硬件寄存器可以绝对地址访问,COSMIC给出了@,例如 volatile char  PORTB @0x10;
但寄存器和变量存放的RAM不一样啊,我定义变量时使用类似方式进行绝对地址定位是不可以的 。
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

47
 
申明的时候用@,或是申明一批,然后用Segment定位开始地址即可。

这几天给Microchip的Master折腾的要死。
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

48
 
LS能否给出例子?

使用@时,其后面不就是定位的地址吗?如何使用segment再定位地址?

我尝试了一下,使用@绝对定位变量没有完全成功,char i @0xfe;-->这样可以成功。
char i=0 @0xfe;则失败,这意味着不可以赋初值?!有什么办法绝对定位的同时赋初值成功?!

呵呵,grant_jx,你们不是只做ST的吗?什么时候操心MCHP的MASTER了?!
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

49
 
                                 [img][/img]下午要出去,打字慢,先讲segment的用法。 我们可以用segment关键字将一段代码或申明的变量地位在一个特定的区域。要使用这要的办法,需要现在mapping.asm(针对汇编,C的话就是lkf)申明一个自定义段。比如我要申明一个mysegment {},放在ROM区域,里面打算放数组也好、代码的二进制文件也好,用户自己定。 对于汇编 ,打开mapping.asm: stm8/ ;------------------------------------------------------ ; SEGMENT MAPPING FILE AUTOMATICALLY GENERATED BY STVD ; SHOULD NOT BE MANUALLY MODIFIED. ; CHANGES WILL BE LOST WHEN FILE IS REGENERATED. ;------------------------------------------------------ #include "mapping.inc" BYTES ; The following addresses are 8 bits long segment byte at ram0_segment_start-ram0_segment_end 'ram0' WORDS ; The following addresses are 16 bits long segment byte at ram1_segment_start-ram1_segment_end 'ram1' WORDS ; The following addresses are 16 bits long segment byte at stack_segment_start-stack_segment_end 'stack' WORDS ; The following addresses are 16 bits long segment byte at 4000-45FF 'eeprom' WORDS ; The following addresses are 16 bits long segment byte at 8080-17FFF 'rom' WORDS ; The following addresses are 16 bits long segment byte at 8000-807F 'vectit' END ---------------------- WORDS ; The following addresses are 16 bits long segment byte at 8080-17FFF 'rom' 我们需要在ROM区添加一个段叫mysegment,地址在0xFF00到0xFFF0区域,我们自己手动添加这个段: WORDS ; The following addresses are 16 bits long segment byte at FF00-FFF0 'mysegment' 将上面的内容添加到ROM之后,Vectit之前(你现在明白之前为什么在C中中断向量 veciti 只是一个符合,而不是地址的定位了吧?)。保存。还有一种快速的方法是在STVD下使用IDE的界面,项目Project-Setting - ST Link里面改。 结果看截图:
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

50
 


什么啊,怎么排好的版成了这个德性,算了,回头我在自己的bolg上更新吧。

做得太杂了,仅MCU这块除ST,还有Microchip的(除去PIC32,其它基本没精力关心了)、TOSHIBA 的Cortex M3,个人感觉纯一个打杂的。


刚看到的一个网友上传上来的一个ST的中文笔记,上面也有这一部分。补上:
unsigned char temp_A@0x00; //定义无符号变量temp_A,强制其地址为0x00
unsigned char temp_B@0x100; //定义无符号变量temp_B,强制其地址为0x100
@tiny unsigned char temp_C; //定义无符号变量temp_C,由编译器自动在地址小于0x100的RAM中为其分配一个地址
@near unsigned char temp_D; //定义无符号变量temp_D,由编译器自动在地址大于0xFF的RAM中为其分配一个地址
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

51
 
segment的用法还是知道的,各个编译器大同小异,我理解错了你47楼的发言,还因为结合使用segment和@来实现对变量的绝对定位呢,如果这样就很异样了。

我在44楼没把问题说清楚,使用@绝对定位变量是可以的,我一开始就测试通过了,但赋初值就出错了,例如:
unsigned char temp_A@0x00; //定义无符号变量temp_A,强制其地址为0x00
但不能写成:unsigned char temp_A=0@0x00; //定义无符号变量temp_A,强制其地址为0x00
这点和IAR的编译器一样,以前使用IAR FOR AVR的时候,好象也不能赋初值,呵呵,一直想弄明白不能赋初值的原因是什么?!
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表