-
Постов
180 -
Зарегистрирован
-
Посещение
-
Не, на указанном Juno SR2 как то не пошло... а вот на eclipse-cpp-luna-SR2 все заработало.
-
Оптимизации чего? В предложенном мной варианте Eclipse использует компилятор IAR.
-
Eclipse + Вот этот плагин и уже можно жить. И даже отлаживать, правда только на ограничееном числе отладчиков (J-Link работает, ST-Link, к сожалению, нет). Есть там такая возможность, как импорт проекта из среды IAR - т.е. создаем проект в IAR (добавляем в него необходимые файлы) и при импорте в Eclipse указываем что импортировать необходимо только ссылки на файлы. Имеем два проекта - один IAR, второй Eclipse, которые содержат одни и те же файлы. При необходимости добавить файл в проект - добавляем его в IAR, затем в Eclipse делаем "Update imported project" и добавленный файл появляется в проекте Eclipse. Т.о. пишем код в редакторе Eclipse, отлаживаем здесь же, но если не хватает возможностей отладчика переключаемся на IAR.
-
Все разобрался. Эта проблема присуща версии 2.6 (про более ранние не знаю). По ссылке лежит как раз версия 2.6 (почему я решил что там 2.7 фик его знает). Ну а в 2.7 такое поведение event'ов было исправлено. Хотелось бы попросить автора чтобы он порт для CortexM4f тоже поправил на версию RTOS 2.7...
-
А у кого выше приоритет? у "MAIN Run"? Поделись файлом tn_event.c из своей сборки пожалуйста.
-
Хм... Я использую v2.7 порт для CortexM4. Во вложении файл с тестом. Вывод в TRACE такой [0] - before wait [1] - before wait [2] - before wait before evf set after evf set [0] - after wait Если не сложно не могли бы Вы запустить у себя этот тест. evftest.zip
-
Попробуйте так. void task(void *p) { int err; for(;;) { unsigned int evflags; err = tn_event_wait(&evftest, 1, TN_EVENT_WCOND_AND, &evflags, TN_WAIT_INFINITE); TRACE("WAIT END %d, %d", (uint32_t)p, err); tn_task_sleep(TN_WAIT_INFINITE); } } void tn_test(void) { //где то в другой задаче tn_event_create(&evftest, TN_EVENT_ATTR_MULTI, 0); // запускаем 4 задачи create_task(task, 1); create_task(task, 2); create_task(task, 3); create_task(task, 4); my_sleep(100); tn_event_set(&evftest, (1<< 0) | (1<< 1) | (1<< 2) | (1<< 3) ); tn_task_sleep(TN_WAIT_INFINITE); }
-
а можно пример кода как Вы проверяли?
-
Это у меня псевдо код. В реале там есть задержка средствами RTOS. Все задачи точно успевают вызвать wait_event. А вот просыпается потом только первая и них. Интересно какое поведение у event в других RTOS?
-
Не не не. У меня вопрос скорее к RTOS - насколько я понимаю запускаться должны все ожидающие задачи.
-
void task(p) { for(;;) { unsigned int evflags; if( tn_event_wait(&evftest, 1,TN_EVENT_WCOND_AND, &evflags, TN_WAIT_INFINITE) == TERR_NO_ERR ) { TRACE("WAIT END %d\n", (uint32_t)p); } } } ... ///где то в другой задаче tn_event_create(&evftest, TN_EVENT_ATTR_MULTI, 0); // запускаем 4 задачи create_task(task(0)); create_task(task(1)); create_task(task(2)); create_task(task(3)); tn_event_set(&evftest, 1); for(;;); .... В рабочее состояние перейдет первая созданная задача. Как сделать чтобы все задачи перешли в рабочее состояние?
-
Пробую запустить порт CortexM4F в своем проекте. При TN_SUPPORT_FPU = 0 и TN_SUPPORT_FPU = 1 работает без проблем. А при TN_SUPPORT_FPU = 2 падает в HardFault при первой же встреченной команде работы с FPU. Компилятор IAR 7202. В чем может бть проблема?
-
Вопрос по FATFS от CHAN(C)
kosyak© ответил Halfback тема в В помощь начинающему
... FRESULT res; FILINFO fno; DIR dir; int i; char *fn; /* This function is assuming non-Unicode cfg. */ // здесь устанавливается указатель fno.lfname на пользовательский буфер. // fatfs буфер под длинные имена файлов не выделяет. #if _USE_LFN static char lfn[_MAX_LFN + 1]; /* Buffer to store the LFN */ fno.lfname = lfn; fno.lfsize = sizeof lfn; #endif ... res = f_readdir(&dir, &fno); ... #if _USE_LFN fn = *fno.lfname ? fno.lfname : fno.fname; #else fn = fno.fname; #endif ... fno.lfname устанавливает в пользовательском коде. -
Вопрос по FATFS от CHAN(C)
kosyak© ответил Halfback тема в В помощь начинающему
Там же в примерах все написано.