_4afc_ 27 6 августа, 2020 Опубликовано 6 августа, 2020 · Жалоба On 8/5/2020 at 7:49 PM, alexan300 said: В текущий проект необходимо добавить библиотеку откуда я знаю? стал бы я сюда обращаться имея все ответы Ещё раз спрашиваю: "А откуда, тогда локализация проблемы?" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 4 6 августа, 2020 Опубликовано 6 августа, 2020 · Жалоба Ну так крути в двух, гениальный. А лучше настрой DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexan300 0 6 августа, 2020 Опубликовано 6 августа, 2020 · Жалоба 1 minute ago, _4afc_ said: Ещё раз спрашиваю: "А откуда, тогда локализация проблемы?" предыдущий опыт. Не один разработчик указывал на это узкое горлышко, плюс сам смотрел графики в анализаторе. видно, что когда сд карта пишет, ацп прерывается . 1 minute ago, rkit said: Ну так крути в двух, гениальный. А лучше настрой DMA. не умею. ищу исполнителя. и вроде об этом пишу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 6 августа, 2020 Опубликовано 6 августа, 2020 · Жалоба 20 минут назад, alexan300 сказал: я и повесил их на разные. но крутяться они у меня в одном лупе Надо не в лупе их крутить, а ДМА раскорчегарить :). По сути вопрос сводится к тому, насколько высоко позволит конкретная SD-карта поднять частоту клока SPI, а не от искусства программиста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 6 августа, 2020 Опубликовано 6 августа, 2020 · Жалоба 15 minutes ago, alexan300 said: не умею. ищу исполнителя. и вроде об этом пишу. Лучше ищите на всю задачу. И без Ардуино. Just now, Xenia said: По сути вопрос сводится к тому, насколько высоко позволит конкретная CD-карта поднять частоту клока SPI, а не от искусства программиста. Нет, не сводится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 27 6 августа, 2020 Опубликовано 6 августа, 2020 · Жалоба 20 minutes ago, alexan300 said: предыдущий опыт. Не один разработчик указывал на это узкое горлышко, плюс сам смотрел графики в анализаторе. видно, что когда сд карта пишет, ацп прерывается . Я не знаток возможностей вашего STM, а нельзя зделать вытясняющую многозадачность, где у карты приоритет меньше чем у АЦП? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба 4 часа назад, alexan300 сказал: гениально ! ) я и повесил их на разные. но крутяться они у меня в одном лупе Наконец-то доползли до сути проблемы. Забываем о суперлупе, переделываем всю работу под любую РТОС. На две задачи: 1) работа с АЦП; 2) работа с файловой системой на SD-карте. Приоритет 2-й задачи ниже чем у 1-й. И проблема решается. Можно даже без DMA и на одном ядре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexan300 0 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба 10 hours ago, aaarrr said: Лучше ищите на всю задачу. И без Ардуино. на ВСЮ точно не надо. Есть необходимость только в реализации записи на карту. Нет, не сводится. 6 hours ago, jcxz said: Наконец-то доползли до сути проблемы. Забываем о суперлупе, переделываем всю работу под любую РТОС. На две задачи: 1) работа с АЦП; 2) работа с файловой системой на SD-карте. Приоритет 2-й задачи ниже чем у 1-й. И проблема решается. Можно даже без DMA и на одном ядре. Таки да! но половина слов, мне чужда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivnor 1 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба Ардуино это тормоз сама по себе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexan300 0 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба 10 hours ago, _4afc_ said: Я не знаток возможностей вашего STM, а нельзя зделать вытясняющую многозадачность, где у карты приоритет меньше чем у АЦП? STM ? нет.. ESP32) Я сейчас и копаю в этом направлении. пытаюсь менять приоритеты работы ядер, в зависимости от того, заполнен ли буфер с полезными данными или еще нет. Ну и опять же.. WDT покоя не дает. 1 minute ago, ivnor said: Ардуино это тормоз сама по себе Да. я в начале и написал, что далее потребуется оптимизация некоторых библиотек. Я почитал, это уже тривиальная задача. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lelikk 0 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба 45 minutes ago, alexan300 said: STM ? нет.. ESP32) Я сейчас и копаю в этом направлении. пытаюсь менять приоритеты работы ядер, в зависимости от того, заполнен ли буфер с полезными данными или еще нет. Ну и опять же.. WDT покоя не дает. Да. я в начале и написал, что далее потребуется оптимизация некоторых библиотек. Я почитал, это уже тривиальная задача. Вам не нужна ни RTOS, ни прочие танцы: 1. Отключаете WDT, на время отладки этой проблемы; 2. Обеспечиваете обмен данными с ADC, который на первой SPI шине по таймеру (время конверсии и обмена ведь фиксированные), данные складываете в буфер. 3. Буфер организуете из двух половин, как только одна половида заполнилась - заполняете другую. В этот момент стартует очередная запись на SD. 4. Пока ADC заполняет половину буфера - вторая половина сбрасывается на SD, потом меняется. Размер буфера определяется соотношением максимальной задержки записи (250ms?) и скорость, с какой вы данные накапливаете. 5. Как только это заработает - можно подключать DMA для сброса буфера на SD, чтобы разгрузить процессор для других задач (если они есть). Тут достаточно одного ядра с огромным запасом. Можно еще один канал DMA и для ADC задействовать, только смысла нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба 30 минут назад, Lelikk сказал: 4. Пока ADC заполняет половину буфера - вторая половина сбрасывается на SD, потом меняется. Размер буфера определяется соотношением максимальной задержки записи (250ms?) и скорость, с какой вы данные накапливаете. 5. Как только это заработает - можно подключать DMA для сброса буфера на SD, чтобы разгрузить процессор для других задач (если они есть). Тут достаточно одного ядра с огромным запасом. Можно еще один канал DMA и для ADC задействовать, только смысла нет. Ну да, только забыли сущий пустяк: ТС наверняка работает с SD через файловую систему. И использует для этого какое-то готовое middleware (типа FatFS). Которое тоже почти наверняка работает в блокирующем режиме. Так что 6-м (и самым главным!) пунктом будет - переписать это самое middleware в неблокирующий режим. Да ещё как-то скрестить его с этим самым двойным буфером. А эта задача и профессионалу не всякому по плечу будет, и главное, что по сложности она в разы превысит все остальные пункты вместе взятые. А в блокирующем режиме на сколько частей не делите буфер DMA или вообще без DMA - один фиг будут паузы в суперлупе. Так как Вы описываете, будет работать только если без ФС. Но "без ФС" я думаю, что и вообще SD-карта не нужна, а удобнее использовать какой-либо чип SPI FLASH. PS: Так что - или крестик сними или трусы надень или делим суперлуп на задачи или избавляемся от ФС. PPS: При желании "задачу" работы с АЦП можно сделать в виде псевдозадачи, на прерываниях и автомате состояний внутри. А работу с ФС - в фоновом цикле. И формально обойтись без РТОС. Но для начинающего это, имхо, будет сложнее, чем разобраться в работе из под РТОС. Да и смысла особого нет для такой примитивной задачи как у ТС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба 5 minutes ago, jcxz said: Ну да, только забыли сущий пустяк: ТС наверняка работает с SD через файловую систему. И использует для этого какое-то готовое middleware (типа FatFS). Которое тоже почти наверняка работает в блокирующем режиме. Так что 6-м (и самым главным!) пунктом будет - переписать это самое middleware в неблокирующий режим. Да ещё как-то скрестить его с этим самым двойным буфером. А эта задача и профессионалу не всякому по плечу будет, и главное, что по сложности она в разы превысит все остальные пункты вместе взятые. А в блокирующем режиме на сколько частей не делите буфер DMA или вообще без DMA - один фиг будут паузы в суперлупе. Так как Вы описываете, будет работать только если без ФС. Но "без ФС" я думаю, что и вообще SD-карта не нужна, а удобнее использовать какой-либо чип SPI FLASH. PS: Так что - или крестик сними или трусы надень или делим суперлуп на задачи или избавляемся от ФС. PPS: При желании "задачу" работы с АЦП можно сделать в виде псевдозадачи, на прерываниях и автомате состояний внутри. А работу с ФС - в фоновом цикле. И формально обойтись без РТОС. Но для начинающего это, имхо, будет сложнее, чем разобраться в работе из под РТОС. Да и смысла особого нет для такой примитивной задачи как у ТС. Если у ТС задача состоит всего из двух пунктов 1. Считать АЦП 2. Записать на SD. Запускать АЦП в обработчике прерывания таймера. А FatFs пускай себе блокирует что хочет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба 1 hour ago, Lelikk said: . Буфер организуете из двух половин, как только одна половида заполнилась - заполняете другую Тогда уж классический кольцевой буфер сделать. Я тоже делал двойные буферы по типу фрейм-буферов для экранов. Но, ИМХО, это излишняя работа. Тем более кольцевой буфер, будучи оформленным в виде класса/библиотеки/репозитария/чего_то_ещё пригождается автоматически и в других задачах: работа с последовательны портом (ну это классика), сбор данных (собственно задача автора) и т.п. 26 minutes ago, dimka76 said: Если у ТС задача состоит всего из двух пунктов Как правило, снова же ИМХО, редко задача вот так просто ограничивается парой пунктов. Обычно завтра выясняется, что неплохо бы ещё дисплей с кнопочками добавить, эзернет 10 Гбит и вытащить наружу пару usb... Поэтому не стоит писать сразу неправильно) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lelikk 0 7 августа, 2020 Опубликовано 7 августа, 2020 · Жалоба 3 hours ago, jcxz said: Ну да, только забыли сущий пустяк: ТС наверняка работает с SD через файловую систему. И использует для этого какое-то готовое middleware (типа FatFS). Которое тоже почти наверняка работает в блокирующем режиме. Так что 6-м (и самым главным!) пунктом будет - переписать это самое middleware в неблокирующий режим. Да ещё как-то скрестить его с этим самым двойным буфером. А эта задача и профессионалу не всякому по плечу будет, и главное, что по сложности она в разы превысит все остальные пункты вместе взятые. Не будет блокировать она ничего - данные будут собираться в прерывании. Если задача действительно ограничивается описанным ТС, то этого неуниверсального решения будет достаточно, чтобы обойтись и без RTOS и не менять прослойку работы с SD. Какой там буфер будет - кольцевой или нет, это вообще мелочи. Но все равно - как ни делай, быстрее 4-5 дней стабильное решение не получится. Так что мечты про 9 т.р. ТС может забыть, а студент будет ему месяц делать в лучшем случае. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться