pic单片机如何减少堆栈使用

pic单片机如何减少堆栈使用,第1张

1 设置堆栈空间大小
在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小。一般默认的启动代码中,Stack栈的大小为:0x400(1024Byte),Heap堆的大小为:0x200(512Byte)。
这也是为什么一个基础的工程编译后,RAM的空间也占用了16K左右的原因,因为堆栈的空间均分配在RAM中,可在编译的map文件中查看RAM资源占用的情况。
若工程中使用的局部变量较多,定义的数据长度较大时,若不调整栈的空间大小,则会导致程序出现栈溢出,程序运行结果与预期的不符或程序跑飞。这时我们就需要手动的调整栈的大小。
当工程中使用了malloc动态分配内存空间时,这时分配的空间就为堆的空间。所以若默认的堆空间大小不满足工程需求时,就需要手动调整堆空间的大小。
1 直接在启动文件中修改堆栈空间的大小,如图1所示的位置;
2 打开启动文件,点击下方Configuration Wizard,可在Option的设置框中设置堆栈空间的大小。

2 相关理论补充
bss段:
bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。
bss是英文Block Started by Symbol的简称。
bss段属于静态内存分配。
data段:
数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。
数据段属于静态内存分配。
text段:
代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。
这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。
在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
堆(heap):
堆是用于存放进程运行中被动态分配的内存段,它的大

今天在windows安装完redis启动时遇到一个错误:

大概意思是:没有足够的可用空间,可以增加系统的大小分页文件,或减少Redis的堆的大小。
解决方法:
使用--maxheap标志。
可以再启动命令后面加maxheap参数重新分配堆大小。
可以修改rediswindowsconf中maxheap的值为200m,这样问题就解决了。

1、首先打开s文件找到Heap_Size将其调大。
2、其次根据自己的实际需求增大堆长度,也可以直接调到最大。
3、最后配置NVIC(中断优先级)NVIC_IRQChannel,在stm32f10xh中找到。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13404845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-29
下一篇 2023-07-29

发表评论

登录后才能评论

评论列表(0条)

保存