打印
[技术问答]

N76E003单片机

[复制链接]
2939|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
北辰极界|  楼主 | 2018-1-29 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
N76E003单片机的RAM太小 只有128B高128B用来给特殊寄存器使用   有什么好的方法可以解决这个问题???




求指教
沙发
mcu5i51| | 2018-1-29 16:27 | 只看该作者
不是说256+768吗?

使用特权

评论回复
板凳
北辰极界|  楼主 | 2018-1-29 16:31 | 只看该作者

内部只有256  但是高128不是给特殊寄存器用 了呢  所以只有低128


768是要外加的

使用特权

评论回复
地板
mcu5i51| | 2018-1-29 16:43 | 只看该作者
全是内部的,
如果用KEIL的话
一般变量直接定义范围0-127
指针方式用idata,范围0-255
外部方式用xdata,芯片会映射在内部的对应地址上;

使用特权

评论回复
5
北辰极界|  楼主 | 2018-1-29 19:36 | 只看该作者
mcu5i51 发表于 2018-1-29 16:43
全是内部的,
如果用KEIL的话
一般变量直接定义范围0-127

我就是现在这个变量定义不够用  因为我有两个数组比较大  需要全局变量有没有好的方法

使用特权

评论回复
6
稳稳の幸福| | 2018-1-29 21:51 | 只看该作者
楼主最好优化一下自己的程序吧,别搞太变量,合理规划一下,多浪费内存。

使用特权

评论回复
7
mcu5i51| | 2018-1-29 22:12 | 只看该作者
北辰极界 发表于 2018-1-29 19:36
我就是现在这个变量定义不够用  因为我有两个数组比较大  需要全局变量有没有好的方法 ...

多大,在这个芯片上数组的最大值应该是768个字节,再大了就没有办法了

使用特权

评论回复
评论
北辰极界 2018-1-30 18:10 回复TA
@mcu5i51 :我用的是Keil编程的 我是在芯唐的官网下载的例程然后在这个基础上自己改为自己的程序 我是初学者 
mcu5i51 2018-1-30 10:17 回复TA
@北辰极界 :所谓的外部RAM,在这里只是寻址方式,并不是RAM是外加的,外部寻址用16位DP作为指针,速度慢些;不是真的芯片外部RAM,可以认为是芯片集成在... 
mcu5i51 2018-1-30 10:10 回复TA
@北辰极界 :4L有说明,三种定义可用大小为0-127;0-255;0-767;最大连续空间为768个字节,总数为1024(1K),使用这些是不用增加任何元件的 
北辰极界 2018-1-30 10:04 回复TA
我希望在不增加外设的情况下去改变 有没有好的方法 那个高128是不是只能用做SFR使用 
8
jerow| | 2018-1-30 08:38 | 只看该作者
再大的话,只能更换芯片了,RAM就是这么小,没办法。

使用特权

评论回复
9
北辰极界|  楼主 | 2018-1-30 18:08 | 只看该作者
mcu5i51 发表于 2018-1-29 22:12
多大,在这个芯片上数组的最大值应该是768个字节,再大了就没有办法了

看来我之前理解错了  那怎样去使用那768字节呢   寻址方式怎么弄  我是初学者不怎么理解  能不能详细讲解一下   我之前在KEIL中将那个memory model改为了large意思是存储在Xdata中 但是我的程序就出了问题 我不知道我说的改这个跟你说的是否一样   但是好像改这个也要改其他东西我不是很会求详细指教

使用特权

评论回复
10
xixi2017| | 2018-1-30 19:03 | 只看该作者
什么都别改,让系统自己分配试试看。

使用特权

评论回复
11
北辰极界|  楼主 | 2018-1-30 19:13 | 只看该作者
xixi2017 发表于 2018-1-30 19:03
什么都别改,让系统自己分配试试看。

会出错的

使用特权

评论回复
12
huahuagg| | 2018-1-30 19:21 | 只看该作者

官方的例子能否看懂啊?汇编的,我是没太懂。

使用特权

评论回复
13
chuolizhi| | 2018-1-30 19:26 | 只看该作者
用STC

使用特权

评论回复
14
mcu5i51| | 2018-1-31 08:32 | 只看该作者
北辰极界 发表于 2018-1-30 18:08
看来我之前理解错了  那怎样去使用那768字节呢   寻址方式怎么弄  我是初学者不怎么理解  能不能详细讲解 ...

前面说了呀,定义方式不同呀,直接定义是用内存0-127;如u8 dat;idata定义是0-255的范围,如idata u8 tmp;外部寻址用xdata定义,如 xdata u8 buf[512];

使用特权

评论回复
15
sinomicon| | 2018-1-31 14:34 | 只看该作者
1T 8051 FLASH单片机SM51F003

使用特权

评论回复
16
余三水| | 2018-1-31 21:50 | 只看该作者

编译器应该会自己分配的吧?

使用特权

评论回复
17
jimsboy| | 2018-1-31 22:51 | 只看该作者
那个memory改成large应该可以。你编译一下,它会告诉你data xdata分别用了多少,看看是不是哪个超了

使用特权

评论回复
18
北辰极界|  楼主 | 2018-2-4 07:43 | 只看该作者
我改成large程序运行就出问题了 我加上xdata运行也出问题

使用特权

评论回复
19
EACLTD| | 2018-2-10 18:49 | 只看该作者
本帖最后由 EACLTD 于 2018-2-10 19:54 编辑

改成large内存分配模式出错,说明你程序本身不优化(主要是某些变量定义在扩展内存,并通过自定义指针变量寻址会出错——指针类型错误),需要手动配置内存(在变量声明前面加data、xdata分配到直接内存或扩展内存中)或修改指针类型。

使用特权

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

本版积分规则

31

主题

141

帖子

0

粉丝