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

alexan300

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

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

  • Посещение

Сообщения, опубликованные alexan300


  1. 22 hours ago, bzx said:

    Для ТС это бесполезно. Он никак не может уловить основную доносимую до него мысль, что писать многозадачный код с использованием deley-ев нельзя. Он считает, что второе ядро его спасет... При таком подходе и 3х, и более ядер не хватит. В подобных deley-кодах основное время тратится именно на deley.

    ЭЙ. господин супер умный. я не программист разработчик. Я человек, который его ищет. Хватит упражняться в остроумии. Не интересен заказ? тогда зачем лезть сюда? Времени много свободного?

    Админы.. куда смотрите? что за флуд допускаете?

  2. 2 hours ago, bzx said:

    Нет.

    По существу Вам ответили несколькими постами выше. Поясню. Вам кажется, что сегментировав задачу на ряд "независимых" и казалось бы унитарных подфункций, Вы сможете решить общую задачу без какой либо, казалось бы, необходимости глубокого понимания функционирования аппаратных блоков. Отсюда у Вас и появляется необходимость задействовать второе ядро, уникальные, взятые с потолка, требования к записи на SD-карту. По сути, Вы начинаете бороться с ветряными мельницами. Начните с того, что перепишите имеющиеся функции, убрав из них delay и подобный г-код.

    Ещё раз, как уже было выше сказано, только буферизация для работы с SD Вас спасет. Если у Вас конечное изделие в "батарейном" исполнении, то делайте буферизацию по максимум, вплоть до 1 записи в минуту и более. Если писать чаще, то контролер SD-карты сожрет все питание очень быстро. Забудьте про скорость с постоянной и гарантированной записью в несколько мкс.

     

     

    Чем больше у меня буфер, тем дольше идет записть на карту памяти и тем более пропуски в чтении исходного сигнала. Не получается большой буфер быстро залить. 

    deley требуют по даташиту. не именно его, но вот задержку между поднятием уровня CS и началом чтения необходимо выждать. 

  3. 9 hours ago, haker_fox said:

    Знаете, у меня то же самое мнение по поводу ваших ответов)

     

    Прежде всего, давайте выражаться технически понятно. Что значит "смешно"? Что значит "элементарные связки задач"? Вы откуда такую терминологию берёте?

    Вывод, построенный непонятно на каких критериях: "смешно" и "элементарные связки".

     

    Давайте пойдём следующим образом. У нас есть микроконтроллер уровня Cortex-M0, 8 кБ ОЗУ, 16 кБ ЭСПЗУ. Нам нужно мигать 8 (восьмью) светодиодами. Просто мигать с разными частотами. Что мне мешает взять ОСРВ, такую кроху, как scmRTOS? Естественно, что задачу в приведённом виде можно решить и без ОС, и даже без МК, построив восемь генераторов на к155ла3) Теперь вопрос, а что выбрать? Я привык смотреть немного в будущее, и мой опыт говорит о том, что редко задача ограничивается просто миганием светодиодами. Вполне возможно, что завтра для изменения режима мигания понадобится интерфейс пользователя. Это может быть как одна кнопка, висящая на GPIO, так и любой другой, например тач-скрин, старый добрый RS-232 или даже Wi-Fi. При наличии любого интерфейса сложнее кнопки мы сразу пролетаем с любым железным решением, будь это генераторы или ПЛИС (не спорю, на ПЛИС можно сгородить всё необходимое, но это может оказаться дороже, чем использование МК). На микроконтроллере же добавить необходиму функциональность не так сложно, при умении программировать его периферию и ориентироваться в стандарте необходимых интерфейсов. Вот только сложность ПО возрастает многократно, если работать в концепции конечных автоматов и без вытесняющей многозадачности, которая, как вы сами сказали

    Учитывая, что у автора темы задача хоть и "простая", всё же это не мигание светодиодами. Там есть сбор данных, там есть какая-то обработка. Так зачем себя изначально загонять в угол? Более того, никто же не призывает туда присобачивать ucLinux или ecos. Системы уровня TNKernel, scmRTOS, FreeRTOS со статической сборкой вполне достаточно. У меня у самого с FreeRTOS работает система сбора данных на частоте сэмплирования 1 МГЦ, оцифровывая три канала квадратурных датчика, 8 аналоговых 12-битных каналов и 8 дискретных каналов. Микроконтроллер LPC4337, задействован модуль SGPIO, упрощающий обработку дискретных данных. При этом в системе поднята сеть, выполняется математика (знаю, звучит абстрактно), имется работа с файлами.

    Вмешаюсь. Задача очень простая. запись значений напряжений в нч диапазоне. ВСЕ!. даже я со своими минимальными знаниями с применением фриртос, получаю результаты. косые, корявы, но получаю. На осцилограммах я вижу, что процессы чтения и записи параллельные. 

    20 minutes ago, x893 said:

    Пять страниц бреда. Вот у людей времени свободного много.

    Да. лучше б гонорары зарабатывали.

    Хей! специалисты , собираю ваши предложения в личку!. )

    никому деньги не нужны?

  4. 5 hours ago, haker_fox said:

    Сказки. Во встраиваемом ПО так не бывает (бывает, но изредка) что мы только "трогаем" модуль A, а модули B, C, D остаются незамеченными. Вы же не для компьютера программу пишите, где разные программы работают действительно более-менее изолированно друг от друга. В вашем случае может оказаться так, что какое-нибудь прерывание или процесс из другого куска кода блокирует наше рабочее прерывание сбора данных. И придётся лезть в него, чтобы это поправить. Или придумывать обходной путь. И это я ещё про проблемы с железом молчу. Только не говорите, что их нет. Не поверю. Они почти всегда вылазят в виде помех от импульсника, или, в случае шины, срабатывающих TVS от выбросов на фронтах импульсов, или паразитной запитки микроСД и т.п. и т.д. Если вы программируете для встраиваемых систем и у вас есть хороший опыт (сомневаюсь), вы просто должны знать об этом. И 9 тысяч за такую работу, извините - смех. При стоимости рабочего дня 5 тысяч рублей я не уверен, что справлюсь с вашей задачей (где нет даже ОСРВ) за 1.8 рабочих дня (9 тысяч / 5 тысяч) или 14.4 часа. На одно только понимание, как устроена ваша система может потребоваться часов 8 рабочего времени. Минимум, на 40 тысяч вам стоит расчитывать, это стандартные 5 рабочих дней по 8 часов.

    Благодарю Вас за ответ, наконец то увидел желаемые суммы за оплату. Но я уверен что Вам 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. 3 minutes ago, aaarrr said:

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

    а) напишет грамотный код

    б) сделает это в ардуиновской среде

    в) научит его использовать далее

    И все это (особенно последний пункт) за 9 т.р. Так не бывает.

     

    Очевидно, сформировав его сначала в памяти.

    А что значит "полностью"? полностью код куда обширнее, включает дополнительные библиотеки, функции управления ацп, библиотеку с оптокодами, и тд и тп. их зачем трогать?

    Мне лишь надо поместить данные с ацп, на карту памяти. и все. 

     и у меня этих "переписчиков\переразводчиков\схемотехников " было не мало. Простую часть задачи исполнят, деньги возьмут, а далее в кусты.. 

  6. 32 minutes ago, vguard said:

    1. Код не рабочий. Второй и третий циклы while (pg < 16000) будут либо бесконечными, либо завершаться в разных местах.

    2. Писать на SD большой кусок побайтово плохая идея. Пишите большими блоками.

    Я тут и ищу того, кто сделает его рабочим. 

    Как сразу записать блоком? такого в примерах библиотеки не нашел.

  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();
    }

    логи.png

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

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

     

    скрины с лог анализатора. пакеты с ацп разделяются 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. 10 hours ago, _4afc_ said:

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

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

    1 minute ago, ivnor said:

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

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

     

  10. 10 hours ago, aaarrr said:

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

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

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

     

    6 hours ago, jcxz said:

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

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

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

  11. 1 minute ago, _4afc_ said:

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

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

    1 minute ago, rkit said:

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

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

  12. 38 minutes ago, _4afc_ said:

    Почему вы уверены, что причина в источнике (2 SPI),  а не в приёмнике (SD) ?

    Я и пишу о проблеме в приемнике  в карте. С чего вы решили что я грешу на ацп?

     

    А что будет, если сейчас крутить 2 тестовых синуса?

     

    Кто неуспевает:

    1 генераторы

    2 библиотека записи

    3 карта

    ?

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

     

     

  13. Проблема в том, что я на карте памяти, получаю записанный сигнал с искажениями, вызванными тем, что два SPI устройства мешают друг другу. Вообще я уверен, что есть типовое решение вопроса, ибо зачем тогда столько SPI шин контроллеру? писать раз в секунду значения температур? но не чаще.?. 

    Не фрагментированные карты памяти рассматриваю в последнюю очередь. у меня уже есть под них библиотеки. но не удобное использование в дальнейшем предвижу. 

    критерий и оценки прост и понятен. открываем записанный сигнал и смотрим в графопостроители (поверграф например). есть пропуски- плохо. нет, отлично. 

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

     

  14. Видимо мне нужно более обширно описать задачу. есть ацп с 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. 

  15. Александер.. не стоит рассуждать о чужих бюджетах. ок? хватит или не хватит, дело лишь меня и кандидата.  В буфер я и сам их класть горазд. а вот при переносе с буфера, процесс записи тормозит основную работу. чтение с ацп. Вообщем кто возьмется, все покажу через тим вывер, все таиминги в анализаторе. 

  16. Отчаянно разыскиваю пунктуального и ответственного программиста МК на Си. В текущий проект необходимо добавить библиотеку обеспечивающую быструю запись на карту памяти , с файловой системой FAT32 (лучше-больше). Сейчас трудится библиотека "esp32-micro-sdcard-master".  Контроллер ESP 32 на отладочной плате DEVKIT1.  IDE ПРЕСЛОВУТОЕ АРДУИНО. Что значит Быстрая? Библиотека должна успевать дописывать данные на карту памяти за 3 мсек. Размер пакетов 20 байт. Хорошо если будет реализован режим записи не SPI а Sd. 

    Далее потребуется оптимизация всего кода- функции типа Serial.port Digital.Read (write),

  17. Ищу начинающего специалиста, для создания библиотеки на паитон 3,7. Объем входящих данных порядка до 1 гб. Сами данные берутся с диска.  Задача библиотеки преобразовать данные из  16 -ричного формата в десятичный.  На выходе я должен получить в зависимости от заданного метода, либо последовательность str, последовательность int , либо массив str, массив int, либо последовательность массивов, либо все преобразованное сохранить в папке.  Описание  формата входящих данных прикладываю. там же пример преобразования,  16 - 10.  

    https://yadi.sk/d/nvDcJdHiEN2muA    15 мБ 

     

    3.500 руб. срок два дня 

    описалово.txt

  18. Разработчик механики, предназначенный для механотерапии (медицина). Первоначально согласовать эскиз устройства, далее моделирование в з д компас. Детализация задачи, в процессе переписки. Всем спасибо. 

  19. 12 hours ago, Linker said:

    Каналов там действительно меньше (три электрода), но зато эта микросхема не просто АЦП, а спец контроллер специально заточеный под снятие кардиограмм, не требует дополнительной обвязки и очень дешев. Причем это не игрушка, он используется во многих бытовых серийных кардиографах. 

     

    Это не так. 8232 как раз для хобби. Я написал про разрядность. если этих аргументов мало, то вот еще: как вы обеспечите одинаковый коэф усиления по всем каналам?  

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