Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:26

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 26 мар 2019, 17:35 
Только пришел

Зарегистрирован: 11 дек 2013, 15:07
Сообщения: 20
Уважаемые коллеги!
В плане использования FreeRTOS я новичок, поэтому обращаюсь к вам за советом. В задаче TCP сервера принимаю данные размером примерно 1100 байт. Обработкой этих данных должна заниматься другая задача. Вопрос. Где мне разместить переменную (структуру), в стеке задачи, в куче FreeRTOS или в системной куче и как лучше передать её для обработки в другую задачу, указателем или копированием?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 26 мар 2019, 22:52 
Только пришел

Зарегистрирован: 14 мар 2018, 17:32
Сообщения: 24
Я бы разместил данные как глобальные. После того, как все данные получены и можно их обрабатывать - выдал бы семафор задаче-обработчику. Главное, что-бы во время работы задачи-обработчика сервер не затер данные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 27 мар 2019, 09:34 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3093
Я думаю для адекватного ответа на вопрос ТС нужно больше данных - платформа какая, есть ли макс. возможный размер данного буфера, как часто эти данные принимаются и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 27 мар 2019, 19:42 
Только пришел

Зарегистрирован: 11 дек 2013, 15:07
Сообщения: 20
Платформа STM32, памяти, в общем, достаточно. Данные на сервер будут приходить редко. Это задание на погрузку жд состава с ревизитами вагонов. Оператор производит погрузку и контролирует вес вагона. То есть процесс довольно сильно растянут по времени. После погрузки и взвешивания каждого вагона в эту переменную - структуру вносятся данные о весе вагона.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 27 мар 2019, 21:34 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2741
Откуда: Русь, Новороссийск
Я ажно закашлялся :)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 10:10 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 23 ноя 2010, 20:11
Сообщения: 117
Откуда: Омск
Не важно, для чего требуются эти данные. Важно то, КАК вы хотите их обрабатывать.
Вариант с мьютексом - в целом правильный. Можно даже сделать чуть-чуть иначе.
Данные получаются асинхронно посредством ETH-DMA и автоматически заносятся в структуру (целиком пакет). Дескриптор буфера автоматически помечается (тем же DMA) как принадлежащий процессору и DMA больше его не будет трогать.
Прерывание меняет значение флага / отправляет уведомление нити, отвечающей за обработку пакета.
Нить берёт буфер пакета, обрабатывает пакет, делает что-то с данными (копирует в промежуточный буфер / обрабатывает / игнорирует / не важно!) и возвращает владение дескриптора обратно DMA контроллеру.

Можно обойтись даже одной задачей.

Можно сделать иначе:
1. Данные принимаются в буфер (тем же DMA).
2. Задача выделяет динамическую память (pvPortMalloc) (рекомендую использовать heap_4.c для сборки памяти в единые сегменты) и копирует в неё данные.
3. Дескриптор буфера возвращается DMA контроллеру.
4. Задача отправляет указатель на память потоку, который будет разбираться с данными.
5. Поток получает из очереди указатель на память, и работает с пакетом как если бы тот находился в буфере приёма.
6. Поток освобождает память (vPortFree).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 10:16 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2640
Берите свежую FreeRTOS и настраивайте чтобы она брала память из общей системной кучи.
В Eclipse+ARM Plugin при создании нового проекта все что осталось от стека и статических переменных - отдаётся под кучу.
И не надо голову ломать.
У меня есть такой шаблон для С++
Там ещё потокобезопасный опертор new (переопределён).

А взаимодествие между задачами - через мьютексы (семафоры) или очередь.
И не надо никаких указателей и копирования не надо.
Просто сделайте переменную глобальной (вне задач) и обращайтесь к ней напрямую из задач (разруливая мьютексами).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 14:00 
Старожил

Зарегистрирован: 28 янв 2015, 16:31
Сообщения: 259
IvanPletnev писал(а):
После погрузки и взвешивания каждого вагона в эту переменную - структуру вносятся данные о весе вагона.
Нужен ли здесь STM задача скорее для ПЛК и андроид устройств, у РЖД есть свои собственные брендированные андроид устройства, или это учебный проект ?
https://habr.com/ru/company/boxowerview/blog/202698/
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 14:24 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3093
Миха, вы думаете что-ли, что вагон = РЖД? Иметь/арендовать вагоны и грузить их может любая иная компания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 15:15 
Старожил

Зарегистрирован: 28 янв 2015, 16:31
Сообщения: 259
NStorm писал(а):
Иметь/арендовать вагоны и грузить их может любая иная компания.
Но данные всё равно надо будет отправлять в РЖД, и полюбому проще это делать не на STM , а на более удобных средствах эксплуатации. Оператор данные полученные с весов после загрузки проверил глазами/личной ответственностью, подписал электронной подписью и пошла гулять информация по серверам и централизованным БД РЖД и их потребителей. При транспортировке грузов/вагонов их изредка также контрольно взвешивает РЖД автоматическими системами, так-что чем унифицированней будет оборудование тем проще его вписать в эту систему. Всё-таки у автора темы скорее всего учебный проект.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 17:14 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3093
Миха писал(а):
Но данные всё равно надо будет отправлять в РЖД

Не факт. https://ru.wikipedia.org/wiki/Предприятие_промышленного_железнодорожного_транспорта.
У нас такое ППЖТ на работе. Свои тепловозы. Свои подъездные пути, построенные за бабки нашей компании. Пока составчики катаются только по ним, афаик ничего РЖД мы не должны сообщать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 17:23 
Старожил

Зарегистрирован: 28 янв 2015, 16:31
Сообщения: 259
NStorm писал(а):
Свои подъездные пути, построенные за бабки нашей компании.
Это вряд-ли, скорее всего, всё построенно ещё во времена СССР, но это опустим лирика так сказать )))) Тем более если это замкнутое предприятие смысла мутить с фиговинами на STM маловато, уволится/уйдёт на пенсию разработчик и фсё - приехали куда потом девать эти самоделки ))) Типовое промышленное оборудование для автоматизации ПЛК от максимально крупных производителей (десятками лет на рынке) полюбому легче раздобыть и людей знающих как его настроить тоже проще найти и дешевле по смете итого будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 17:31 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3093
Цитата:
Это вряд-ли, скорее всего, всё построенно ещё во времена СССР

Предприятие было построено после 92го. Сам видел как-то копию выигранного дела в суде нашей компании, где мы по суду струсили денег с соседнего предприятия, которое пользовалось нашими подъездными путями (они включились тоже), но не оплачивало (или мало заплатили, не помню) за их использование. Суд обязал их выплатить нам деньги за использование нашей жд инфраструктуры, т.к. пути именно нам и принадлежали.

EDIT: Подумал. Хотя может ЖДшка там и была до предприятия какая-то конечно. Может и не построили, а купили и привели в порядок. Тут уж не знаю. Но сути не меняет в общем-то. Не всё ЖД от РЖД )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 17:45 
Старожил

Зарегистрирован: 28 янв 2015, 16:31
Сообщения: 259
NStorm писал(а):
Не всё ЖД от РЖД )
Более того у РЖД меньше половины грузовых вагонов/платформ находится в собственности, она их арендует у кучи владельцев и различных дочек. При желании можно приобрести _один_ вагон/платформу и сдавать его в аренду РЖД. Есть даже сервис на сайте РЖД где можно узнать где катается _ваш_личный_вагон, есть такие чудаки,владельцы заводов газет паравозов вагонов ;D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 29 мар 2019, 18:03 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:48
Сообщения: 3965
Откуда: Звенигород
Я работал на ЖБК (Железо Бетонный Комбинат расшифровывается, если кто не знает)), там плиты для строительства домов делают, плитку тротуарную и прочую фигню) так там все было на самоделках, вот вообще все. И в зависимости от знаний аффтара все это крутилось или на авр или концевиках и реле.

_________________
От Парижа до Находки с водкой лучше, чем без водки!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: FreeRTOS. Где лучше разместить переменную большого размера?
СообщениеДобавлено: 31 мар 2019, 22:13 
Только пришел

Зарегистрирован: 11 дек 2013, 15:07
Сообщения: 20
Да, большое спасибо за ответы! Я действительно создал глобальную переменную и контролирую доступ к ней.
Заказчик здесь - крупный угольный разрез. И он заказал систему автоматизации погрузки в жд вагоны. Часть этой системы - пылевлагозащищенное компактное устройство, которое можно установить либо в погрузчик, либо в кабину оператора погрузки. Ну а поскольку наша фирма занимается весами и автоматизацией процессов взвешивания автомобилей и жд вагонов, то подобное устройство будет нелишним.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB