gpt4 book ai didi

c++ - Contiki 中的内存溢出

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:50 25 4
gpt4 key购买 nike

我正在开发一个需要 msp430 数学函数的应用程序。使用 powf、sqrt 等函数时,会发生内存溢出 (ROM)。一个这样的例子是,当我使用这个 float i 变量而不使用静态时,我的代码可以工作。 enter image description here

#include "contiki.h"

#include <stdio.h> /* For printf() */
#include <math.h>
#define DEBUG DEBUG_NONE
/*---------------------------------------------------------------------------*/
PROCESS(hello_world_process, "Hello world process");
AUTOSTART_PROCESSES(&hello_world_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(hello_world_process, ev, data)
{
PROCESS_BEGIN();
float i;
i = 2.1;
printf("Hello, world\n");
printf("%i\n", (int)powf(10,i));
PROCESS_END();
}
/*---------------------------------------------------------------------------*/

但是在第二种情况下它不起作用......

#include "contiki.h"

#include <stdio.h> /* For printf() */
#include <math.h>
#define DEBUG DEBUG_NONE
static float i;
/*---------------------------------------------------------------------------*/
PROCESS(hello_world_process, "Hello world process");
AUTOSTART_PROCESSES(&hello_world_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(hello_world_process, ev, data)
{
PROCESS_BEGIN();
i = 2.1;
printf("Hello, world\n");
printf("%i\n", (int)powf(10,i));
PROCESS_END();
}
/*---------------------------------------------------------------------------*/

建议的答案是升级msp430-gcc,但这可能会导致系统不稳定。还有其他有效处理内存溢出的建议吗?

可以遵循什么方法来有效地管理嵌入式系统中的内存。

最佳答案

在第一种情况下,符号 i 是局部的(在函数的堆栈帧上),因此编译器能够优化函数调用并计算 powf 的值(10, 2.1) 在编译时。在第二种情况下,符号 i 在函数外定义。

优化器看不到它没有被主进程外部的一些其他代码修改。因此它不会优化 powf ,您最终会尝试链接浮点功能。由于 msp430 在硬件中不支持浮点,因此链接器最终会尝试向可执行文件中添加大量二进制代码。可执行文件太大,链接失败。

升级编译器并不能神奇地解决问题。你需要释放一些内存。遵循 Contiki 配置指南:https://github.com/contiki-os/contiki/wiki/Reducing-Contiki-OS-firmware-size

关于c++ - Contiki 中的内存溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55702462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com