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

Rev0.0

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

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

  • Посещение

Репутация

0 Обычный

Информация о Rev0.0

  • Звание
    Участник
    Участник
  1. Илья, верно, ваш вариант будет работать. НО! Есть вероятность зависания task2 в цикле если задача task1 постоянно принимает данные. Для корректной реализации вашего случая подойдет алгоритм Деккера, но я не хотел заниматься реализацией критических секций - хотелось бы использовать сервисы RTOS ибо они уже есть, поэтому и взял мьютексы.
  2. 501-q, зачем вы указали цикл в task2, мне же нужны только последние данные цикл не нужен. Да и как без мьютексов, блок из трех переменных - единый, а в вашем коде задача может прервать операцию присваивания на одной из переменных и целостности блока не будет.
  3. Может быть я задачу как-то непонятно описал. Я же просто привел вариант когда нужно в задаче выполнять периодически действия - как вы это сделаете без os_delay? Аппаратный таймер, который шлет задаче семафор? Да, можно, но вопрос не в этом. Как вы строите архитектуру с RTOS - все задачи чего-то ждут? У меня в проекте 10 задач и некоторые ждут, а некоторые периодически выполняются. Тем задачам, что выполняются периодически нужна связь с ожидающими. Про очередь - хорошая идея, но как я писал выше мне нужны только последние данные - нет смысла в очереди. Тем более мне нужна очередь с нулевым временем ожидания. Кстати для решения того, что вы описали с нечетким периодом выполнения задач в FreeRTOS, например, есть vTaskDelayUntil.
  4. В смысле? Если мне нужно чтобы каждая задача выполнялась периодически, одна с периодом 1 мс, другая 10 мс, третья 100 мс, все задачи с разным приоритетом. Как вы это сделаете? os_delay как раз и нужна для того, чтобы когда высокоприоритетная задача отработала другие имели возможность тоже сделать это. Иначе вся ОС без os_delay будет работать в бесконечном цикле только в одной задаче с самым высоким приоритетом.
  5. Сергей Борщ Ах да, забыл сказать, что task2 нельзя делать ожидающей, задумано так, что она должна работать каждый тик, поэтому лишние переключения нежелательны. Также нежелательно юзать мьютексы каждый раз при входе в задачу, т.к. они довольно ресурсоемки да и задачи выполняют еще какой-то код помимо кода обмена данными. По этим причинам у меня и возникла идея проверять флаг каждый тик и затем если флаг TRUE, то тогда уже используем лок мьютексом.
  6. Привет! Вот мучаюсь и все тут, нужен свежий взгляд. Ниже привел псевдокод, который по моему мнению должен нормально работать. Имеем некоторую RTOS и 2 задачи для простоты. Задача task1 имеет приоритет выше, чем task2. Задача task1 висит в ожидании данных от некоторой периферии. Задача task2 должна принимать ПОСЛЕДНИЕ данные от task1, т.е если задача task1 получила скажем 10 буферов данных, то нам нужен в task2 только последний буфер, остальные можем безболезненно потерять (т.е. очередь не нужна). Важное условие - код task2 должен выполняться как можно быстрее, поэтому я мьютекс поместил внутрь опроса флага, т.е. чтобы данные блокировались только когда они пришли, а не каждый цикл выполнения task2. Прав ли я с таким кодом, покритикуйте, пожалуйста. int a,b,c; int buf[3]; task1 { while(1) { if (wait_peri_data(&buf)) { mutex_lock(); a = buf[0]; b = buf[1]; c = buf[2]; mutex_unlock(); peri_data_available = 1; } os_delay(1); } } task2 { int a_task, b_task, c_task; while(1) { if (peri_data_available) { mutex_lock(); a_task = a; b_task = b; c_task = c; mutex_unlock(); peri_data_available = 0; } os_delay(1); } }
  7. des00, спасибо, действительно полезный документ, почитаю, поразбираюсь.
  8. Дело в том, что я знаю только в общих чертах, а вот как конкретно это делать на практике не в курсе. Подробнее. У меня есть массивы данных x(t) и y(t), допустим 200 точек с дискретом 5 мс. Я их загоняю в Matlab в System Identification Tool. Выбираю тип процесса Process Models, 2 полюса + интегратор. Matlab выдает мне коэффициенты Kp, T1, T2, L. Дальше мне необходимо реализовать функцию на c/c++, на вход которой я буду давать массив значений x(t), а на выходе буду получать y(t) на основе полученной ПФ. Как мне перейти от Matlab-а к коду? Я на пальцах вроде понимаю, что это либо фильтр (КИХ, БИХ) должен быть, либо дифф.ур. нужно численно решать. Вот и нужны подсказки по дальнейшим шагам.
  9. Привет! Задача следующая. У меня есть набор экспериментальных данных x(t) и y(t). По этим данным я в Matlab могу получить передаточную функцию системы (коэффициенты). Допустим система с высокой достоверностью описывается моделью второго порядка с ПФ: W(s) = (Kp * e^-sL) / ((sT1 + 1) * (sT2+1)). Теперь мне нужо реализовать цифровой фильтр с этой ПФ, на входе которого будет некий сигнал x(t), а на выходе y(t). Подскажите какие шаги нужно выполнить? В целом, для стандартных моделей 1-ого и 2-ого порядка думаю должны быть готовые решения (уравнения), как они выглядят, где почитать? Спасибо.
  10. Написано, да, но вот не понятно мне, примера разъемного соединения там нет. У меня кабель, который будет соединять 2 платы, на этот кабель хочу сделать отдельную схему. Как на Э4 обозначить разъемы на этом кабеле? Можно пример какой-нибудь, пусть даже не по ГОСТу, но толковый, чтобы человек, который будет на схему смотреть понял что и куда подключать. Вот для примера. У всех блоков есть разъем XP1 - это вилки, у блока A3 есть вилка XP1 и розетка XS1. Есть 2 кабеля с розетками на концах XS1-XS2 и XS3-XP2. Сейчас вроде все нормально обозначено, но если у плат есть много разъемов XPn, XSn, то как избежать путанницы при обозначении внутри плат и разъемов кабелей?
  11. Привет! Есть изделие, которое состоит из нескольких плат (блоков). На платах - разъемы, которые имеют какую-то нумерацию внутри платы, например XP1, XP2, XS5... и.т.д. Платы соединяются между собой кабелями с соединителями. Подскажите как нумеровать соединители на кабелях, которые соединяют платы? Пример. Есть блок A1, у него разъемы XP1, XP2, XP3, XS1, XS2. Есть блок A2, у него разъемы XP1, XP2, XS1. Допустим разъем XP1 блока A1 нужно соединить с разъемом XP2 блока A2. Как в этом случае обозначить и пронумеровать разъемы на соединительном кабеле? Нужно ли вводить на схеме Э4 свою нумерацию разъемов блока? Я бы обозначил соединители на кабеле как XS1 и XS2, но эти обозначения уже есть на платах?
  12. Спасибо за подсказки. Конверсия бинарника в .h-файл как-то вылетела из головы. Скачал srecord... Наверное мощная утилита, но разобраться не удалось, почитал мануал, ввожу команды - не работает. Набираю -Help, выдает "can't find input file" - странно если честно. В итоге нашел вот эту простую утилитку.
  13. Привет! Работаю в среде Keil с микроконтроллером LPC1766. У меня есть большой бинарный файл, который находится на ПК. Я хочу его прошить во флеш МК по заданному адресу в неизменном виде, чтобы потом была возможность передать этот файл по какому-либо интерфейсу из микроконтроллера. Есть ли способы сделать это из среды Keil? В голову пришел только один способ - редактировать HEX файл прошивки, но, может быть, проще можно?
  14. Привет. Подскажите какие есть виды управления, например, с помощью ПИД-регулятора, с помощью которых можно получить необходимую форму регулируемой величины. Ну, к примеру, есть нагреватель и датчик температуры. Мне нужно управлять нагревателем так, чтобы температура изменялась по синусу, экспоненте, т.е. по заданной функции. Единственный вариант, который есть в голове - это изменение уставки по заданной функции, но этот вариант работает с запаздыванием, т.к. необходимо определенное время чтобы отрегулировать величину, которая постоянно меняется, т.е. он годится если частота опроса датчика выше частоты управления, а если они равны какие способы есть?
×
×
  • Создать...