懂 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的区域 缩小下啊?高手指点下、谢谢 你的堆栈开的太小了 回复【1楼】lovely-teddy
你的堆栈开的太小了
-----------------------------------------------------------------------
那应该如何修改啊?这是默认生成的 STACKSIZE 后面的数 回复【3楼】helloshi
stacksize 后面的数
-----------------------------------------------------------------------
我把它改成
STACKSIZE 0x90
还是报错误。
是不是 还需要修改。
Z_RAM =READ_WRITE 0x0060 TO 0x00FF;
RAM =READ_WRITE 0x0100 TO 0x015F;
之类的东西?
谢谢 STACKSIZE 改小 我说两点。
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段中了。 回复【5楼】helloshi
stacksize 改小
-----------------------------------------------------------------------
改小也没有用,除非移动stack的起码位置的指针。 回复【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]