Jump to content
    

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

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

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

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

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

Share this post


Link to post
Share on other sites

1 minute ago, _4afc_ said:

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

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

1 minute ago, rkit said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

Share this post


Link to post
Share on other sites

15 minutes ago, alexan300 said:

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

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

 

Just now, Xenia said:

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

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

Share this post


Link to post
Share on other sites

20 minutes ago, alexan300 said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

10 hours ago, aaarrr said:

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

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

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

 

6 hours ago, jcxz said:

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

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

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

Share this post


Link to post
Share on other sites

10 hours ago, _4afc_ said:

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

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

1 minute ago, ivnor said:

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

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

 

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

 

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

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

Share this post


Link to post
Share on other sites

5 minutes ago, jcxz said:

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

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

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

 

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

1 hour ago, Lelikk said:

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

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

26 minutes ago, dimka76 said:

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

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

Share this post


Link to post
Share on other sites

3 hours ago, jcxz said:

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...