Перейти к содержанию
    

порт Cortex-M4 + IAR

Знатоки, поделитесь, плз, портом Cortex-M4 для IAR. Будет ли работать для М4 порт IAR Cortex-M3?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пытаюсь перетащить с GCC на IAR порт Cortex-M4.

В файле OS_Target_cpp.cpp, в подпрограмме os_start(stack_item_t *sp) есть такой код:

asm volatile (
#if (defined __SOFTFP__)  // code without FPU
        "    LDR     R4, [%[stack], #(4 * 14)] \n" // Load process entry point into R4
        "    ADD     %[stack], #(4 * 16)       \n" // emulate context restore
#else
          "    LDR     R4, [%[stack], #(4 * 15)] \n" // Load process entry point into R4
        "    ADD     %[stack], #(4 * 17)       \n" // emulate context restore
#endif

IAR ругается на %[stack]. Подскажите, плз., как победить это?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Напишите R0 вместо %[stack]. Это параметр функции.

Советую вам взять порт IAR для M3, и поправить в нём что потребуется. Там немного.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Напишите R0 вместо %[stack]. Это параметр функции.

Советую вам взять порт IAR для M3, и поправить в нём что потребуется. Там немного.

Большое спасибо за помощь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Получился у кого порт для IAR M4?

У меня для LPC1769 без проблем...

А вот LPC4087 только без FPU работает.

Посмотрел в scmRTOS\port\cortex\mx-gcc\

и сделал изменеимя в os_target_asm.s

 

os_start

......

#if __ARMVFP__

LDR R4, [R0, #(4 * 15)] // Load process entry point into R4

ADD R0, R0, #(4 * 17) // emulate context restore

#else

LDR R4, [R0, #(4 * 14)] // Load process entry point into R4

ADD R0, R0, #(4 * 16) // emulate context restore

#endif

 

вообще не стартует.

Если

LDR R4, [R0, #(4 * 14)] и ADD R0, R0, #(4 * 16) оставить

то TProc1::exec() вызывается правильно но PendSV_Handler

при первом вызове в конце в летит и переключение не происходит.

 

 

 

 

 

 

Моя ошибка - не доглядел...

Изменил в os_target.cpp

 

#ifdef __ARMVFP__

StackPointer -= 6; // emulate "push LR,R12,R3,R2,R1,R0"

*(--StackPointer) = 0xFFFFFFFDUL; // exc_return: Return to Thread mode, floating-point context inactive, execution uses PSP after return.

StackPointer -= 8; // emulate "push R4-R11"

#else

StackPointer -= 14; // emulate "push R14,R12,R3,R2,R1,R0,R11-R4"

#endif

 

и всё пошло!!!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...