Jump to content

    

alexan300

Участник
  • Content Count

    155
  • Joined

  • Last visited

Community Reputation

0 Обычный

About alexan300

  • Rank
    Частый гость

Recent Profile Visitors

945 profile views
  1. Вмешаюсь. Задача очень простая. запись значений напряжений в нч диапазоне. ВСЕ!. даже я со своими минимальными знаниями с применением фриртос, получаю результаты. косые, корявы, но получаю. На осцилограммах я вижу, что процессы чтения и записи параллельные. Да. лучше б гонорары зарабатывали. Хей! специалисты , собираю ваши предложения в личку!. ) никому деньги не нужны?
  2. Благодарю Вас за ответ, наконец то увидел желаемые суммы за оплату. Но я уверен что Вам 8 часов не понадобится на изучение нашей системы. Там реально все не сложно, и взято из даташитов. и потом проверенно и перепроверенно. Операционная система реального времени, мне импонирует все больше и больше. так как ранее высказывающие товарище, верно заметили, что после записи на карту понадобятся доп функции. экраны, блютузы и тд. Пока не могу понять, FREERtos она на ESP32 работает с двумя ядрами, или все же с одним? и потоки лишь псевдо распарралеливаются? Сейчас у меня впечатление, о том что работает ОС на одном ядре. например: xTaskCreatePinnedToCore( 21 Task1code, /* Функция задачи */ 22 "Task1", /* Название задачи */ 23 10000, /* Размер стека задачи */ 24 NULL, /* Параметр задачи */ 25 1, /* Приоритет задачи */ 26 &Task1, /* Идентификатор задачи, 27 чтобы ее можно было отслеживать */ 28 0); /* Ядро для выполнения задачи (0) */ и xTaskCreate( anotherTask, /* Task function. */ "another Task", /* name of task. */ 10000, /* Stack size of task */ NULL, /* parameter of the task */ 1, /* priority of the task */ NULL); /* Task handle to keep track of created task */ Видно, в первой инициализации, указанно ядро, во второй же, нет. Сейчас, приглашаю всех заинтересованных в этом проекте, писать в личку, с указанием желаемых сумм, сроков и порядке оплат. А то тут уже холивар начинается. Как на строительном форуме, где спорят сторонники пенополистерола и минваты)). В свою очередь, я всех более подробно ознакомлю с проектом, для более адекватной оценки работ.
  3. А что значит "полностью"? полностью код куда обширнее, включает дополнительные библиотеки, функции управления ацп, библиотеку с оптокодами, и тд и тп. их зачем трогать? Мне лишь надо поместить данные с ацп, на карту памяти. и все. и у меня этих "переписчиков\переразводчиков\схемотехников " было не мало. Простую часть задачи исполнят, деньги возьмут, а далее в кусты..
  4. Я тут и ищу того, кто сделает его рабочим. Как сразу записать блоком? такого в примерах библиотеки не нашел.
  5. while (pg < 16000) { // //чтение данных из АЦП: 1000 кадров 8 каналов по 2 байта каждый канал while (digitalRead(DRDY) == 1); //{ //ожидание готовности данных DRDY=0 delayMicroseconds(2); digitalWrite(SpiCS, LOW); for (i = 0; i < 3; i++) hspi->transfer(0x00); //пустые чтение Статуса for (i = 0; i < 8; i++) { //hspi->transfer(0x00); //пустое чтение старшего байта Result[pg++] = hspi->transfer(0x00); //чтение и запись старшего байта Result[pg++] = hspi->transfer(0x00); //чтение и запись среднего байта //Result[pg++] = hspi->transfer(0x00); //чтение и запись среднего байта88 hspi->transfer(0x00); //пустое чтение младшего байта } delayMicroseconds(2); digitalWrite(SpiCS, HIGH); } j = 0; while (pg < 16000) { //вывод данных в UART: 1000 кадров 8 каналов по 2 байта каждый канал for (i = 0; i < 8; i++) { pg = 0; pg = ((Result[j++] << 8) | Result[j++]); //преобразовать в 2х байтное слово // pg =>>3; Serial.print(pg, DEC); Serial.print("\t"); //данные каналов разделяются табуляцией // myFile.print(pg);myFile.print("\t"); } Serial.println(""); // } // myFile.close(); } скетч сверху, понятно дело, транслирует данные на сериал порт, по две секунды записи. закоменчены попытки вместо отправки в порт, писать на карту памяти. в этом случае всегда пропадает часть сигнала. скрины с лог анализатора. пакеты с ацп разделяются 3.9 милисек. второй скрин, одномоментная запись на карту памяти и чтение с ацп в буфер. Как видно, что друг другу перефрия не мешает. Но возникает проблема обусловленая ватчдогом, и данные у меня переносятся с одного процесса в другой с нарушением. Каким? пока выясняю. скетч сверху, понятно дело, транслирует данные на сериал порт, по две секунды записи. закоменчены попытки вместо отправки в порт, писать на карту памяти. в этом случае всегда пропадает часть сигнала. скрины с лог анализатора. пакеты с ацп разделяются 3.9 милисек. второй скрин, одномоментная запись на карту памяти и чтение с ацп в буфер. Как видно, что друг другу перефрия не мешает. Но возникает проблема обусловленая ватчдогом, и данные у меня переносятся с одного процесса в другой с нарушением. Каким? пока выясняю. Далее код для второго ядра: void Task1code( void * pvParameters ) { Serial.println("номер процуссора--"); Serial.println(xPortGetCoreID()); //TIMERG0.wdt_wprotect=TIMG_WDT_WKEY_VALUE; //TIMERG0.wdt_feed=1; //TIMERG0.wdt_wprotect=0; for (;;) { myFile = SD.open("1.txt", FILE_WRITE); j = 0; while (pg < 16000) { //вывод данных в сд: 1000 кадров 8 каналов по 2 байта каждый канал for (i = 0; i < 8; i++) { pg = 0; pg = ((Result[j++] << 8) | Result[j++]); //преобразовать в 2х байтное слово // pg =>>3; // Serial.print(pg, DEC); Serial.print("\t"); //данные каналов разделяются табуляцией myFile.print(pg);myFile.print("\t"); } //Serial.println(""); } vTaskDelay (10); } // vTaskDelete( NULL ); //esp_task_wdt_reset ( ) ; } и да, сверху такое добавил #define CONFIG_INT_WDT_TIMEOUT_MS 3000 частично спасает от собаки.
  6. Так может есть кто разберется со вторым ядром и сторожевыми собаками? запустив работу библиотеки карты памяти, на втором ядре, можно забыть про PTOC DMA и прочих страшных словах для меня. Я просто уверен, что допускаю какую то неточность в обьяснении из за чего у многих в голове возникают такие сложные объяснения, наверняка простой и стандартной процедуры. Я сегодня выложу сюда код лупа и функции работающим на втором ядре. Сейчас я застрял на том, что не могу передать массив из 16000 значений во второй "луп". Тоесть вроде как мне удалось абстрагироваться от проблем с записью на карту памяти. но за это получив новые. Всех благодарю за обсуждение. Не расходитесь. Призовой фонд ждет своего победителя)
  7. STM ? нет.. ESP32) Я сейчас и копаю в этом направлении. пытаюсь менять приоритеты работы ядер, в зависимости от того, заполнен ли буфер с полезными данными или еще нет. Ну и опять же.. WDT покоя не дает. Да. я в начале и написал, что далее потребуется оптимизация некоторых библиотек. Я почитал, это уже тривиальная задача.
  8. предыдущий опыт. Не один разработчик указывал на это узкое горлышко, плюс сам смотрел графики в анализаторе. видно, что когда сд карта пишет, ацп прерывается . не умею. ищу исполнителя. и вроде об этом пишу.
  9. гениально ! ) я и повесил их на разные. но крутяться они у меня в одном лупе
  10. Проблема в том, что я на карте памяти, получаю записанный сигнал с искажениями, вызванными тем, что два SPI устройства мешают друг другу. Вообще я уверен, что есть типовое решение вопроса, ибо зачем тогда столько SPI шин контроллеру? писать раз в секунду значения температур? но не чаще.?. Не фрагментированные карты памяти рассматриваю в последнюю очередь. у меня уже есть под них библиотеки. но не удобное использование в дальнейшем предвижу. критерий и оценки прост и понятен. открываем записанный сигнал и смотрим в графопостроители (поверграф например). есть пропуски- плохо. нет, отлично. Дабы не мудрить с источником внешнего сигнала. можно например создать синус и в цикле его крутить. Конкретные параметры тестового синуса, выясним.
  11. Видимо мне нужно более обширно описать задачу. есть ацп с SPI ШИНОЙ которая в режиме реального времени выдает значения. CS при работе ацп, в HIGHT находиться 3 милисек. И эта задержка не вносит видимых искажений в сигнал.если его я транслирую в сериал порт (250000 бот сек). Как только я подключаю режим записи на карту памяти, то CS увеличивается до 50-100 милисек., (в разных режимах работы SPI, разные задержки). Соответственно записанный сигнал у меня с пропуском, заметным не вооруженным глазом. Я варьировал величины буфера. но получал либо много мелких задержек, либо мало, но крупных. Сейчас пришел к такому решению. подключил под работу с SD ядро 0. и очень все прилично выглядит на логическом анализаторе. идут параллельно два процесса, и чтение и запись. но возникают конфликты собак. (wdt). и как следствие постоянные ребуты. В принципе vTaskDelay (10); и #define CONFIG_INT_WDT_TIMEOUT_MS 3000 как то помогают. но ведь это костыли. Ну и из за моих скромных познаний в программировании. пока не получается передавать значения между void Task1code( void * pvParameters ) и void Task2code( void * pvParameters ), переменных, структуированно. и да. карты памяти использую 10 U3.
  12. День прошел.. 250 просмотра. 5 ответов не по существу) попробую обозначить гонорар в 9 тр. и облегчить задачу, таким намеком; esp32 двухядерный..
  13. Александер.. не стоит рассуждать о чужих бюджетах. ок? хватит или не хватит, дело лишь меня и кандидата. В буфер я и сам их класть горазд. а вот при переносе с буфера, процесс записи тормозит основную работу. чтение с ацп. Вообщем кто возьмется, все покажу через тим вывер, все таиминги в анализаторе.