仿牌网站建设,小企业想做网站推广找哪家强,外包公司好不好,扬州建设局网站一、单片机存储区域
如图所示位STM32F103ZET6的参数#xff1a; 单片机的ROM#xff08;内部FLASH#xff09;#xff1a;512KB#xff0c;用来存放程序代码的空间。 单片机的RAM#xff1a;64KB#xff0c;一般都被分配为堆、栈、变量等的空间。
二、堆和栈的概念
…一、单片机存储区域
如图所示位STM32F103ZET6的参数 单片机的ROM内部FLASH512KB用来存放程序代码的空间。 单片机的RAM64KB一般都被分配为堆、栈、变量等的空间。
二、堆和栈的概念
单片机中的堆和栈是用来存储程序运行时的数据的两个重要区域。堆和栈都存在于单片机的RAM随机存储器中。 堆是用来存储动态分配的内存空间的区域。在单片机中堆的大小取决于程序的需求但是总大小不能超过单片机硬件的实际RAM大小。堆的分配和释放是由程序员手动控制的通常使用malloc()和free()等函数来进行操作。 栈是用来存储函数调用和局部变量的区域。每当一个函数被调用时函数的参数、返回地址和局部变量等信息都会被压入栈中。当函数执行完毕后这些信息会被弹出栈。栈的大小是由编译器在编译时确定的通常是根据函数的嵌套深度和局部变量的大小来决定的。 堆和栈都是用来存储程序运行时的数据的区域但是它们的分配和使用方式有所不同。
三、堆和栈的位置与分配方式
堆栈位置 栈向低地址扩展从上往下扩展 堆向高地址扩展从下网上扩展 设置堆栈的空间大小时要根据程序需求合理调整如果堆或栈的空间分配不足会导致堆栈溢出程序跑飞。
合理分配堆栈
可以通过编译后生成的后缀为.htm的文件查看所需的栈的大小
如图所示为某程序的.htm文件的内容 最大的栈空间800bytes未知 未知的空间去800的20%就足够了。 那么栈空间的大小可以设置为800160960byte
堆的分配和释放是由程序员手动控制的通常使用malloc()和free()等函数来进行操作。栈空间的大小根据我们在程序中分配的最大的堆的大小来决定。当然最好也预留一些预留如果在程序中分配了100byte那么可以设置堆大小为110bytes。
四、案例分析
打开KEIL工程中的Map File文件后在文件内容最下方可以看到如下统计。 图中各代号含义如下 Code代码存储区。这部分是存放代码的。 RO-Data只读数据区。这部分保存程序中用 const 定义的全局常量数据和字符串。 RW-Data已初始化的读写数据。程序中定义的已经初始化的全局变量和静态变量。 ZI-Data未初始化的读写数据。程序中定义的未初始化的全局变量和静态变量。这部分内容是在程序运行的时候保存在RAM中的。
五、STM32堆栈设置