Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: порт Cortex-M4 + IAR
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
Anatoly74
Знатоки, поделитесь, плз, портом Cortex-M4 для IAR. Будет ли работать для М4 порт IAR Cortex-M3?
AHTOXA
Цитата(Anatoly74 @ Mar 10 2015, 16:02) *
Будет ли работать для М4 порт IAR Cortex-M3?

Будет, если компилировать для M3.
Anatoly74
Пытаюсь перетащить с 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]. Подскажите, плз., как победить это?
AHTOXA
Напишите R0 вместо %[stack]. Это параметр функции.
Советую вам взять порт IAR для M3, и поправить в нём что потребуется. Там немного.
Anatoly74
Цитата(AHTOXA @ Mar 31 2015, 15:13) *
Напишите R0 вместо %[stack]. Это параметр функции.
Советую вам взять порт IAR для M3, и поправить в нём что потребуется. Там немного.

Большое спасибо за помощь
prgjz
Получился у кого порт для 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

и всё пошло!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.