zltigo 0 21 июля, 2009 Опубликовано 21 июля, 2009 · Жалоба 1. Нет. 2. А там ничего нет сверх того, что есть в Online. 3. Если горько надо Offline - сдерите копию сайта. На этом форуме такое несколько раз проделывали - можете и поискать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexMad 0 23 июля, 2009 Опубликовано 23 июля, 2009 · Жалоба Co-routines хороший функционал. Это реализация кооперативной RTOS внутри каждой задачи. Co-Routine это все задачи равны и передают управление друг другу. Tasks - одна задача выполняет роль операционной системы которая переключает задачи. А как Co-Routine относится к ресурсам по сравнению с Tasks? Ноги вопроса растут из примеров на АВР и АРМ. в Примерах с LPC используется Tasks. Я, вроде бы, разобрался, как там и что можно делать. А вот в примерах с АВР используется Co-Routine и при этом простое переключение Set the definition configUSE_PREEMPTION within Demo/AVR_ATMega323_WinAVR/FreeRTOSConfig.h to 1 to use pre-emption or 0 to use co-operative. и перенос задачи из проекта на АРМ в проект с АВР не прокатывает. И вот вопрос - пример на АВР сделан Co-Routine просто чтобы показать возможности и мне нужно его покурить, чтобы запустить Tasks, или, все-таки, для АВР стоит использовать Co-Routine? Хм... поторопился я. Там и Tasks тоже есть и они работают... а моя задача почему-то не стартует... будем искать где прокололся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asd6715 0 25 июля, 2009 Опубликовано 25 июля, 2009 · Жалоба Не ругайте строго не могу найти функцию. В uc/os-II есть такая функция как OSSchedLock, которая отключает диспетчеризацию. Есть ли во freeRTOS аналог этой функции?? Я искал - не нашел, так это из-за того что её там нет или плохо искал... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 июля, 2009 Опубликовано 25 июля, 2009 · Жалоба плохо искал... Не полохо, а вообще не искали :( Раздел Kernel Control void vTaskSuspendAll( void ); Suspends all real time kernel activity while keeping interrupts (including the kernel tick) enabled. After calling vTaskSuspendAll () the calling task will continue to execute without risk of being swapped out until a call to xTaskResumeAll () has been made. API functions that have the potential to cause a context switch (for example, vTaskDelayUntil(), xQueueSend(), etc.) must not be called while the scheduler is suspended. Название, правда, неудачное, что и сам Автор признал используя в коммерческих версиях систем вместо этого разумные названия: vTaskSuspendScheduler()/xTaskResumeScheduler(); Я у себя тоже переименовал :) /* zlt[ The function name is a little misleading, which is why, as part of the code review, the functions vTaskSuspendAll() and xTaskResumeAll() were renamed vTaskSuspendScheduler() and xTaskResumeScheduler() respectively for the SafeRTOS code void vTaskSuspendAll( void ); */ extern volatile unsigned portBASE_TYPE uxSchedulerSuspended; #define vTaskSuspendScheduler() { ++uxSchedulerSuspended; } // ]zlt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asd6715 0 25 июля, 2009 Опубликовано 25 июля, 2009 · Жалоба Чесно признаюсь, просто прочитал название функции, подумал что это не то, и даже описание не читал, соррии Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrovichs 0 3 августа, 2009 Опубликовано 3 августа, 2009 · Жалоба Не обьясните как толком пользоваться функцией vTaskStartTrace? Я прописал #define configQUEUE_REGISTRY_SIZE 10 #define configUSE_TRACE_FACILITY 1 Далее вызвал vTaskStartTrace(TraceBuffer, 2000); В эту область данных в двоичном формате начались записываться некие данные, как прочитать не понятно. convtrce.exe я так нигде и не нашел. Как получить из этой функции информацию подобную вот это? Объясните если кто вкурсе, плз. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 3 августа, 2009 Опубликовано 3 августа, 2009 · Жалоба Как получить из этой функции информацию подобную вот это? Так это к трассировке никакого отношения не имеет, это просто текущее состояние системы - там в буферок сразу текст сбрасывается. Криво :( В оригинале что-то типа prvListTaskWithinSingleList() смотрите. При наличии консоли, сразу в нее буфер печати и сбрасывать. У меня там еше сразу занятость стека проверяется и адрес TCB выдается. Выглядит так: ps R 5 Console tcb=40003FB0:96/480 R 0 Idle tcb=400041D8:380/600 B 3 LAPD2 tcb=40005D80:144/480 B 3 LAPD3 tcb=40006540:144/480 B 3 LAPD1 tcb=400055C0:176/480 B 4 SPItx tcb=40004758:136/200 B 3 LAPD0 tcb=40004E00:208/480 B 2 HDLC0TX tcb=40004C28:152/400 B 2 HDLC1TX tcb=400053E8:152/400 B 2 HDLC2TX tcb=40005BA8:152/400 B 2 HDLC3TX tcb=40006368:152/400 B 1 Checker tcb=40006768:96/120 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
head_sk 0 3 августа, 2009 Опубликовано 3 августа, 2009 · Жалоба Что-то подобное что есть на этой картинке можно получить с помощью вызова функции vTaskList(). Вообще task.c небольшой файлик, советую с ног до головы его просмотреть :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
asd6715 0 3 августа, 2009 Опубликовано 3 августа, 2009 · Жалоба Извините что задаю очень глупые вопросы. Но я ещё новичек, как не стараюсь понять некоторые вопросы так и не получаеться. Надеюсь на вашу помощь. Я не могу понять чем отличаються функции с концовкой "fromISR" и без этой концовки? А то я использую у себя в прерывании xSemaphoreGive и все вроде бы прекрасно работает :) В чем разница и в чем загвоздка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Faradey 0 5 августа, 2009 Опубликовано 5 августа, 2009 · Жалоба сказать больше чем это сделали разработчик(-и) FreeRTOS сложно, поэтому прочтите сами: API Usage - light weight Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
salvian 0 27 августа, 2009 Опубликовано 27 августа, 2009 · Жалоба когда стартует шэдулер отключаются прерывания, а вот когда они включаются я найти не смог. не подскажет ли кто когда это происходит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 27 августа, 2009 Опубликовано 27 августа, 2009 · Жалоба При восстановлении контекста в vPortISRStartFirstTask. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mariaoi 0 17 октября, 2009 Опубликовано 17 октября, 2009 · Жалоба Здравствуйте. Не подскажите как во freeRTOS определить максимальный размер стека который занимал каждый процесс на протяжении своей работы? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
head_sk 0 17 октября, 2009 Опубликовано 17 октября, 2009 · Жалоба В свое время для себя писал: #if ( configUSE_TRACE_FACILITY == 1 ) static void prvGetMaxStackSize( unsigned portLONG *pcWriteBuffer, xList *pxList, signed portCHAR cStatus ) { volatile tskTCB *pxNextTCB, *pxFirstTCB; unsigned portSHORT usStackRemaining; /* Write the details of all the TCB's in pxList into the buffer. */ listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList ); do { listGET_OWNER_OF_NEXT_ENTRY( pxNextTCB, pxList ); usStackRemaining = usTaskCheckFreeStackSpace( ( unsigned portCHAR * ) pxNextTCB->pxStack ); if(usStackRemaining < pcWriteBuffer[pxNextTCB->uxTCBNumber]) pcWriteBuffer[pxNextTCB->uxTCBNumber] = usStackRemaining; } while( pxNextTCB != pxFirstTCB ); } #endif #if ( configUSE_TRACE_FACILITY == 1 ) void vStackListWithMaxUsedSize( unsigned portLONG *pcWriteBuffer ) { unsigned portBASE_TYPE uxQueue; vTaskSuspendAll(); { pcWriteBuffer[ 0 ] = ( signed portCHAR ) 0x00; strcat( ( portCHAR * ) pcWriteBuffer, ( const portCHAR * ) "\r\n" ); uxQueue = uxTopUsedPriority + 1; do { uxQueue--; if( !listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxQueue ] ) ) ) { prvGetMaxStackSize( pcWriteBuffer, ( xList * ) &( pxReadyTasksLists[ uxQueue ] ), tskREADY_CHAR ); } }while( uxQueue > ( unsigned portSHORT ) tskIDLE_PRIORITY ); if( !listLIST_IS_EMPTY( pxDelayedTaskList ) ) { prvGetMaxStackSize( pcWriteBuffer, ( xList * ) pxDelayedTaskList, tskBLOCKED_CHAR ); } if( !listLIST_IS_EMPTY( pxOverflowDelayedTaskList ) ) { prvGetMaxStackSize( pcWriteBuffer, ( xList * ) pxOverflowDelayedTaskList, tskBLOCKED_CHAR ); } #if( INCLUDE_vTaskDelete == 1 ) { if( !listLIST_IS_EMPTY( &xTasksWaitingTermination ) ) { prvGetMaxStackSize( pcWriteBuffer, ( xList * ) &xTasksWaitingTermination, tskDELETED_CHAR ); } } #endif #if ( INCLUDE_vTaskSuspend == 1 ) { if( !listLIST_IS_EMPTY( &xSuspendedTaskList ) ) { prvGetMaxStackSize( pcWriteBuffer, ( xList * ) &xSuspendedTaskList, tskSUSPENDED_CHAR ); } } #endif } xTaskResumeAll(); } #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KolyanV 0 22 октября, 2009 Опубликовано 22 октября, 2009 · Жалоба Здравствуйте. Не подскажите как во freeRTOS определить максимальный размер стека который занимал каждый процесс на протяжении своей работы? Спасибо! Смотрите описание функции API uxTaskGetStackHighWaterMark() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться