0

在 eclipse 中使用 gcc-arm-none-eabi-5_42016q3-20160926 工具链。处理器:STM32F030 我有一个 3 行程序,它在任何硬件初始化之前启动以隔离问题:

    int a;
    char * num="3";
    memset(0x20000970,0XAA, 0x20001f00-0x20000970);
    sscanf(num, "%i",&a);

我已将 RAM 设置为 0XAA,因此我可以看到被破坏的内容,为堆栈留出足够的空间。在 memset 指令之后,堆栈指针位于 0X20001F78,内存为 0XAA,直到 0X20001F00,正如预期的那样。在我执行 sscanf 函数后,堆栈指针回到 0X20001F78 但是内存一直被破坏到 0X20001BB4 这让我认为这个简单的调用占用了将近 1K 的堆栈,或者在例程中存在一些其他错误。我已停止使用此功能,但很好奇这是否是预期行为?此外,是否有一个在嵌入式系统中应该避免的 C 函数列表,这让我感到惊讶,但通过搜索我发现我并不孤单。

4

0 回答 0