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

alexan300

Участник
  • Постов

    159
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о alexan300

  • Звание
    Частый гость
    Частый гость

Посетители профиля

1 286 просмотров профиля
  1. ЭЙ. господин супер умный. я не программист разработчик. Я человек, который его ищет. Хватит упражняться в остроумии. Не интересен заказ? тогда зачем лезть сюда? Времени много свободного? Админы.. куда смотрите? что за флуд допускаете?
  2. Чем больше у меня буфер, тем дольше идет записть на карту памяти и тем более пропуски в чтении исходного сигнала. Не получается большой буфер быстро залить. deley требуют по даташиту. не именно его, но вот задержку между поднятием уровня CS и началом чтения необходимо выждать.
  3. Вмешаюсь. Задача очень простая. запись значений напряжений в нч диапазоне. ВСЕ!. даже я со своими минимальными знаниями с применением фриртос, получаю результаты. косые, корявы, но получаю. На осцилограммах я вижу, что процессы чтения и записи параллельные. Да. лучше б гонорары зарабатывали. Хей! специалисты , собираю ваши предложения в личку!. ) никому деньги не нужны?
  4. Благодарю Вас за ответ, наконец то увидел желаемые суммы за оплату. Но я уверен что Вам 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 */ Видно, в первой инициализации, указанно ядро, во второй же, нет. Сейчас, приглашаю всех заинтересованных в этом проекте, писать в личку, с указанием желаемых сумм, сроков и порядке оплат. А то тут уже холивар начинается. Как на строительном форуме, где спорят сторонники пенополистерола и минваты)). В свою очередь, я всех более подробно ознакомлю с проектом, для более адекватной оценки работ.
  5. А что значит "полностью"? полностью код куда обширнее, включает дополнительные библиотеки, функции управления ацп, библиотеку с оптокодами, и тд и тп. их зачем трогать? Мне лишь надо поместить данные с ацп, на карту памяти. и все. и у меня этих "переписчиков\переразводчиков\схемотехников " было не мало. Простую часть задачи исполнят, деньги возьмут, а далее в кусты..
  6. Я тут и ищу того, кто сделает его рабочим. Как сразу записать блоком? такого в примерах библиотеки не нашел.
  7. 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 частично спасает от собаки.
  8. Так может есть кто разберется со вторым ядром и сторожевыми собаками? запустив работу библиотеки карты памяти, на втором ядре, можно забыть про PTOC DMA и прочих страшных словах для меня. Я просто уверен, что допускаю какую то неточность в обьяснении из за чего у многих в голове возникают такие сложные объяснения, наверняка простой и стандартной процедуры. Я сегодня выложу сюда код лупа и функции работающим на втором ядре. Сейчас я застрял на том, что не могу передать массив из 16000 значений во второй "луп". Тоесть вроде как мне удалось абстрагироваться от проблем с записью на карту памяти. но за это получив новые. Всех благодарю за обсуждение. Не расходитесь. Призовой фонд ждет своего победителя)
  9. STM ? нет.. ESP32) Я сейчас и копаю в этом направлении. пытаюсь менять приоритеты работы ядер, в зависимости от того, заполнен ли буфер с полезными данными или еще нет. Ну и опять же.. WDT покоя не дает. Да. я в начале и написал, что далее потребуется оптимизация некоторых библиотек. Я почитал, это уже тривиальная задача.
  10. предыдущий опыт. Не один разработчик указывал на это узкое горлышко, плюс сам смотрел графики в анализаторе. видно, что когда сд карта пишет, ацп прерывается . не умею. ищу исполнителя. и вроде об этом пишу.
  11. гениально ! ) я и повесил их на разные. но крутяться они у меня в одном лупе
×
×
  • Создать...