在keil中怎样才能修改单片机堆栈的指针,十万火急!!!!!
我用的STC单片机只有256字节的SRAM。我想修改堆栈指针,多释放一些内存,在主程序系统初始化的时候,我的程序是:SP=0xA0;但是堆栈指针设置没有成功。后来又在ke...
我用的STC单片机只有256字节的SRAM。我想修改堆栈指针,多释放一些内存,在主程序系统初始化的时候,我的程序是:SP=0xA0;但是堆栈指针设置没有成功。后来又在keil的STARTUP.A51修改堆栈指针,还是没有成功。请问各位大侠,在keil中怎样才能修改单片机堆栈的指针,急啊,谢谢!!
展开
4个回答
展开全部
释放内存不应该用改SP的办法来实现,效果不好,而且很危险,KEIL已经为你考虑到了各种情况,你乱改,程序反而会出错。
节约内存办法有很多,1、尽量用格式小的数据,能用char不用int,能用bit不用char;
2、尽量少定义全局变量
3、将几个不会同时用到的变量定义到同一个地址上去,当然在定义的时候要想清楚
4、尽量避免大数组,如果必须用,也尽量用指针来替换
5、减少函数嵌套
所以说,内存就像水,挤挤总能有的,关键是你用不用心
节约内存办法有很多,1、尽量用格式小的数据,能用char不用int,能用bit不用char;
2、尽量少定义全局变量
3、将几个不会同时用到的变量定义到同一个地址上去,当然在定义的时候要想清楚
4、尽量避免大数组,如果必须用,也尽量用指针来替换
5、减少函数嵌套
所以说,内存就像水,挤挤总能有的,关键是你用不用心
追问
谢谢仁兄啦,你这个说法我很同意,但我必要定义100字节左右的常量数组。如果让keil自动为你分配SP的话,如果是256内存的话你只能用到137字节左右,其它的都被占用了。不过我的问题已解决了,就像仁兄你说的,挤了挤牙膏:)!!!!
追答
如果是常量数组,那就在定义的时候增加code关键字,这样就不占用内存了
2011-03-12
展开全部
用C语言你就不要自找麻烦了,keil会自动修改堆栈指针,你如果改了还会导致程序出错,
如果你用汇编语言那就要重设栈指针(MOV SP,#XXX )
如果你用汇编语言那就要重设栈指针(MOV SP,#XXX )
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1. 你怎么判断出没有成功的?
2. 堆是堆,栈是栈,不要混为一谈。
2. 堆是堆,栈是栈,不要混为一谈。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-03-12
展开全部
不知道这个型号的,但8051可以用指令就行了,如:MOV SP,#30H
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询