|
Вышла TNKernel v.2.6 |
|
|
|
Mar 1 2011, 19:00
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937

|
TNKernel v.2.6 имеет порты ARM, Cortex-M3 и новый порт TI MSP430x. Переключение контекста в TNKernel v.2.6 работает заметно быстрее (порты ARM, Cortex-M3) по сравнению с предыдущими версиями. The mutex ceiling protocol в версии 2.6 более "lightweight" по сравнению с предыдущими версиями - в соревновании "скорость против features" победила скорость (на данный момент). Код mutex ceiling protocol в версии 2.6 основывается на коде. написанном Vyacheslav Ovsiyenko для его версии TNKernel. Спасибо Vyacheslav Ovsiyenko, Audrius Urmanavicius, Alex Borisov, Michael Fisher за их улучшения и замечания. http://www.tnkernel.com
|
|
|
|
|
Mar 3 2011, 08:48
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937

|
Цитата(dENIM @ Mar 2 2011, 16:14)  под мелкочип пока не предвидится? Это надо обращаться к Александру Борисову.
|
|
|
|
|
Mar 26 2011, 09:34
|

Участник

Группа: Участник
Сообщений: 48
Регистрация: 7-09-07
Из: Наб.Челны
Пользователь №: 30 364

|
Цитата(aaarrr @ Mar 25 2011, 23:16)  Вот как раз для ARM7 и Cortex и нужно выравнивание на 8. Для чего? Насколько критично? Хотелось сделать странное так: Код int RTOS_TaskCreate(void (*func)(void *param), int stack_size, int priority) { TN_TCB *TCB; unsigned int *Stack; TCB = malloc(sizeof(*TCB)); Stack = malloc(sizeof(*Stack) * stack_size); TCB->id_task = 0; return tn_task_create(TCB, func, priority, Stack+stack_size-1, stack_size, NULL/*TCB or Stack*/, TN_TASK_START_ON_CREATION); } но выяснилось, что malloc и так на 8 выравнивает.
|
|
|
|
|
Apr 6 2011, 16:07
|
Частый гость
 
Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205

|
QUOTE (aaarrr @ Apr 6 2011, 19:18)  А какие с ним трудности? EMAC у LM3S простой совсем. Трудности не с пониманием EMAC у LM3S, а с прикручиванием его к TNNet. Я не совсем понимаю, что от драйвера требуется.
|
|
|
|
|
Apr 29 2011, 03:17
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (yuri_t @ Mar 2 2011, 01:00)  TNKernel v.2.6 имеет порты ARM, Cortex-M3 и новый порт TI MSP430x. вопрос по функции tn_event_wait при вызове функции, если ожидаемые флаги не установлены, т.е. функция возвращается с параметром TERR_TIMEOUT, не возвращает значение в параметр " * p_flags_pattern". имхо это не совсем правильно. приведу пример: мне нужно быстро разбудить задачу по одному из битов битовой маски флага, а по другому не критично, например достаточно его проверять каждые 100 системных тиков. поэтому я вызываю функцию в следующем виде: CODE rc = tn_event_wait(&event_all_uart, EVENT_1, TN_EVENT_WCOND_OR, &flag, 100); // ожидалось, что будет работать так if (flag & EVENT_2) {...} на самом деле для проверки некритичного флага EVENT_2, мне придется дополнительно вызывать функцию tn_event_wait_polling с маской 0xFFFFFFFF предварительно обнулив флаг, т.е. совершаю несколько дополнительных неоправданных действий, тем более что переменная все равно создана, занимает память CODE rc = tn_event_wait(&event_all_uart, EVENT_1, TN_EVENT_WCOND_OR, &flag, 100);
flag = 0; rc = tn_event_wait_polling(&event_all_uart, 0xFFFFFFFF, TN_EVENT_WCOND_OR, &flag); if (flag & EVENT_1) {...} if (flag & EVENT_2) {...} еще ситуация усугубляется, если флаг был выставлен, затем очищен функцией tn_event_clear, но перед вызовом функции n_event_wait не обнулен, получается что по таймауту в переменной flag либо остается прошлое значение, либо вообще случайное. и флаги которые не вызывают "подъем" задачи мы вообще не видим
|
|
|
|
|
May 2 2011, 08:54
|
Частый гость
 
Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937

|
Цитата(LightElf @ Apr 7 2011, 09:47)  1) Правильно ли я понимаю, что при отправке IP пакета он будет состоять из минимум двух TN_MBUF, в одном заголовок Ethernet, во втором - сам пакет? 2) Смысл существования HI_BUF, если стек всяко использует цепочку из MID_BUF для больших пакетов? Специфика контроллера Ethernet у LPC? 3) Вы возможно сталкивались с контроллером Ethernet у LM3S. Нет ли у вас идей, как лучше его подружить с TN-Net? 1) Да 2) HI_BUF нужен только для приема - чтобы не городить цепочку DMA буферов(длина принимаемого пакета еще неизвестна, а память под него выделять уже надо - поэтому здесь используется HI_BUF размером MTU) 3) C Ethernet у LM3S не работал Цитата(dac @ Apr 29 2011, 06:17)  мне нужно быстро разбудить задачу по одному из битов битовой маски флага, а по другому не критично, например достаточно его проверять каждые 100 системных тиков. Ожидание события в синхронизационном элементе ( в том числе и Event) надо использовать только тогда, когда по этому событию задача должна проснуться и получить управление ( т.е. проверять флаг в Event каждые 100 системных тиков идеологически неверно - Event не предназначен для такого использования). Почему бы в этом случае не использовать просто глобальную переменную и проверять ее по timeout Вашего Event ?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|