-
Постов
180 -
Зарегистрирован
-
Посещение
Весь контент kosyak©
-
Не, на указанном 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 тема в В помощь начинающему
Там же в примерах все написано. -
Выбор компаунда для флешки
kosyak© ответил deplen тема в В помощь начинающему
Как поведет себя разъем при вибрациях и возможной конденсации влаги - пока вопрос. -
Выбор компаунда для флешки
kosyak© ответил deplen тема в В помощь начинающему
Я пробовал всю партию microSD еще не напаянных (штук 15) - ни одной калешной карты не было. Скажу больше - карты паяем уже давно (года эдак 3, сделано не меньше 2 тыс устройств) и только ~ полгода назад стройными рядами пошли косяки. Сейчас жду партию с разъемами чтобы проверить. -
Выбор компаунда для флешки
kosyak© ответил deplen тема в В помощь начинающему
Вот здесь я описывал как у нас паяли карты, и какие мы поимели с этим проблемы -
Пайка micro SD карты на плату. Как?
kosyak© ответил 163264 тема в Пайка и монтаж
Расскажу свою историю. Используются у нас microSD карты, ну и как-то так повелось что их паяют (обычным припоем). Паяют по хитрому - сперва припаивают к контактам microSD тонкие проводки (медные жилки какого-то кабеля), потом проводки к контактам на плате и затем это все аккуратно загибается. До недавнего времени проблем с такими устройствами не было. Но вот последние партии стали вести себя неадекватно - из 15 штук устройств 3-4 сбоили во время работы - они могли работать час, два, три а потом оп, и переставать. Причем некоторые после снятия/подачи питания работать продолжали, а некоторые уходили в "глухую оборону" и категорически отрицали наличие у себя файловой системы ( :) ). Вот этих "отказников" я попробовал прогреть феном (ну а что делать то? :) ) при 100 - 150 градусах (это установка температуры на фене - сам корпус карты думаю не нагревался больше 100 градусов) и все они чудесным образом "вспоминали" про свои файловые системы и данные которые там "схоронены". Не удовлетворившись такими странными результатами я бросил подопытных в морозилку обычного холодильника (сколько уж там градусов не проверял) вместе с рабочими картами из той же партии. После часа времени "на остыв" и 20 минут на прогрев при комнатной температуре - калешные карты вновь перестали работать, а изначально рабочие "молотили" без изменений... Так как опыт "практической магии с феном" у меня уже был, я не стесняясь прогрел калешных - и вновь они "опомнились". Какие изменения проходили в картах при нагреве/заморозке я не знаю, но повторяемость этого дела на 4 экземплярах была 100% - После морозилки не работают (инициализируются но на попытку чтения могут заявить, что у меня там везде 0... или [0,0,0,0,...0xFE] в периоде), а после нагрева работоспособность восстанавливалась вплоть до данных, какие были записаны на карту во время предыдущего сеанса работоспособности. Сейчас решили не испытывать судьбу и ставить разъемы, есть только некоторые опасения к вибрациям. Карты были kingston 4gb, куплены одной партией у одного поставщика. Работа - в однобитном SDIO режиме. -
Выбор компаунда для флешки
kosyak© ответил deplen тема в В помощь начинающему
Немного не в тему, но все же вопрос - как паяли карту? -
VslavX, а почему в Вашем порте пропала необходимость в функции tn_int_exit() (заменена пустым макросом)? Как оно теперь работает?
-
void const *argument
kosyak© ответил ViKo тема в Программирование
тогда уж task_start( mb_task, ..., (void const*)&mb_cfg ); :) -
Кириллица для TFT
kosyak© ответил KnightIgor тема в ARM
Вот здесь редактор шрифтов SG Bitmap Font Editor. ver 1.7 Во вложении шрифто, правда, 6х8... Если нужно могу поделиться шрифтами 8х16, 12х24, 16х32 тоже в этом формате. uc1608_font_6x8.zip -
TNKernel, TN_DQUE с размером очереди 0
kosyak© ответил kosyak© тема в Операционные системы
Я поправил так ... #if TN_CHECK_PARAM if(dque == NULL) return TERR_WRONG_PARAM; // такую проверку нужно делать внезависимости от макроса TN_CHECK_PARAM // if(dque->num_entries <= 0) // return TERR_OUT_OF_MEM; #endif flag = ( dque->data_fifo == NULL || dque->num_entries <= 0 || (dque->tail_cnt == 0 && dque->header_cnt == dque->num_entries - 1) || dque->header_cnt == dque->tail_cnt-1); if(flag) return TERR_OVERFLOW; //-- full ...