打印
[STM8]

STM8S的RAM就这样浪费掉了

[复制链接]
10117|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
原来用的是STM8S105C4,变量只能定义255个,现在换成C6,RAM扩大到2K,结果一试还是一样,看来换成几K 的都只能定义255个,太浪费了。
沙发
ar_m_cu| | 2014-6-27 09:21 | 只看该作者
255个大部分的应用都够用了吧,我的应用总从来没有这么多的变量
其次内存不仅仅是用来定义变量的,开缓冲区、堆栈都是用的RAM

使用特权

评论回复
板凳
旭日东起| | 2014-6-27 11:03 | 只看该作者
2K确定多,特定场合才要那么多RAM的

使用特权

评论回复
地板
motor666|  楼主 | 2014-6-27 11:31 | 只看该作者
说的有道理,尽量少用。但是,毕竟有些是需要很多的,如果都不需要那么多,还做大容量RAM的型号的单片机干什么呢?我是做交流正弦波信号采集,每周最低也得采64个点,再少就算不出来了,128个点最好,数据是16位的,还要干点别的吧,所以255个肯定不够,又试了207的,也是一样,所以只能想其它办法了。

使用特权

评论回复
5
mmuuss586| | 2014-6-27 12:37 | 只看该作者

你的意思是:想要定义很多的变量,现在程序只能定义255个吗?剩下的空间都不能定义?

使用特权

评论回复
6
lcdi| | 2014-6-27 14:27 | 只看该作者
不至于吧?定义成一个大数组试试?
你贴一下怎么定义的。

使用特权

评论回复
7
motor666|  楼主 | 2014-6-27 15:14 | 只看该作者
C:\图1

使用特权

评论回复
8
motor666|  楼主 | 2014-6-27 15:16 | 只看该作者
本帖最后由 motor666 于 2014-6-27 15:21 编辑
lcdi 发表于 2014-6-27 14:27
不至于吧?定义成一个大数组试试?
你贴一下怎么 定义的。
             把数组ARRY[200]屏蔽就通过,打开就报错。
C:\图1

使用特权

评论回复
9
yiucing| | 2014-6-27 15:42 | 只看该作者
是不是要修改一下memory mode。。

使用特权

评论回复
10
ar_m_cu| | 2014-6-27 15:54 | 只看该作者
STM8S105C4 和 C6 的内存都是2K。你应该检查下你还有那些地方使用了内存,包括连接文件里面堆栈大小的定义

使用特权

评论回复
11
hdp7891000| | 2014-6-27 19:10 | 只看该作者
200的数组肯定是可以的,肯定是你自己哪边没注意

使用特权

评论回复
12
21ID| | 2014-6-27 19:27 | 只看该作者
检查一下堆栈,255个变量肯定可以定义的

使用特权

评论回复
13
鸟鸟| | 2014-6-27 22:05 | 只看该作者

使用特权

评论回复
14
dzxxjack| | 2014-6-27 22:10 | 只看该作者
本帖最后由 dzxxjack 于 2014-6-27 22:41 编辑

STM8S105系列CPU的RAM地址范围为0~0x7FF的2K空间,其中默认将高512字节分配给堆栈,剩下0~0x5FF字节为变量存储空间 。在0~0x5FF的空间范围内,低256字节被定义为Zero page,其中包括.bsct,.ubsct,.bit,.share, 当segment .ubsct overflow错误出现时, 应该是低0~FF段空间出现溢出,cosmic默认将所有变量存储在zero page段, 你可以把其中的一些变量定义到0x100~0x5FF的空间里,通常将所有全局变量都加上@near申明,以放置在zero page外的存储空间!
或者你在project setting里,把MEMORY MODEL设成stack long,如果还不够用,你再把变量分一些放到0-FF段,正常定义1K多的变量应该没问题的,stack long默认将变量放在0x100以后(@near)stack short默认将变量放在0xff以内(@tiny)全局变量进行@tiny定义,就分配到0~FF段空间了,全局变量进行@near 定义,变量就放在0x100以后了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
百经之首 + 1 很给力!
15
zh_sl| | 2014-6-28 09:16 | 只看该作者
这是编译器的问题,你找一下所用的编译器资料看看吧

使用特权

评论回复
16
通宵敲代码| | 2014-6-28 09:51 | 只看该作者
你不是编译器的限制呢??

使用特权

评论回复
17
lovehuxiaohui| | 2014-6-28 20:42 | 只看该作者
....楼主 要好好补资料啊~~很简单的问题~~
stvd+cosmic情况下~~
@near unsigned char aaa[300];
这样定义 就定义在255以后的空间了~~

使用特权

评论回复
18
motor666|  楼主 | 2014-6-30 09:54 | 只看该作者
dzxxjack说的太透彻了,lovehuxiaohui也说到点子了了。非常感谢。

使用特权

评论回复
19
ldc2qt| | 2015-12-11 17:02 | 只看该作者
IAR ,乱定义

使用特权

评论回复
20
ereck| | 2015-12-30 09:16 | 只看该作者
还没有用到超过255个变量的,大的程序可能就不用这个片子了

使用特权

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

本版积分规则

173

主题

419

帖子

1

粉丝