реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Вышла TNKernel v.2.6
yuri_t
сообщение Mar 1 2011, 19:00
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
dENIM
сообщение Mar 2 2011, 12:14
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 226
Регистрация: 13-03-07
Из: Севастополь
Пользователь №: 26 137



под мелкочип пока не предвидится?
Go to the top of the page
 
+Quote Post
yuri_t
сообщение Mar 3 2011, 08:48
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 24-08-05
Пользователь №: 7 937



Цитата(dENIM @ Mar 2 2011, 16:14) *
под мелкочип пока не предвидится?


Это надо обращаться к Александру Борисову.


Go to the top of the page
 
+Quote Post
Intel4004
сообщение Mar 25 2011, 20:09
Сообщение #4


Участник
*

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



А насколько критично выравнивание стеков на 8?
В исходниках не нашел ничего , что мне запрещает вместо

#if defined (__ICCARM__) // IAR ARM
#pragma data_alignment=8
#endif
align_attr_start unsigned int task_xxx_stack[TASK_XXX_SIZE] align_attr_end;

написать просто

unsigned int task_xxx_stack[TASK_XXX_SIZE];

Получится выравнивание на 4 (для ARM7 и Cortex).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 25 2011, 20:16
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Intel4004 @ Mar 25 2011, 23:09) *
Получится выравнивание на 4 (для ARM7 и Cortex).

Вот как раз для ARM7 и Cortex и нужно выравнивание на 8.
Go to the top of the page
 
+Quote Post
Intel4004
сообщение Mar 26 2011, 09:34
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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 выравнивает.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2011, 09:48
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Intel4004 @ Mar 26 2011, 12:34) *
Насколько критично?

Плавучка может отвалиться без выравнивания. Вообще, это требование стандарта, поэтому критично на 100%.
Go to the top of the page
 
+Quote Post
dac
сообщение Mar 31 2011, 18:19
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



QUOTE (yuri_t @ Mar 2 2011, 01:00) *
TNKernel v.2.6 имеет порты ARM, Cortex-M3 и новый порт TI MSP430x.

пример для STM32 под новые библиотеки версии 3 будет? а то уже два дня разбираюсь sm.gif боюсь еще дня 3-4 провожусь sad.gif
Go to the top of the page
 
+Quote Post
LightElf
сообщение Apr 6 2011, 15:12
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



Попытался портировать TNNet на LM3S6965 и встал на грабли, уж больно его Ethernet-контроллер не похож на LPC. Может кто-нибудь портировал стек на это чудо?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 6 2011, 15:18
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(LightElf @ Apr 6 2011, 19:12) *
Попытался портировать TNNet на LM3S6965 и встал на грабли, уж больно его Ethernet-контроллер не похож на LPC.

А какие с ним трудности? EMAC у LM3S простой совсем.
Go to the top of the page
 
+Quote Post
LightElf
сообщение Apr 6 2011, 16:07
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



QUOTE (aaarrr @ Apr 6 2011, 19:18) *
А какие с ним трудности? EMAC у LM3S простой совсем.

Трудности не с пониманием EMAC у LM3S, а с прикручиванием его к TNNet. Я не совсем понимаю, что от драйвера требуется.
Go to the top of the page
 
+Quote Post
LightElf
сообщение Apr 7 2011, 06:47
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 180
Регистрация: 5-04-09
Пользователь №: 47 205



Юрий,
возникли вопросы по использованию буферов в TN-Net.
1) Правильно ли я понимаю, что при отправке IP пакета он будет состоять из минимум двух TN_MBUF, в одном заголовок Ethernet, во втором - сам пакет?
2) Смысл существования HI_BUF, если стек всяко использует цепочку из MID_BUF для больших пакетов? Специфика контроллера Ethernet у LPC?
3) Вы возможно сталкивались с контроллером Ethernet у LM3S. Нет ли у вас идей, как лучше его подружить с TN-Net?
Go to the top of the page
 
+Quote Post
dac
сообщение Apr 29 2011, 03:17
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 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 либо остается прошлое значение, либо вообще случайное. и флаги которые не вызывают "подъем" задачи мы вообще не видим sad.gif

Go to the top of the page
 
+Quote Post
yuri_t
сообщение May 2 2011, 08:54
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 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 ?







Go to the top of the page
 
+Quote Post
dac
сообщение May 3 2011, 15:55
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



QUOTE (yuri_t @ May 2 2011, 14:54) *
Ожидание события в синхронизационном элементе ( в том числе и Event) надо использовать только тогда, когда по этому событию задача должна проснуться и получить управление ( т.е. проверять флаг в Event каждые 100 системных тиков идеологически неверно - Event не предназначен для такого использования).
Почему бы в этом случае не использовать просто глобальную переменную и проверять ее по timeout Вашего Event ?

Глобальные переменные в общем случае зло sm.gif и если есть готовый механизм флагов, почему его не использовать, тем более что нужен один бит, и городить ради этого отдельную сущность в виде семафора или глобальной переменной кажется лишним. Впрочем, я только учусь работать с ОС, и возможно еще не проникся идеологией sm.gif
ЗЫ: похоже теперь плотно подсел на TNKernel, уж очень понравилась. Спасибо!
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 03:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.0157 секунд с 7
ELECTRONIX ©2004-2016