打印
[STM8]

转:stm8与51核变量定义区域比较

[复制链接]
2179|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
拿起书本|  楼主 | 2012-9-26 22:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
)idata与@tiny:
熟悉51核的都知道,idata是定义内部ram地址的,而stm8的@tiny是把变量指定在zero page,zero page是0地址到0xff之间的与ram分开的256字节空间。操作zero page这段地址内的数据的指令,比操作其他ram区域的指令更快速,更高效。位操作指令指令只能处理这段地址中的数据(用途和原理和idata都类似)。所以编译器会把经常用到的数据分配到这个区间。zero page 又分多段:
a).bsct:在zero page区域的初始化变量。
b).ubsct:在zero pgae里面的未初始化变量。
c).bit:位操作段。
d).share:共享段?不太明白。
用户也可以使用这部分空间,只要在定义变量时要加上@tiny定义。如:@tiny char a 。在这@tiny char a;与 char idata a;形成比较。

2)xdata与@near:
用@near定义的变量会出现在stm8的ram区域。ram区域分段如下:
a) .bss:未初始化变量区域;
b) .data:已初始化变量区域;
c) .const:常量区域
另外还可以自己分配其他的段。如.fdata,.fconst.....
在这形成char xdata a[]与@near char a[]对比,和51核一样,如果不把大量的变量定义在外部ram区域(在这是ram区域),会造成zero page地址溢出。常见错误如:

3)pdata与@far???
这个不知道能不能比较,pdata不说了,@far定义的变量会出现在.fdata段(large variable)中,要自己添加这个段。

4)bit与_Bool:
都是位操作,布尔变量。
另外stm8还有eeprom空间,所以还有@eeprom类型。

5)总结:
简单的说了一下,详细见Cosmic手册。在移植51程序到stm8时,这几个地方也是要注意的。
沙发
sinadz| | 2012-9-26 23:17 | 只看该作者
分析的很好,值得参考

使用特权

评论回复
板凳
秋天落叶| | 2012-9-26 23:25 | 只看该作者
没完全看明白

使用特权

评论回复
地板
huangfeng33| | 2012-9-30 20:50 | 只看该作者
不错,对从51转ST的朋友应该有点用处吧。感谢分享

使用特权

评论回复
5
光晔秋秋| | 2014-4-27 21:48 | 只看该作者
学习学习学习了

使用特权

评论回复
6
nienianhong| | 2014-4-29 18:04 | 只看该作者
赞一个!

使用特权

评论回复
7
handlike| | 2014-4-29 22:42 | 只看该作者
我看好拿起书本呦

使用特权

评论回复
8
outstanding| | 2014-4-30 10:46 | 只看该作者
看看 学习一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:好好学习,天天向上!

519

主题

4194

帖子

31

粉丝