This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123AE6PM:TM4C12123 GCC 编译器 malloc () FaultISR

Guru**** 2812305 points

Other Parts Discussed in Thread: TM4C123AE6PM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1586374/tm4c123ae6pm-tm4c123-gcc-compiler-malloc-faultisr

器件型号: TM4C123AE6PM

您好、  

我在 fimware 中遇到 malloc 函数问题。 我需要使用它来遵循某些外设传感器的 API 指南、但在调用时会抛出 FaultISR。 我修改了链接器.lds 文件以扩展堆、但错误仍然存在。 在哪里寻找线索?  

这是我的:lds 文件和启动文件的一部分。 芯片是 TM4C123AE6PM。

MEMORY
{
    FLASH (RX) : ORIGIN = 0x00000000, LENGTH = 0x00040000
    SRAM  (WX) : ORIGIN = 0x20000000, LENGTH = 0x00008000
}

REGION_ALIAS("REGION_TEXT",     FLASH);
REGION_ALIAS("REGION_BSS",      SRAM);
REGION_ALIAS("REGION_DATA",     SRAM);
REGION_ALIAS("REGION_STACK",    SRAM);
REGION_ALIAS("REGION_HEAP",     SRAM);
REGION_ALIAS("REGION_ARM_EXIDX",FLASH);
REGION_ALIAS("REGION_ARM_EXTAB",FLASH);

SECTIONS
{
    /* --- USER CONFIG --- */
    _heap_size  = 0x3000;   /* 12 KB heap  malloc(4096) is safe */
    _stack_size = 0x2000;   /* 8 KB stack safe for most apps */

    /* --- Vector Table --- */
    .intvecs (0x00000000) : {
        KEEP(*(.intvecs))
    } > REGION_TEXT

    /* --- Code --- */
    .text : {
        *(.text*)
        *(.rodata*)
        KEEP(*(.init))
        KEEP(*(.fini))
        . = ALIGN(4);
    } > REGION_TEXT

    /* --- Initialized Data --- */
   .data : {
        __data_load__ = LOADADDR(.data);   /* Flash address of .data */
        __data_start__ = .;                /* RAM start */
        *(.data*)
        . = ALIGN(4);
        __data_end__ = .;                  /* RAM end */
    } > REGION_DATA AT > REGION_TEXT

    .bss : {
        __bss_start__ = .;
        *(.bss*)
        *(COMMON)
        . = ALIGN(4);
        __bss_end__ = .;
    } > REGION_BSS

    /* --- HEAP --- */
.heap : {
  __heap_start__ = .;
  . = . + _heap_size;   /* <-- reserves 12 KB in SRAM */
  __HeapLimit = .;      /* <-- end of the heap region */
  end = __heap_start__;
  _end = end;           /* <-- start of heap (for legacy) */
  __end = end;
} > REGION_HEAP

    .stack : {
        _stack_top    = ORIGIN(SRAM) + LENGTH(SRAM);
        _estack       = _stack_top;
        __stack       = _stack_top;
        _stack_bottom = _stack_top - _stack_size;
    } > REGION_STACK

    ASSERT(__HeapLimit <= _stack_bottom, "Heap overlaps stack!")
}

extern uint32_t _estack;

//*****************************************************************************
//
// External declarations for the interrupt handlers used by the application.
//
//*****************************************************************************
// To be added by user

//*****************************************************************************
//
// The vector table.  Note that the proper constructs must be placed on this to
// ensure that it ends up at physical address 0x0000.0000 or at the start of
// the program if located at a start address other than 0.
//
//*****************************************************************************
__attribute__((section(".intvecs")))
void (* const g_pfnVectors[])(void) = {
    (void (*)(void))&_estack,
                                            // The initial stack pointer
    ResetISR,    
...