kosyak© 0 21 января, 2014 Опубликовано 21 января, 2014 · Жалоба VslavX, а почему в Вашем порте пропала необходимость в функции tn_int_exit() (заменена пустым макросом)? Как оно теперь работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
remi700 0 30 января, 2014 Опубликовано 30 января, 2014 · Жалоба Здравствуйте! Из документации непонятно, можно ли при добавлении TNKernel в свой проект добавить tn_arm_disable_interrupts() и tn_arm_enable_interrupts() в уже имеющийся startup_stm32f4xx.s и вызывать tn_tick_int_processing() из обработчика SysTick_Handler() в stm32f4xx_it.c или обязательно заменить его на startup_hardware_init.s из комплекта TNKernel как в примере. Получается очень много исправлений по сравнению с тем что приходится делать например для FreeRTOS (только дописать __weak__ к обработчику SysTick), это нормально или делаю лишнее по незнанию (начал работать с ARM недавно, использовал шаблоны из CMSIS/SPL и FreeRTOS)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Almaz_emb 0 16 июля, 2014 Опубликовано 16 июля, 2014 · Жалоба Доброго времени суток) Безуспешно пытаюсь запустить TNKernel на STM32F401VC из Keil. Порт для Cortex-M4 конфликтует с CMSIS core: .\TNKernelF4\CortexM4F/tn_port_cm4f.h(166): error: #247: function "__get_PRIMASK" has already been defined __get_PRIMASK(void) .\TNKernelF4\CortexM4F/tn_port_cm4f.h(179): error: #247: function "__set_PRIMASK" has already been defined __set_PRIMASK(unsigned long mask) А порт для Cortex-M3 (как я понял из топика вполне работоспособен на Cortex-M4 ) падает в hardfault-handler: #include <al_discovery_led.h> #include <tn.h> //----------- Tasks ---------------------------------------------------------- #define TASK_0_PRIORITY 7 #define TASK_0_STK_SIZE 128 align_attr_start unsigned int task_0_stack[TASK_0_STK_SIZE] align_attr_end; TN_TCB task_0; void task_0_func(void); //---------------------------------------------------------------------------- #define VECTACTIVE (0x000001FF) #define rNVIC_ICSR (*((__IO unsigned int*)0xE000ED04)) void tn_cpu_int_enable() { tn_arm_enable_interrupts(); } //---------------------------------------------------------------------------- int tn_inside_int(void) { if(rNVIC_ICSR & VECTACTIVE) return 1; return 0; } int main( void ) { // tn_arm_disable_interrupts(); al_discovery_LED_init(); tn_start_system(); while(1) { } } void tn_app_init () { task_0.id_task = 0; tn_task_create(&task_0, //-- task TCB task_0_func, //-- task function TASK_0_PRIORITY, //-- task priority &(task_0_stack //-- task stack first addr in memory [TASK_0_STK_SIZE-1]), TASK_0_STK_SIZE, //-- task stack size (in int,not bytes) NULL, //-- task function parameter TN_TASK_START_ON_CREATION //-- Creation option ); } //---------------------------------------------------------------------------- void task_0_func (void) { for(;;) { al_discovery_LED_on(BLUE); tn_task_sleep(128); } } Поделитесь пожалуйста простейшим проектом под Keil) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Almaz_emb 0 16 июля, 2014 Опубликовано 16 июля, 2014 · Жалоба Продолжаю мудохаться. Запустил порт для CortexM4 так, чтобы компилятор не ругался. Проект в прикрепленном файле. Одна задача, которая зажигает светодиод. Падает в hardFault. Прошелся дебагером - проблемное место - функция tn_start_exe() ( достигается конец функции: строчка b . // Never reach this tnkernel.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 19 июля, 2014 Опубликовано 19 июля, 2014 · Жалоба Одна задача, которая зажигает светодиод. Падает в hardFault. Прошелся дебагером - проблемное место - функция tn_start_exe() ( достигается конец функции: строчка b . // Never reach this А какой у Вас PendSV_Handler() работает? Судя по всему из файла startup_stm32f401xx.s, а должен бы из tn_port_cm4f_asm.s. Ну и для нормальной работы TN нужен системный таймер, функция tn_tick_int_processing() должна периодически вызываться из прерывания системного таймера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kosyak© 0 11 сентября, 2014 Опубликовано 11 сентября, 2014 · Жалоба Пробую запустить порт CortexM4F в своем проекте. При TN_SUPPORT_FPU = 0 и TN_SUPPORT_FPU = 1 работает без проблем. А при TN_SUPPORT_FPU = 2 падает в HardFault при первой же встреченной команде работы с FPU. Компилятор IAR 7202. В чем может бть проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prgjz 0 9 октября, 2014 Опубликовано 9 октября, 2014 · Жалоба Кто нибудь добился успеха с TN_SUPPORT_FPU? Прграмма с TN_SUPPORT_FPU > 0 ведёт себя как ревнивая женщина (LPC4088). Неужели нет альтернативы FreeRTOS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 9 октября, 2014 Опубликовано 9 октября, 2014 · Жалоба Неужели нет альтернативы FreeRTOS? scmRTOS? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prgjz 0 9 октября, 2014 Опубликовано 9 октября, 2014 · Жалоба Да, мне нравится она! Использую в старых проектах. Перешёл на TNKernel в частности из-за tn_net. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prgjz 0 10 октября, 2014 Опубликовано 10 октября, 2014 · Жалоба упс... минимальный стек больше при FPU. Заработало но результат как и у kosyak©: При TN_SUPPORT_FPU = 0 и TN_SUPPORT_FPU = 1 работает без проблем. А вот при TN_SUPPORT_FPU = 2 падает в HardFault на инструкции VMOV S0,R0. R0 = 0x320. Уже день пробился безрезультатно. Меня собственно устраивает TN_SUPPORT_FPU = 1 :) Не подскажет ли кто как в EWARM заставть компилятор для определённой функции не делать код для FPU (#pragma например)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LightElf 0 30 октября, 2014 Опубликовано 30 октября, 2014 · Жалоба Не подскажет ли кто как в EWARM заставть компилятор для определённой функции не делать код для FPU (#pragma например)? Попробуйте так. Выносите функцию в отдельный файл, включаете файл в проект, в опциях указываете компилятору ключ командной строки --core=Cortex-M4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться