-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Description
Target:
NUMAKER_PFM_M487
Toolchain:
IAR
mbed-os:
0a832dd (HEAD -> master, origin/master, origin/HEAD) Merge pull request #9051 from michalpasztamobica/esp8266_busy_signal
The test item mbed-os-tests-mbed_platform-crash_reporting
/ mbed-os-tests-mbed_platform-crash_reporting
is passed in ARM/ARMC6/GCC_ARM, but failed in IAR. Per my checking, the crash data ram base/limit __CRASH_DATA_RAM_START__
/__CRASH_DATA_RAM_END__
calculated in M487.icf
are incorrect because IAR linker doesn't arrange memory as simply expected.
In mbed-os/targets/TARGET_NUVOTON/TARGET_M480/device/TOOLCHAIN_IAR\M487.icf
:
/* Define Crash Data Symbols */ define exported symbol __CRASH_DATA_RAM_START__ = __ICFEDIT_region_IRAM_start__ + __ICFEDIT_size_cstack__ + __ICFEDIT_size_intvec__; define exported symbol __CRASH_DATA_RAM_END__ = __ICFEDIT_region_IRAM_start__ + __ICFEDIT_size_cstack__ + __ICFEDIT_size_intvec__ + __ICFEDIT_size_crash_data__;
In mbed-os/platform/mbed_crash_data_offsets.h
:
#if MBED_CONF_PLATFORM_CRASH_CAPTURE_ENABLED #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) extern uint32_t Image$$RW_m_crash_data$$ZI$$Base[]; extern uint32_t Image$$RW_m_crash_data$$ZI$$Size; #define __CRASH_DATA_RAM_START__ Image$$RW_m_crash_data$$ZI$$Base #define __CRASH_DATA_RAM_SIZE__ Image$$RW_m_crash_data$$ZI$$Size #elif defined(__ICCARM__) extern uint32_t __CRASH_DATA_RAM_START__[]; extern uint32_t __CRASH_DATA_RAM_END__[]; #define __CRASH_DATA_RAM_SIZE__ (__CRASH_DATA_RAM_END__ - __CRASH_DATA_RAM_START__) #elif defined(__GNUC__) extern uint32_t __CRASH_DATA_RAM_START__[]; extern uint32_t __CRASH_DATA_RAM_END__[]; #define __CRASH_DATA_RAM_SIZE__ (__CRASH_DATA_RAM_END__ - __CRASH_DATA_RAM_START__) #endif /* defined(__CC_ARM) */
If I change __CRASH_DATA_RAM_START__
/__CRASH_DATA_RAM_END__
as below, the test is passed. But this change cannot apply to all targets because CRASH_DATA_RAM
is defined only in NUMAKER_PFM_M487 target or some.
#elif defined(__ICCARM__) extern uint32_t CRASH_DATA_RAM$$Base[]; extern uint32_t CRASH_DATA_RAM$$Limit[]; #define __CRASH_DATA_RAM_START__ CRASH_DATA_RAM$$Base #define __CRASH_DATA_RAM_END__ CRASH_DATA_RAM$$Limit #define __CRASH_DATA_RAM_SIZE__ (__CRASH_DATA_RAM_END__ - __CRASH_DATA_RAM_START__)
Besides, checking mbed-os/platform/mbed_crash_data_offsets.h
, the unit of CRASH_DATA_RAM_SIZE doesn't match across all toolchains. In ARM/ARMC6, it is byte, but in IAR/GCC_ARM, it is word.
Issue request type
[ ] Question
[ ] Enhancement
[x] Bug