• 中国·深圳市龙岗区坂田环城南路坂田国际中心C2栋815
  • 4007-888-234
  • enroo@enroo.com

技术支持

当前位置:单片机开发>>技术支持>>正文
单片机开发内存分区设计-单片机开发公司
点击次数:96次        更新时间:2018-09-27

深圳单片机开发公司英锐恩的单片机芯片采用的是C语言编程,单片机芯片内存主要分为代码段(code),数据段(data)和堆栈(stack)。

代码段放程序代码,属于只读内存。数据段存放全局变量,静态变量,常量等,堆里存放自己malloc或new出来的变量,其他变量就存放在栈里,堆栈之间空间是有浮动的。

数据段的内存会到程序执行完才释放。调用函数先找到函数的入口地址,然后计算给函数的形参和临时变量在栈里分配空间,拷贝实参的副本传给形参,然后进行压栈操作,函数执行完再进行弹栈操作。字符常量一般放在数据段,而且相同的字符常量只会存一份。

单片机芯片内存分成5个区,它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

1、栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。

2、堆区(heap):就是那些由new分配的内存块,它们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

3、自由存储区:就是那些由malloc等分配的内存块,它和堆是十分相似的,不过它是用free来结束自己的生命。

4、全局/静态存储区:全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

5、常量存储区:这是一块比较特殊的存储区,它们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)

在函数函数中定义的变量通常是在栈上,用malloc、calloc等分配内存的函数分配得到的就是堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在静态区,在所有函数体外定义的static变量表示在该文件中有效,不能extern到别的文件中,在函数体内定义的static表示只在函数体内有效。

深圳市英锐恩科技有限公司推出的单片机芯片堆栈最高达到8,保证单片机芯片工作的过程中遇到中断源,完好保存中断之前的信息,采用低功耗特性CMOS 技术,全静态设计,具有低功耗、高性能的特性。

image.png