原创 单片机中实用的动态分配内存

2008-4-15 15:20 4264 8 12 分类: MCU/ 嵌入式

文章评论4条评论)

登录后参与讨论

用户1140564 2008-8-29 11:15

也不知道我的想法是否正确

用户1140564 2008-8-29 11:01

我还是不死心。继续找有关覆盖分析的资料,keil也没有提供更多的解释 ,可能是核心机密吧,后来发现可能是指令集的问题,要实现出栈和入栈很不方便,pop和push只能在data区用,如果堆栈在xdata区使用会很不方便,一个出栈入栈会浪费掉很多指令,这在 1微秒每条指令的时代可能是 不可接受的,但是现在都增强型了,每个微秒可以执行10条了。 这是我的理解,不知道哪位大侠给个解释

用户1140564 2008-8-29 10:51

2、 data区内最好放局部变量。 因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同 对于第二条有些疑问,说是“某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖 ”这和堆栈的方式有什么区别,为什么不用堆栈呢。处理起来更方便,更易懂,可重入函数的实现也很方便。可能就是可重入函数实现很不方便,所以在keil编译器下写操作系统很麻烦,所以陈明计大侠就终止了smallrtos的升级

用户1140564 2008-8-29 10:41

最近对keil的变量覆盖分析产生了些疑问 ,在网上看到有些人是这样解释的 1、 data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、 data区内最好放局部变量。 因为局部变量的空间是可以覆盖的(某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖),可以提高内存利用率。当然静态局部变量除外,其内存使用方式与全局变量相同; 3、 确保你的程序中没有未调用的函数。 在Keil C里遇到未调用函数,编译器就将其认为可能是中断函数。函数里用的局部变量的空间是不释放,也就是同全局变量一样处理。这一点Keil C做得很愚蠢,但也没办法。 4、 程序中遇到的逻辑标志变量可以定义到bdata中,可以大大降低内存占用空间。 在51系列芯片中有16个字节位寻址区bdata,其中可以定义8*16=128个逻辑变量。定义方法是: bdata bit LedState;但位类型不能用在数组和结构体中。 5、 其他不频繁用到和对运算速度要求不高的变量都放到xdata区。 6、 如果想节省data空间就必须用large模式,将未定义内存位置的变量全放到xdata区。当然最好对所有变量都要指定内存类型。 7、 当使用到指针时,要指定指针指向的内存类型。 在 C51中未定义指向内存类型的通用指针占用3个字节;而指定指向data区的指针只占1个字节;指定指向xdata区的指针占2个字节。如指针p是指向 data区,则应定义为: char data *p;。还可指定指针本身的存放内存类型,如:char data * xdata p;。其含义是指针p指向data区变量,而其本身存放在xdata区。

用户992653 2006-12-28 17:57

哈哈,不错,收藏了/.

 

sealove518_112732726 2006-12-28 15:16

这位仁兄好气爽

用户58789 2006-12-27 08:27

顶一下

sealove518_112732726 2006-12-26 22:27

基本概念
相关推荐阅读
用户1140564 2009-05-22 11:50
关于c8051f350的一些事情
折腾了几天得出以下几点1.在调试的时候,一进入就要把狗关掉2.在写内部flash的时候要把看门狗关掉,要不然是不会成功写入的3.关ADC的总结以后再详细论述了...
用户1140564 2008-09-02 17:27
c语言的面向对象编程
<a href="http://www.qiji.cn/eprint/abs/2645.html">C语言的面向对象编程</a>  ...
用户1140564 2008-08-29 15:05
74系列
74芯片特性分类使总汇2008-05-16 12:03 74HC/LS/HCT/F系列芯片的区别 1、 LS是低功耗肖特基,HC是高速COMS。LS的速度比HC略快。HCT输入输...
用户1140564 2008-08-29 14:55
74hc164的干扰
以前扩管脚的时候一直用74ls164,那个系统都是5伏的电压,没有任何问题,可是最近做了个东西,管脚不够,还是3.3伏的,就用了74hc164.这下问题就出来了,在测试的时候发现问题了。这个板子没有敷...
用户1140564 2006-11-09 11:09
今天是我在EDN的第一个话题
前两天在网上找了个saber2006很好用啊...
我要评论
4
8
关闭 站长推荐上一条 /2 下一条