Запуск приложения C с адреса, отличного от 0

У меня есть два приложения, одно только запускает второе приложение по адресу 0x20000, которое я могу отлаживать в первом приложении, и оно достигает строки, которая перенаправляет на 0x20000 адрес.

Код из первого приложения выглядит так:

uint32_t a_StartAddress = (uint32_t)(uint32_t *)0x20000;
((void (*)(void))a_StartAddress)();

Оба приложения разработаны в CCS для TMS570LS033x, но когда приложение запускается в 0x20000Ничего не произошло. Есть ли параметр, который мне не хватает, чтобы код начинался с другого адреса, чем 0? Рад предложениям, заранее спасибо

(Во флеш-памяти достаточно места для обеих программ, приложение запускается, если я прошиваю его по адресу 0x00000).

Разборка по коду

  280 uint32_t a_StartAddress = (uint32_t)(uint32_t *)0x20000;
  00005618: E3A0C802 mov r12, #0x20000
  0000561c: E58DC010 str r12, [sp, #0x10]

  281 ((void (*)(void))a_StartAddress)();
  00005620: E59DC010 ldr r12, [sp, #0x10]
  00005624: E12FFF3C blx r12

sys_link.cmd

MEMORY
{
VECTORS (X) : origin=0x00000000 length=0x00000020 vfill = 0xFFFFFFFF
FLASH0 (RWX) : origin=0x00000020 length=0x0001FFE0 fill = 0xFFFFFFFF 
STACKS (RW) : origin=0x08000000 length=0x00001500
SRAM (RWX) : origin=0x08001500 length=0x00006B00
}

SECTIONS
{
.intvecs : {} > VECTORS

.TI.ramfunc : {} load=FLASH0, run=SRAM, table(BINIT)

.text : {} palign=8 > FLASH0
.const : {} palign=8 > FLASH0
.cinit : {} palign=8 > FLASH0
.pinit : {} palign=8 > FLASH0
.data : {} > SRAM
.bss : {} > SRAM
.sysmem : {} > SRAM
.binit : {} > FLASH0
}

1 ответ

Я исправил это, проблема была в файле компоновщика! мне нужно было изменить файл компоновщика как таковой:

MEMORY
{
VECTORS (X) : origin=0x00020000 length=0x00000020 vfill = 0xFFFFFFFF
FLASH0 (RWX) : origin=0x00020020 length=0x0001FFE0 fill = 0xFFFFFFFF 
STACKS (RW) : origin=0x08000000 length=0x00001500
SRAM (RWX) : origin=0x08001500 length=0x00006B00
Другие вопросы по тегам