打印
[技术问答]

N76E003 SRAM只有128 BYTE?

[复制链接]
5090|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wing_yes|  楼主 | 2017-9-7 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wing_yes 于 2017-9-7 19:45 编辑

规格书写着: N76E003提供丰富的特殊功能模块,包括: 256字节SRAM, 768字节XRAM

– 256字节片内直接存取RAM.
– 额外768字节片内间接存取RAM(XRAM)通过MOVX指令读写.

但实际上我超过128 byte就开始报错了。有知道怎么回事的吗?

Build target 'BLDC_SENSORLESS'
linking...
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?IT
    LENGTH:  0002H
Program Size: data=131.0 xdata=0 code=1633
Target not created

去掉一个32位的变量后:
Build target 'BLDC_SENSORLESS'
compiling motor_drive.c...
linking...
Program Size: data=127.0 xdata=0 code=1627
creating hex file from ".\Output\Bldc_sensorless"...
".\Output\Bldc_sensorless" - 0 Error(s), 0 Warning(s).
沙发
rgjinxuan| | 2017-9-7 17:20 | 只看该作者
不会,我用500  个没问题

使用特权

评论回复
板凳
l4157| | 2017-9-7 17:24 | 只看该作者
本帖最后由 l4157 于 2017-9-7 17:29 编辑

内存模式设置的问题,设置成 Small 只能用128字节,Compact可以用256,Large可以用1KB

使用特权

评论回复
地板
wing_yes|  楼主 | 2017-9-7 19:20 | 只看该作者
l4157 发表于 2017-9-7 17:24
内存模式设置的问题,设置成 Small 只能用128字节,Compact可以用256,Large可以用1KB ...

是在哪里设置?keil里面设吗?

使用特权

评论回复
5
wing_yes|  楼主 | 2017-9-7 19:27 | 只看该作者
Keil Cx51编译器提供三条编译模式控制命令:SMALL,COMPACT,LARGE,它们对变量存储器空间的影响如下。  SMALL:所有变量都被定义在8051单片机的片内RAM中,对这种变量的访问速度最快。另外,堆栈也必须位于片内RAM中,而堆栈的长度是很重要的,实际栈长取决与不同函数的嵌套深度。采用SMALL编译模式与定义变量时指定data存储器类型具有相同效果。  COMPACT:所有变量被定义在分页寻址的片外XRAM中,每一页片外XRAM的长度为256字节:即所有变量存储在片外XRAM的某一页中。这时对变量的访问是通过寄存器间接寻址(MOVX @R0,MOVX @R1)进行的,变量的低8位地址由R0和R1确定,变量的高8位地址由P2口确定。采用这种模式时,必须适当改变配置文件STARTUP.A51中的参数:PDATASTART和PDATALEN;同时还必须对uVision2的“Options选项/BL51 Locator 标签页/Pdata框”中键入合适的地址参数,以确保P2口能输出所需要的高8位地址。采用COMPACT编译模式与定义变量时指定pdata存储器类型具有相同效果。  LARGE:所有变量被定义在片外XRAM中(最大可达64KB),使用数据指针DPTR来间接访问变量(MOVX @DPTR),这种编译模式对数据访问的效率最低,而且将增加程序的代码长度。采用LARGE编译模式与定义变量时指定xdata存储器类型具有相同效果。  Note: 1、在程序中定义的变量,若不指定其存储区域(data、idata、xdata等),则系统自动存放到上述编译模式指定的存储区。 2、在指定编译器编译模式情况下,要想将变量存放在其他区域,可指定变量修饰类型。(假设指定为small模式,则默认变量存储在片内RAM区,此时可指定变量为idata类型,即可将其存放在片外RAM中) 3、同一段代码,在不同编译模式下,编译出的代码code大小为:small < compact < large。 4、同一编译模式下,变量存储区域不同,编译出的代码code大小为:data < idata < xdata

使用特权

评论回复
6
l4157| | 2017-9-7 19:36 | 只看该作者
wing_yes 发表于 2017-9-7 19:20
是在哪里设置?keil里面设吗?

keil
project/Options for T****
alt+F7
Target下面有个memory Model 选项,下拉选择Large:variables in XDATA

使用特权

评论回复
评论
windows100 2019-6-19 09:34 回复TA
困扰一周问题,在这里找到答案了。万分感谢。 
7
wing_yes|  楼主 | 2017-9-7 19:44 | 只看该作者
l4157 发表于 2017-9-7 17:24
内存模式设置的问题,设置成 Small 只能用128字节,Compact可以用256,Large可以用1KB ...

设置成large的话,那是不是所有变量都用movx 寄存器间接寻址?

使用特权

评论回复
8
捉虫天师| | 2017-9-7 20:27 | 只看该作者
有利有弊,还有设计时候不要超过128不就行了

使用特权

评论回复
9
捉虫天师| | 2017-9-7 20:27 | 只看该作者
先规划好用到的变量,然后excel里进行区间划分

使用特权

评论回复
10
l4157| | 2017-9-7 21:58 | 只看该作者
本帖最后由 l4157 于 2017-9-7 22:01 编辑
wing_yes 发表于 2017-9-7 19:44
设置成large的话,那是不是所有变量都用movx 寄存器间接寻址?

keil可以自己定义变量放在哪的, 用idata 和xdata等关键字
在51系列中data,idata,xdata,pdata的区别:
data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。
idata:固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。
xdata:外部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。

https://bbs.21ic.com/icview-1170450-1-1.html


使用特权

评论回复
11
mintspring| | 2017-9-10 17:04 | 只看该作者
没搞过这些,都是自己按需配置,没发现不够用的事情

使用特权

评论回复
12
a105865094| | 2017-9-11 10:16 | 只看该作者
变量可以用idata data xdata bdata关键词进行修饰,如unsigned char idata x;,默认的small模式不加修饰的变量其实是data
data:定义的变量在00H~7FH的RAM,128byte范围,变量可读写,直接寻址速度
idata:定义的变量在00H~FFH的RAM,256byte范围,变量可读写,简介寻址
bdata:定义的变量在20H~2FH的RAM,16byte范围,变量可读写。字节和位混合
xdata:定义的变量在扩展的外部存储区,64Kbyte范围,变量可读写,速度满

使用特权

评论回复
13
xixi2017| | 2017-9-11 19:49 | 只看该作者
做这个设计最好做出来个内存分配表,我听高人的建议做好个表,用起来相当嗨皮。

使用特权

评论回复
14
whtwhtw| | 2019-3-18 14:58 | 只看该作者
keil设置成SMALL模式,变量根据需求声明一下内存空间,比如unsigned char idata test[20]就是放置在idata存储空间中,unsigned char xdata test[20]就是放置在xdata存储空间中。默认的变量和堆栈就放置在RAM低128位空间

使用特权

评论回复
15
desertsailor| | 2019-6-20 10:51 | 只看该作者
128字节idata,128字节pdata,其余为xdata

使用特权

评论回复
16
zhuomuniao110| | 2019-6-21 11:35 | 只看该作者
方法错了。

使用特权

评论回复
17
zhuomuniao110| | 2019-6-21 11:36 | 只看该作者
定义类型时候要选对

使用特权

评论回复
18
zhuotuzi| | 2019-6-21 20:42 | 只看该作者
定义变量的类型要选择位置。

使用特权

评论回复
19
zhuotuzi| | 2019-6-21 20:43 | 只看该作者
这个版块之前有人问过这个问题,也有人帮忙解答,很完美的,这个是51,51有几个特别的关键字,你要知道。

使用特权

评论回复
20
wahahaheihei| | 2019-6-22 23:47 | 只看该作者
用idata 和xdata等关键字试试

使用特权

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

本版积分规则

2

主题

7

帖子

0

粉丝