Перейти к содержанию
    

Написать библиотеку для карты памяти micro Sd

On 8/5/2020 at 7:49 PM, alexan300 said:

В текущий проект необходимо добавить библиотеку

откуда я знаю? стал бы я сюда обращаться имея все ответы

Ещё раз спрашиваю: "А откуда, тогда локализация проблемы?"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, _4afc_ said:

Ещё раз спрашиваю: "А откуда, тогда локализация проблемы?"

предыдущий опыт. Не один разработчик указывал на это узкое горлышко, плюс сам смотрел графики в анализаторе. видно, что когда сд карта пишет, ацп прерывается . 

1 minute ago, rkit said:

Ну так крути в двух, гениальный. А лучше настрой DMA.

не умею. ищу исполнителя. и вроде об этом пишу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 минут назад, alexan300 сказал:

 я и повесил их на разные. но крутяться они у меня в одном лупе

Надо не в лупе их крутить, а ДМА раскорчегарить :).

По сути вопрос сводится к тому, насколько высоко позволит конкретная SD-карта поднять частоту клока SPI, а не от искусства программиста.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, alexan300 said:

не умею. ищу исполнителя. и вроде об этом пишу.

Лучше ищите на всю задачу. И без Ардуино.

 

Just now, Xenia said:

По сути вопрос сводится к тому, насколько высоко позволит конкретная CD-карта поднять частоту клока SPI, а не от искусства программиста.

Нет, не сводится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, alexan300 said:

предыдущий опыт. Не один разработчик указывал на это узкое горлышко, плюс сам смотрел графики в анализаторе. видно, что когда сд карта пишет, ацп прерывается .

Я не знаток возможностей вашего STM, а нельзя зделать вытясняющую многозадачность, где у карты приоритет меньше чем у АЦП?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, alexan300 сказал:

гениально ! ) я и повесил их на разные. но крутяться они у меня в одном лупе

Наконец-то доползли до сути проблемы. :biggrin:

Забываем о суперлупе, переделываем всю работу под любую РТОС. На две задачи: 1) работа с АЦП; 2) работа с файловой системой на SD-карте. Приоритет 2-й задачи ниже чем у 1-й. И проблема решается. Можно даже без DMA и на одном ядре.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, aaarrr said:

Лучше ищите на всю задачу. И без Ардуино.

на ВСЮ точно не надо. Есть необходимость только в реализации записи на карту.

Нет, не сводится.

 

6 hours ago, jcxz said:

Наконец-то доползли до сути проблемы. :biggrin:

Забываем о суперлупе, переделываем всю работу под любую РТОС. На две задачи: 1) работа с АЦП; 2) работа с файловой системой на SD-карте. Приоритет 2-й задачи ниже чем у 1-й. И проблема решается. Можно даже без DMA и на одном ядре.

Таки да! но половина слов, мне чужда. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, _4afc_ said:

Я не знаток возможностей вашего STM, а нельзя зделать вытясняющую многозадачность, где у карты приоритет меньше чем у АЦП?

STM ? нет.. ESP32) Я сейчас и копаю в этом направлении. пытаюсь менять приоритеты работы ядер, в зависимости от того, заполнен ли буфер с полезными данными или еще нет. Ну и опять же.. WDT покоя не дает. 

1 minute ago, ivnor said:

Ардуино это тормоз сама по себе

Да. я в начале  и написал, что далее потребуется оптимизация некоторых библиотек. Я почитал, это уже тривиальная задача. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 задействовать, только смысла нет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 минут назад, Lelikk сказал:

4. Пока ADC заполняет половину буфера - вторая половина сбрасывается на SD, потом меняется. Размер буфера определяется соотношением максимальной задержки записи (250ms?) и скорость, с какой вы данные накапливаете.

5. Как только это заработает - можно подключать DMA для сброса буфера на SD, чтобы разгрузить процессор для других задач (если они есть). Тут достаточно одного ядра с огромным запасом. Можно еще один канал DMA и для ADC задействовать, только смысла нет.

Ну да, только забыли сущий пустяк: ТС наверняка работает с SD через файловую систему. И использует для этого какое-то готовое middleware (типа FatFS). Которое тоже почти наверняка работает в блокирующем режиме. Так что 6-м (и самым главным!) пунктом будет - переписать это самое middleware в неблокирующий режим. Да ещё как-то скрестить его с этим самым двойным буфером. А эта задача и профессионалу не всякому по плечу будет, и главное, что по сложности она в разы превысит все остальные пункты вместе взятые.  :biggrin:

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

Так как Вы описываете, будет работать только если без ФС. Но "без ФС" я думаю, что и вообще SD-карта не нужна, а удобнее использовать какой-либо чип SPI FLASH.

 

PS: Так что - или крестик сними или трусы надень или делим суперлуп на задачи или избавляемся от ФС.

PPS: При желании "задачу" работы с АЦП можно сделать в виде псевдозадачи, на прерываниях и автомате состояний внутри. А работу с ФС - в фоновом цикле. И формально обойтись без РТОС. Но для начинающего это, имхо, будет сложнее, чем разобраться в работе из под РТОС. Да и смысла особого нет для такой примитивной задачи как у ТС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, jcxz said:

Ну да, только забыли сущий пустяк: ТС наверняка работает с SD через файловую систему. И использует для этого какое-то готовое middleware (типа FatFS). Которое тоже почти наверняка работает в блокирующем режиме. Так что 6-м (и самым главным!) пунктом будет - переписать это самое middleware в неблокирующий режим. Да ещё как-то скрестить его с этим самым двойным буфером. А эта задача и профессионалу не всякому по плечу будет, и главное, что по сложности она в разы превысит все остальные пункты вместе взятые.  :biggrin:

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

Так как Вы описываете, будет работать только если без ФС. Но "без ФС" я думаю, что и вообще SD-карта не нужна, а удобнее использовать какой-либо чип SPI FLASH.

 

PS: Так что - или крестик сними или трусы надень или делим суперлуп на задачи или избавляемся от ФС.

PPS: При желании "задачу" работы с АЦП можно сделать в виде псевдозадачи, на прерываниях и автомате состояний внутри. А работу с ФС - в фоновом цикле. И формально обойтись без РТОС. Но для начинающего это, имхо, будет сложнее, чем разобраться в работе из под РТОС. Да и смысла особого нет для такой примитивной задачи как у ТС.

Если у ТС задача состоит всего из двух пунктов

1. Считать АЦП

2. Записать на SD.

Запускать АЦП в обработчике прерывания таймера.

А FatFs пускай себе блокирует что хочет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Lelikk said:

. Буфер организуете из двух половин, как только одна половида заполнилась - заполняете другую

Тогда уж классический кольцевой буфер сделать. Я тоже делал двойные буферы по типу фрейм-буферов для экранов. Но, ИМХО, это излишняя работа. Тем более кольцевой буфер, будучи оформленным в виде класса/библиотеки/репозитария/чего_то_ещё пригождается автоматически и в других задачах: работа с последовательны портом (ну это классика), сбор данных (собственно задача автора) и т.п.

26 minutes ago, dimka76 said:

Если у ТС задача состоит всего из двух пунктов

Как правило, снова же ИМХО, редко задача вот так просто ограничивается парой пунктов. Обычно завтра выясняется, что неплохо бы ещё дисплей с кнопочками добавить, эзернет 10 Гбит и вытащить наружу пару usb... Поэтому не стоит писать сразу неправильно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, jcxz said:

Ну да, только забыли сущий пустяк: ТС наверняка работает с SD через файловую систему. И использует для этого какое-то готовое middleware (типа FatFS). Которое тоже почти наверняка работает в блокирующем режиме. Так что 6-м (и самым главным!) пунктом будет - переписать это самое middleware в неблокирующий режим. Да ещё как-то скрестить его с этим самым двойным буфером. А эта задача и профессионалу не всякому по плечу будет, и главное, что по сложности она в разы превысит все остальные пункты вместе взятые.  :biggrin:

Не будет блокировать она ничего - данные будут собираться в прерывании. Если задача действительно ограничивается описанным ТС, то этого неуниверсального решения будет достаточно, чтобы обойтись и без RTOS и не менять прослойку работы с SD.

Какой там буфер будет - кольцевой или нет, это вообще мелочи.

Но все равно - как ни делай, быстрее 4-5 дней стабильное решение не получится. Так что мечты про 9 т.р. ТС может забыть, а студент будет ему месяц делать в лучшем случае.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...