Jump to content

    

juvf

Свой
  • Content Count

    1453
  • Joined

  • Last visited

Community Reputation

0 Обычный

About juvf

  • Rank
    Профессионал

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

5214 profile views
  1. ShareParam .h bool getDataFromAdc(void *data) {.....}; Protection.h void protection(void *data) {....}; mainTask.c #include "ShareParam.h" #include "Protection.h" void mainTask(void *context) { uint8_t data[128]; for(;;) { if(getDataFromAdc(data)); protection(data); delayMs(10); } } Это на вскидку.... можно void getDataFromAdc(void *data, bool *isNeedProtection = 0); Внутри getDataFromAdc, если isNeedProtection != 0, то вернуть бул.... можно как antis Даже если не нужна ртос и не нужно 2 задачи... то всё равно нужно отделять мух от котлет модули др от др.
  2. или вы задачу не правильно формулируете.... или .... Если не нужно выполнять два действия "параллельно", то зачем 2 задачи? У вас действия выполняются последовательно. Для того, что бы модули были независимы, не нужно разносить их в отдельные задачи, нужно их сделать независимыми. Например... первый модуль в ShareParam .h void getDataFromAdc(void *data) {.....}; второй модуль Protection.h void protection(void *data) {....}; Вот вам два абсолютно независимых модуля. Нет ни какого смешения логики. Оба модуля абсолютно абстрагированы др от др. Теперь задача mainTask.c #include "ShareParam.h" #include "Protection.h" void mainTask(void *context) { uint8_t data[128]; for(;;) { getDataFromAdc(data); pronection(data); delayMs(10); } } оба модуля работают совершенно независимо и последовательно. Если нужно собрать без защиты, просто закомментировать функцию protection() и #include "Protection.h" в задаче. Конечно, для практики с РТОС можно getDataFromAdc() вызывать в одной задаче, protection() вызывать в другой.... можно выделять память uint8_t data[128] в третей..... Можно и холоворд разбить на количество задач, равным кол-ву букв. Оверинженеринг.
  3. а если закомментировать вызов этой функции, то модуль ShareParam не сможет работать без модуля защиты? Что-то с каркасом не так. на сколько я понял, у вас два последовательный действия: 1) вычитка с ацп 2) проверка данных (модуль защиты). зачем их параллелить в 2 задачи?
  4. мингв съел. спасибо. (void)a не дает ни каких наставлений компилятору что аргумент не используется. это "формальное использование" аргумента. Он не используется, но чтобы компилятор не ругался, ему показывают, якобы он используется. костыль. имхо. в с++ это решается проще void f(int) { } Просто в определении не указывается имя.
  5. объявлена функция void f(int a); определена так void f(int a) { } компилятор СИ дает ворнинг - неиспользуемая переменная. переопределил так void f(int) { } компилятор дает ошибку parameter name omitted. костыль исправляет ситуацию void f(int a) { (void)a; } как ещё можно решить проблему?
  6. в си (а фриртос на си) нет булей. у тс нормальная строка. 2тс, попробуй так while(! (huart5.Instance->SR & UART_FLAG_TС) );
  7. Разобрался, спасибо. В гербере в тексте 79,5 мм.
  8. поставил FlatCAM, открыл гербер - ширина 79,5мм. открываю этот же гербер в KiCad - ширина 80 мм. Шаг сетки 0.1 мм. Производитель на своём оборудовании открыл в неизвестном мне просмотровщике, прислал скрины - ширина 80 мм. да, начало выставлено нормально. какие-то галочки в АД при экспорте нужно? Указываю мм 4:3, rs274x, в адвансетах так ... Какие-то разные форматы герберов бывают?
  9. AD 15.1 Простая прямоугольная плата. Делаю контур платы через Design->Board Shape->Create Primitives from board shape, размещаю в пустом механическом слое G20. В окошке Reports->Board Information... штрина платы 79.5 мм. Поползал курсором по механическому слою G20 - ширина контура получилась 79,5 мм. Отправил герберы на производство, они вернули, говорят в описании ширина платы 79,5, а сам гербер ширина 80 мм. Я по новой всё в АД перепроверил, сгенерировал свежие герберы, открыл их в KiCad другом просмотровщике герберров, измерил ширину, получил 80 мм. Почему АД генерирует неправильные герберы? ps AD16.0 также генерирует с ошибкой в 0,5 мм pcb_gerber.GM20
  10. STM32CubeIDE

    В путях до инсталлятора не должно быть кириллицы
  11. STM32CubeIDE

    зачем нужны коты нужен openocd? У вас st-link, stm32cudeide в которой есть по дефолту ST-LINK GDB SERVER. ps перед запуском отладчика удалите все брейкпоинты
  12. с 95-го 25 лет прошло. четверть века. уже новое поколение человеков с нуля выросло.... которое наверно даже не знает видело win95. )))
  13. требуется посчитать золото в граммах ± на ПП. Есть в АД какой нибудь подобный репорт? По идее задача сводится к подсчёту площади золочения меди вскрытой от маски. Как это можно сделать?