-
- я делаю так... abivan(379 знак., 18.06.2018 10:48)
- Простите, я не программист, но можно вкратце пояснить как вы избегаете сегментации, при использовании указателей. У вас что-то вроде массива указателей на указатели? - Ralex(18.06.2018 11:09)
- Да, это совершенно нормально. Многие RTOS таким образом образуют zero-copy передачу данных между потоками: есть пул блоков памяти, есть кольцевой буффер из указателей на эти блоки памяти. lloyd(221 знак., 18.06.2018 11:32)
- можно и так, но я не стал использовать этот сервис операционки. У меня связные списки по степени 2-ки. За все приходится платить, за отсутствие сегментации плата возможно большим размером кучи. abivan(145 знак., 18.06.2018 12:04)
- Это возможно только при блоках одинакового размера, или нет? - Andreas(18.06.2018 11:50)
- Если блоки писать в кольцо строго последовательно и читать (удалять) тоже строго последовательно, то не будет сегментации и при переменном размере пакета. - Nikolay_Po(18.06.2018 12:41)
- Что-то подобное использовал в одной из железяк, пока не ушел на POSIX lloyd(91 знак., 18.06.2018 13:28)
- Почему? Ведь другие задачи тоже выделяют/освобождают память в это время. - Andreas(18.06.2018 12:57)
- Здесь речь не идёт об общей куче, речь о выделенном буфере пакетов. Для предсказуемости поведения железа, лучше не сваливать всё в "кучу". - Nikolay_Po(19.06.2018 15:51 - 15:58)
- Да, подразумеваются блоки одинакового размера. Блоки переменного размера, в принципе, возможны (замените выделение из пула на потокобезопасный malloc/free), но это кошмар для эмбеддеда, ибо фрагментация кучи и источник трудноуловимых багов и lloyd(27 знак., 18.06.2018 11:53)
- upd простите ошибся адресатом =) Ralex(217 знак., 18.06.2018 11:57 - 12:13)
- Ну тогда это и есть обычный кольцевой буфер, только не с байтиками, а с указателями. Обычное решение, особенно при передаче блоков данных с фиксированной или почти длинной. - Andreas(18.06.2018 12:00)
- Если блоки писать в кольцо строго последовательно и читать (удалять) тоже строго последовательно, то не будет сегментации и при переменном размере пакета. - Nikolay_Po(18.06.2018 12:41)
- Да, это совершенно нормально. Многие RTOS таким образом образуют zero-copy передачу данных между потоками: есть пул блоков памяти, есть кольцевой буффер из указателей на эти блоки памяти. lloyd(221 знак., 18.06.2018 11:32)
- Простите, я не программист, но можно вкратце пояснить как вы избегаете сегментации, при использовании указателей. У вас что-то вроде массива указателей на указатели? - Ralex(18.06.2018 11:09)
- с.1-6 Копетан(183 знак., 16.06.2018 12:26, ссылка)
- UART -> FIFO_in -> обработка -> FIFO_out -> SPI - argus98(16.06.2018 11:17)
- Кто-то должен еще тормозить персоналку, чтобы она не слала команды, когда SPI еще не разгреб. Скрипач(134 знак., 16.06.2018 11:24)
- Если слейвы не успевают разгрести поток от мастера - в жопу такие слейвы - argus98(16.06.2018 13:59)
- Кто-то должен еще тормозить персоналку, чтобы она не слала команды, когда SPI еще не разгреб. Скрипач(134 знак., 16.06.2018 11:24)
- Монитор Хоара чем не мил? Скрипач(147 знак., 15.06.2018 21:11)
- Не слыхал про такой. Покурю. Спасибо. - Codavr(15.06.2018 21:14)
- Телепаты в отпуске. Два предложения не маловато будет. Колись. - SciFi(15.06.2018 20:59)
- Ну даже не знаю что добавить. Проц получает пакеты по USART, мало мало их перепаковыввает, и отправляет по SPI. Пакеты приходят от балды, отправляются тоже. Скорость не велика, проц большую часть времени отдыхает, но каналы заняты процентов на 30. Codavr(96 знак., 15.06.2018 21:06 - 21:08)
- Глубину подбирают под конкретный траффик. lloyd(148 знак., 15.06.2018 21:08)
- Да это тинька, какой там DMA. В USART тупо первый бит флаг начала пакета, число байт всегда одно и то же, в конце пакета контрольная сумма. По SPI признак начала пакета - пауза межджу пакетами, число байт тоже известно и есть контрольные суммы, но Codavr(102 знак., 15.06.2018 21:12 - 21:20)
- Я делал подобное недавно, только вместо тиньки была мега (хотя кода там на тиньку), по SPI оно было слэйвом и разбор пакентов был на уже стороне SPI-мастера. Т.е. у меня был довольно тупой мост SPI-UART. Потерь не было, но принятые по UART пакеты AlexG(249 знак., 16.06.2018 04:52)
- А, вон оно что. Ты хочешь, чтобы пока ты долбишь рабов по SPI, тебе сыпались задачи в UART? Ну тогда можно сделать обработку UART в прерывании, а работу с SPI - в основном потоке. И кольцевой буффер пакетов на прием и передачу. - lloyd(15.06.2018 21:23)
- Как расколоть задачу я представляю, программа уже написана и отладка в завершающей стадии. Просто хотелось красоты, но получившееся решение не вызывает прилива эндорфина. Вот и подумалось, а есть ли решение теоретически обоснованное. - Codavr(15.06.2018 21:29)
- Выделяете в отдельную сущность Планировщик и наслаждаетесь эндрофиновым приливом :) - Скрипач(15.06.2018 21:51)
- Планировщик это слово такое красивое. Ниачем. "Сделайте мне красиво" из той же оперы. - Codavr(15.06.2018 23:08)
- Выделяете в отдельную сущность Планировщик и наслаждаетесь эндрофиновым приливом :) - Скрипач(15.06.2018 21:51)
- Как расколоть задачу я представляю, программа уже написана и отладка в завершающей стадии. Просто хотелось красоты, но получившееся решение не вызывает прилива эндорфина. Вот и подумалось, а есть ли решение теоретически обоснованное. - Codavr(15.06.2018 21:29)
- Полагаю не очень понимаю поставленной проблемы. Тиньку и в SPI и в UART ведомым пихают? - lloyd(15.06.2018 21:15)
- В SPI она идет мастером. По USART связь с компом, свои данные валит с одним и тем же интервалом, а от компа по мере поступления, но интервал примерно тот же. - Codavr(15.06.2018 21:23)
- Сколько байт в пакетах от компьютера и на какой скорости? Если входной и выходной поток отличаются по количеству байт в секунду, то где-то нужно просверлить отверстие, чтобы либо дополнять данные, либо сливать лишние. - Экспериментатор(16.06.2018 11:04, )
- Я чиста теоретически интересуюсь. Это же такая область где наверняка публика что-нить умное придумала. Скорость обеих каналов заведомо достаточна для передачи. Вопрос как правильно организовать проброс данных из одного в другой. - Codavr(18.06.2018 08:13 - 08:20, ссылка)
- Фраза "cкорость обеих каналов заведомо достаточна для передачи" интригует - в чем же тогда проблема? :) По какому критерию она достаточна? - VLLV(18.06.2018 08:40)
- Да забей, все это обсуждение конкретно моей задачи яйца выеденного не стоит. Это SciFi сбил с с толку и все повелись. "Заведомо достаточна" понятие растяжимое. "Проспект Авиаторов" заведомо достаточен чтобы выгребать входящий за сутки трафик, но Codavr(60 знак., 19.06.2018 15:46 - 15:57)
- Так приятно отвлечься на чужую задачу - ответственности то никакой!, а ты - забей? Забил :) - VLLV(19.06.2018 16:15)
- Дык, есть возможность рассмотреть теоретические основы. Тут ваще можно на на свою работу болт забить :))) - Codavr(19.06.2018 16:17)
- Так приятно отвлечься на чужую задачу - ответственности то никакой!, а ты - забей? Забил :) - VLLV(19.06.2018 16:15)
- Да забей, все это обсуждение конкретно моей задачи яйца выеденного не стоит. Это SciFi сбил с с толку и все повелись. "Заведомо достаточна" понятие растяжимое. "Проспект Авиаторов" заведомо достаточен чтобы выгребать входящий за сутки трафик, но Codavr(60 знак., 19.06.2018 15:46 - 15:57)
- Я Вам чисто практически хотел пределы подсказать. Как верно тут заметили, одного кольцевого буфера на вход и одного на выход при работе в режиме запрос-ответ обычно хватает. Трудности начинаются, когда надо, например, по SPI обеспечить постоянную Экспериментатор(68 знак., 18.06.2018 08:34, )
- Я начинал топик специально не вдаваясь в реальную задачу. Чиста теоретический вопрос обозначил. Нет, бля, утянули на конкретику. Да все уже у меня давно работает. Мой интерес был направлен на перспективу. Просто была мысль понизить скорости до Codavr(166 знак., 19.06.2018 15:24 - 15:27)
- Хоть убей, не понимаю этих исканий, в упор не вижу проблемы. Наверное, это что-то сугубо АВРическое. Ну а по поводу снижения скорости - у тебя непредсказуемый зверь "ПК", под него и надо подстраиваться. Или нет? - SciFi(19.06.2018 15:30)
- Опять тебе моя задача работать не дает. Я же сказал - уже все работает. Нашел я уже где много и полезно про мой вопрос. - Codavr(19.06.2018 15:43 - 15:49, ссылка)
- Кстати, ты затронул глобальную проблему. Народ ночи не спит, ломает голову, как её решать. Под угрозой скорость загрузки картинок с котиками :-) SciFi(13 знак., 19.06.2018 15:58 - 16:03, ссылка, ссылка)
- Я не прочь потеоретизировать, как ты и предлагал, ну тогда сказал бы сразу, что тебя интересуют способы расчёта необходимых объёмов буферов и всё такое. Ты сам спровоцировал своими уартами и спи. Надо было "абстрактные каналы связи" :-) - SciFi(19.06.2018 15:54)
- Фигасе ты со своей головы на здоровую... Codavr(318 знак., 19.06.2018 16:02, ссылка)
- Опять тебе моя задача работать не дает. Я же сказал - уже все работает. Нашел я уже где много и полезно про мой вопрос. - Codavr(19.06.2018 15:43 - 15:49, ссылка)
- Хоть убей, не понимаю этих исканий, в упор не вижу проблемы. Наверное, это что-то сугубо АВРическое. Ну а по поводу снижения скорости - у тебя непредсказуемый зверь "ПК", под него и надо подстраиваться. Или нет? - SciFi(19.06.2018 15:30)
- Я начинал топик специально не вдаваясь в реальную задачу. Чиста теоретический вопрос обозначил. Нет, бля, утянули на конкретику. Да все уже у меня давно работает. Мой интерес был направлен на перспективу. Просто была мысль понизить скорости до Codavr(166 знак., 19.06.2018 15:24 - 15:27)
- Фраза "cкорость обеих каналов заведомо достаточна для передачи" интригует - в чем же тогда проблема? :) По какому критерию она достаточна? - VLLV(18.06.2018 08:40)
- Я чиста теоретически интересуюсь. Это же такая область где наверняка публика что-нить умное придумала. Скорость обеих каналов заведомо достаточна для передачи. Вопрос как правильно организовать проброс данных из одного в другой. - Codavr(18.06.2018 08:13 - 08:20, ссылка)
- Сколько байт в пакетах от компьютера и на какой скорости? Если входной и выходной поток отличаются по количеству байт в секунду, то где-то нужно просверлить отверстие, чтобы либо дополнять данные, либо сливать лишние. - Экспериментатор(16.06.2018 11:04, )
- В SPI она идет мастером. По USART связь с компом, свои данные валит с одним и тем же интервалом, а от компа по мере поступления, но интервал примерно тот же. - Codavr(15.06.2018 21:23)
- Да это тинька, какой там DMA. В USART тупо первый бит флаг начала пакета, число байт всегда одно и то же, в конце пакета контрольная сумма. По SPI признак начала пакета - пауза межджу пакетами, число байт тоже известно и есть контрольные суммы, но Codavr(102 знак., 15.06.2018 21:12 - 21:20)
- Глубину подбирают под конкретный траффик. lloyd(148 знак., 15.06.2018 21:08)
- Ну даже не знаю что добавить. Проц получает пакеты по USART, мало мало их перепаковыввает, и отправляет по SPI. Пакеты приходят от балды, отправляются тоже. Скорость не велика, проц большую часть времени отдыхает, но каналы заняты процентов на 30. Codavr(96 знак., 15.06.2018 21:06 - 21:08)
- я делаю так... abivan(379 знак., 18.06.2018 10:48)