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

 
 
> TNKernel будет ли порт для cortex m4 ?
dimanisu
сообщение Feb 9 2013, 20:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Здравствуйте!

У меня вопрос к разработчику ОС Юрию и всем, кто допиливал ось под себя(VslavX и т.д.), озвученный в названии темы. Будет ли такой порт? Планирую работать с STM32f4.
Планируется ли дальнейшее развитие TNKernel?

Заранее благодарен за ответы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VslavX
сообщение Feb 20 2013, 19:53
Сообщение #2


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



По теме переключения контекста FPU по требованию (по исключению) тоже хотелось бы услышать мнение All. После обдумывания мне кажется что хранить контекст FPU в стеке уже нельзя - иначе его будет невозможно восстановить по требованию (задача выполняется уже при произвольном стеке, и тут ей понадобился FPU - а стек-то уже тю-тю). Поэтому предлагается хранить контекст в блоке задчаи - TN_TCB. Но тут минус что контекст FPU большой - от 128 байт, и не каждая задача использует FPU - не всем оно надо. Поэтому предлагается завести пул блоков, для сохранения контекста. Когда задача начинает юзать FPU ей оттуда выделяется блок (ссылка храниться в TCB) и далее она пользуется блоком. При завершении задачи - блок возвращается. Таким образом пользователь может определить пул нужного размера - по числу задач работающих с FPU. Поддержку FPU в обработчиках прерываний/исключений думаю не реализовывать - код усложняется, скорость падает.

P.S. А чем бы float/double на консоль выводить, а то мой самописный printf не поддерживает %f, %e, %a - наверное, пришло время добавить эту поддержку. Посмотрел реализации glibc - так там еще длинную арифметику надо. uglibc тоже не радужно. Может кто-то присоветует относительно более простое решение?

Update: разобрался я с FPSCR, он автоматически в стеке сохраняется. При моем методе надо будет делать руками, главное - не забыть sm.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 21 2013, 03:00
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Я бы для начала попытался проанализировать плюсы и минусы вашего метода при различных сценариях использования.
Сценарий первый: в данный момент времени две задачи (или более) работают с плавучкой. При таком сценарии, насколько я понял, после каждого переключения контекста на "плавучую" задачу будет происходить много чего: исключение, выяснение причины, сохранение контекста предыдущей задачи, поиск свободного пула для сохранения контекста новой задачи... То есть, это всё будет работать сильно медленнее, чем простой вариант а-ля FreeRtos.
Сценарий второй (выигрышный для вашего варианта): Все задачи (или все кроме одной) перестали работать с плавучкой. В этом случае ничего не происходит, всё работает как M3.
Мне кажется, что второй вариант будет встречаться значительно реже. К тому же, к FreeRtos-ному варианту можно просто добавить функцию окончания работы с плавучкой, типа tn_end_fpu(), в которой будет сбрасываться бит CONTROL.FPCA. В этом случае он не уступит вашему варианту и при втором сценарии (если конечно все задачи вызовут tn_end_fpu()).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
VslavX
сообщение Feb 21 2013, 05:53
Сообщение #4


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(AHTOXA @ Feb 21 2013, 05:00) *
Я бы для начала попытался проанализировать плюсы и минусы вашего метода при различных сценариях использования.

Основной анализ проделан в статье ARM на которую Вы уже давали ссылку. Там же оба подхода довольно подробно рассмотрены. Из дополнительных минусов второго ("переключение по требованию") я вижу невозможность (хотя, скорее громоздкость и неудобство) использования FPU в обработчиках прерываний/исключений. Зато снижается оверхед при переключении контекста и interrupt latency.

Цитата(AHTOXA @ Feb 21 2013, 05:00) *
Сценарий первый: ...
...
Сценарий второй ...

С анализом сценариев у меня туго sm.gif. На данный момент у меня такого рода задачи, что я вообще не понимаю зачем нужен FPU. Будучи студентом в университете приходилось заниматься численным моделированием плазмы. На Фортране-IV. На СМ-4. Предметом гордости было наличие блока FIS. Потом кафедра купила СМ-1420 с полноценным FPP - радости было. Но сейчас таких задач у меня нет - скрипач FPU не нужен. Поэтому мне сложно сказать какой сценарий более частый и предпочтительный, и планирую реализовать оба подхода, с выбором по флагу компиляции. Второй сценарий сделаю несколько упрощенным - для начала не буду заморачиваться с пулом, просто буду хранить контекст в TCB.

Если кто-то реально использует (или только планирует использовать) FPU в своих приложениях - то было бы интересно узнать какой типовой способ использования в разрезе RTOS - сколько задач используют FPU, есть ли использование FPU в обработчиках прерываний и прочее.

Цитата(AHTOXA @ Feb 21 2013, 05:00) *
(если конечно все задачи вызовут tn_end_fpu()).

ИМХО такая функция полезна при обоих подходах. Если пользователя заботит быстродействие то ему надо предоставить возможность такой настройки.

Update:
Вот такое "понравилось":

"GNUC C compiler (gcc)
If a program is compiled with the FPU option, gcc might make use of the floating-point registers
if register pressure is high, and running low on available registers for data processing. In some
cases, the memory copy might also utilize floating-point registers to hold data"

Соглашение ABI при наличии FPU разрешает его почти произвольное использование - даже если нет работы с данными типа float/double, регистры FPU все равно могут использоваться компилятором, хотя бы в качестве быстрого хранилища переменных. Поэтому весь код обработчиков прерываний (включая системные функции типа tn_sem_isignal()) нужно компилировать с -mfloat-abi=soft. И библиотеки тоже с такой опцией. И, соответственно, приложение - иначе несовместимость линковки (хотя, проверю линковку "soft" и "softfp", есть шанс). И кому такое надо - вообще не моги пользовать FPU? Получается что второй подход для систем с отдельной линковкой приложения. Разрешить использование FPU в обработчиках можно, но для этого надо для каждого сделать отдельную функцию-переходник в котором явно запрещается FPU - чтобы FPU-код в обработчике вызвал исключение. И такой переходник скушает почти весь выигрыш в быстродействии sad.gif

Из компиляторов пока только Keil можно заставить не использовать FPU для "неплавучих" целей. GCC и IAR таких флажков не имеют.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dimanisu   TNKernel будет ли порт для cortex m4 ?   Feb 9 2013, 20:26
- - VslavX   Цитата(dimanisu @ Feb 9 2013, 22:26) У ме...   Feb 10 2013, 11:27
|- - dimanisu   Цитата(VslavX @ Feb 10 2013, 14:27) Если ...   Feb 10 2013, 12:38
- - kosyak©   А можно ссылку на тему, где обсуждалась идейка?   Feb 10 2013, 11:39
|- - AHTOXA   Вот здесь обсуждалась. Возможно пригодится ещё эта...   Feb 10 2013, 12:16
- - yuri_t   Если бы я стал писать порт TNKernel для Cortex-M4,...   Feb 11 2013, 09:58
|- - VslavX   Цитата(yuri_t @ Feb 11 2013, 11:58) Вячес...   Feb 12 2013, 06:16
- - dimanisu   VslavX! Благодарю за инициативу! Надеюсь,...   Feb 16 2013, 00:44
|- - VslavX   Цитата(dimanisu @ Feb 16 2013, 02:44) Бла...   Feb 18 2013, 12:34
- - yuri_t   Цитата(VslavX @ Feb 18 2013, 16:34) ... п...   Feb 18 2013, 14:00
|- - VslavX   Цитата(yuri_t @ Feb 18 2013, 16:00) В пос...   Feb 18 2013, 14:09
|- - SyncLair   Цитата(yuri_t @ Feb 18 2013, 18:00) В пос...   Feb 18 2013, 18:06
|- - IgorKossak   Цитата(SyncLair @ Feb 18 2013, 20:06) Не ...   Feb 18 2013, 18:13
- - _Pasha   linaro gcc еще есть, github gcc(linux'овые сбо...   Feb 18 2013, 18:41
|- - IgorKossak   Цитата(_Pasha @ Feb 18 2013, 20:41) linar...   Feb 18 2013, 20:53
- - VslavX   Выполнил черновой перенос существующего кода порта...   Feb 19 2013, 21:16
- - Volldemar   А вот с этим: arm-none-eabi кто нибудь, работал?   Feb 20 2013, 08:54
|- - AHTOXA   Именно про него парой постов выше упоминали аж нес...   Feb 20 2013, 09:45
|- - VslavX   Цитата(Volldemar @ Feb 20 2013, 10:54) А ...   Feb 20 2013, 09:47
|- - Volldemar   Цитата(VslavX @ Feb 20 2013, 11:47) Именн...   Feb 20 2013, 12:21
|- - IgorKossak   Цитата(VslavX @ Feb 20 2013, 11:47) Именн...   Feb 20 2013, 15:58
- - VslavX   Реализовал оба метода переключения контекста. Мето...   Feb 21 2013, 20:01
|- - AHTOXA   Очень интересно. Только я не понял, как читать осц...   Feb 22 2013, 02:59
|- - VslavX   Цитата(AHTOXA @ Feb 22 2013, 04:59) Очень...   Feb 22 2013, 05:39
- - Valentine Loginov   Цитата(VslavX @ Feb 12 2013, 10:16) Порт ...   Feb 25 2013, 18:50
|- - VslavX   Цитата(Valentine Loginov @ Feb 25 2013, 20...   Feb 25 2013, 20:24
- - yuri_t   TNKernel порт для Cortex-M4, написанный VslavX, вы...   Mar 9 2013, 21:53
- - kosyak©   VslavX, а почему в Вашем порте пропала необходимос...   Jan 21 2014, 17:20
- - remi700   Здравствуйте! Из документации непонятно, можно...   Jan 30 2014, 17:36
- - Almaz_emb   Доброго времени суток) Безуспешно пытаюсь запустит...   Jul 16 2014, 05:10
- - Almaz_emb   Продолжаю мудохаться. Запустил порт для CortexM4 т...   Jul 16 2014, 21:22
|- - VslavX   Цитата(Almaz_emb @ Jul 17 2014, 00:22) Од...   Jul 19 2014, 20:10
- - kosyak©   Пробую запустить порт CortexM4F в своем проекте. ...   Sep 11 2014, 15:13
- - prgjz   Кто нибудь добился успеха с TN_SUPPORT_FPU? Прграм...   Oct 9 2014, 12:19
|- - AHTOXA   Цитата(prgjz @ Oct 9 2014, 18:19) Неужели...   Oct 9 2014, 14:54
- - prgjz   Да, мне нравится она! Использую в старых прое...   Oct 9 2014, 16:50
- - prgjz   упс... минимальный стек больше при FPU. Заработало...   Oct 10 2014, 16:34
- - LightElf   QUOTE (prgjz @ Oct 10 2014, 20:34) Не под...   Oct 30 2014, 15:34


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

 


RSS Текстовая версия Сейчас: 25th August 2025 - 19:04
Рейтинг@Mail.ru


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