823032003 发表于 2011-1-22 19:32:03

懂 freescale单片机的请进:freescale 的8位 单片机,显示RAM不够

http://cache.amobbs.com/bbs_upload782111/files_36/ourdev_612891MV1AJ0.jpg
(原文件名:error.jpg)



我定义的RAM的 变量 大概90个,该单片机有256byte的RAM,应该怎么修改呢?

prm文件如下
SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
    ROM                      =READ_ONLY    0xDC00 TO 0xFBFF;
    Z_RAM                  =READ_WRITE   0x0060 TO 0x00FF;
    RAM                      =READ_WRITE   0x0100 TO 0x015F;
END

PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */
    DEFAULT_RAM                         INTORAM;
    DEFAULT_ROM, ROM_VAR, STRINGS       INTOROM; /*In case you want to useas well, be sure the option -OnB=b is passed to the compiler. */
    _DATA_ZEROPAGE, MY_ZEROPAGE         INTOZ_RAM;
END

变量定义到RAM区,只有0x5f个,95个。我能不能吧Z_RAM的区域 缩小下啊?高手指点下、谢谢

lovely-teddy 发表于 2011-1-22 20:55:26

你的堆栈开的太小了

823032003 发表于 2011-1-23 16:53:41

回复【1楼】lovely-teddy
你的堆栈开的太小了
-----------------------------------------------------------------------

那应该如何修改啊?这是默认生成的

helloshi 发表于 2011-1-23 17:37:54

STACKSIZE 后面的数

823032003 发表于 2011-1-23 18:13:29

回复【3楼】helloshi
stacksize 后面的数
-----------------------------------------------------------------------

我把它改成

STACKSIZE 0x90

还是报错误。

是不是 还需要修改。

Z_RAM                  =READ_WRITE   0x0060 TO 0x00FF;
    RAM                      =READ_WRITE   0x0100 TO 0x015F;

之类的东西?
谢谢

helloshi 发表于 2011-1-23 21:28:16

STACKSIZE 改小

FuckTheParty 发表于 2011-1-23 22:21:43

我说两点。
1.不要改Z_RAM,RAM的地址及大小。它们都与MCU的存储空间分配有关。 Z_RAM是直接页面存储的,用8位直接寻址就可以访问。而RAM需要16位扩展寻址模式。放在Z_RAM段中的变量,访问速度要快。
2.你可以把一些要经常访问的变量变到Z_RAM段中。方法如下:
#pragma DATA_SEG __SHORT_SEGMY_ZEROPAGE
volatile word var1;//经常要访问的变量
int var2;
...
#pragma DATA_SEG DEFAULT

以上定义的变量就放到了Z_RAM段中了。

FuckTheParty 发表于 2011-1-23 22:27:04

回复【5楼】helloshi

stacksize 改小

-----------------------------------------------------------------------
改小也没有用,除非移动stack的起码位置的指针。

823032003 发表于 2011-1-24 10:01:57

回复【6楼】FuckTheParty
我说两点。
1.不要改z_ram,ram的地址及大小。它们都与mcu的存储空间分配有关。 z_ram是直接页面存储的,用8位直接寻址就可以访问。而ram需要16位扩展寻址模式。放在z_ram段中的变量,访问速度要快。
2.你可以把一些要经常访问的变量变到z_ram段中。方法如下:
#pragma data_seg __short_segmy_zeropage
volatile word var1;//经常要访问的变量
int var2;
...
#pragma data_seg default
以上定义的变量就放到了z_ram段中了。
-----------------------------------------------------------------------

谢谢,照你的方法做,编译 连接 OK了
页: [1]
查看完整版本: 懂 freescale单片机的请进:freescale 的8位 单片机,显示RAM不够