Сократив ld-скрипт до вида
CODE
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K
}
_estack = ORIGIN(RAM) + LENGTH(RAM);
ENTRY(Reset_Handler)
SECTIONS
{
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Interrupt vectors */
KEEP(*(.cfmconfig)) /* Freescale configuration words */
*(.after_vectors .after_vectors.*) /* Startup code and ISR */
. = ALIGN(4);
} >FLASH
.text : { *(.text*) } > FLASH
.bss : { *(.bss*) } > RAM
}
Указатели стали работать верно. Reset_Handler выглядит
CODE
void __attribute__ ((section(".after_vectors"),naked))
Reset_Handler(void)
{
asm volatile
(
" b main \n"
:
:
:
);
}
Цитата
Вообще-то для начала неплохо было бы посмотреть на адреса, хранящиеся в этих указателях.
Единственное что можно сказать что этот указатель не NULL и не указывает на функцию.
Цитата
Такая проблема только с указателями, или и с другими глобальными переменными?
Со всеми глобальными переменными.