打印
[技术问答]

新唐单片机的堆栈空间有多大?

[复制链接]
2404|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
18576478035|  楼主 | 2018-11-29 11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用STM32可以设定堆栈大小,如果局部变量开辟的过大会覆盖全局变量的值,新唐N76E003这个怎么看,我开辟256字节的局部变量数组会覆盖全局变量吗?
沙发
18576478035|  楼主 | 2018-11-29 11:32 | 只看该作者
求助

使用特权

评论回复
板凳
xuanhuanzi| | 2018-11-29 11:50 | 只看该作者
你试试看。

使用特权

评论回复
地板
xuanhuanzi| | 2018-11-29 11:52 | 只看该作者
256字节SRAM,768字节XRAM
应该可能会被覆盖。所以你可以换一下类型。不要都定义成默认的,你可以用code类型。

使用特权

评论回复
5
xuanhuanzi| | 2018-11-29 11:53 | 只看该作者
– 256字节片内直接存取RAM.
– 额外768字节片内间接存取RAM(XRAM)通过MOVX指令读写.

使用特权

评论回复
6
xuanhuanzi| | 2018-11-29 11:53 | 只看该作者
数据内存占用的地址空间独立于编程内存。在N76E003中,有256字节内部RAM。对于需要更多内部RAM的许多应用,N76E003提供另外片上768字节RAM,叫做XRAM,通过MOVX指令访问。

使用特权

评论回复
7
xuanhuanzi| | 2018-11-29 11:54 | 只看该作者
堆栈指针不能位于XRAM的任何区域。

使用特权

评论回复
8
xuanhuanzi| | 2018-11-29 11:55 | 只看该作者
N76E003没有外部存储器总线结构。MOVX指令仅用于读写内部XRAM用

使用特权

评论回复
9
xuanhuanzi| | 2018-11-29 11:55 | 只看该作者
至于怎么在C中嵌入汇编,请参考003的BSP,里面有演示这个功能。

使用特权

评论回复
10
wahahaheihei| | 2018-11-29 19:50 | 只看该作者
楼主,你试试定义一个512的数组,然后打印数组的开始地址和结束地址,看看是在哪一块,看看是不是可以自动选择存储位置到XRAM。

使用特权

评论回复
11
gx_huang| | 2018-11-29 20:42 | 只看该作者
C51的变量要区别开来,默认data(128字节),还有idata(128字节)、xdata(新唐003的xdata比较大),堆栈只能在data、idata范围内,如果你需要256字节的数组,只能定义到xdata区域,否则堆栈肯定溢出了,而且编译也无法通过,会提示data溢出。

使用特权

评论回复
12
xinpian101| | 2018-11-29 22:39 | 只看该作者
应该没法开辟成功。

使用特权

评论回复
13
yiyigirl2014| | 2018-11-30 08:28 | 只看该作者
这个就要规划好了,重要的放RAM,就是那些要求速度快的。
一般的放XRAM,效果是跟RAM差不多,唯一缺点稍微慢一点点。也是内存,可读可写。

使用特权

评论回复
14
yiyigirl2014| | 2018-11-30 08:28 | 只看该作者
还有一些固定不变的就要放Flash里面了,定义成code类型。

使用特权

评论回复
15
18576478035|  楼主 | 2018-12-5 18:26 | 只看该作者
xinpian101 发表于 2018-11-29 22:39
应该没法开辟成功。

why?

使用特权

评论回复
16
18576478035|  楼主 | 2018-12-5 18:29 | 只看该作者
我试了下是可以开辟成功的,但是我想知道51单片机和STM32的区别,STM32的栈空间是自己设置的,局部变量存放在栈中,如果局部变量定义的变量大于开辟的栈的大小,就会覆盖全局变量的值,我想知道51单片机是怎么做到开辟256byte的局部变量的,它整个内部data才256byte

使用特权

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

本版积分规则

55

主题

187

帖子

2

粉丝