Никита Томилин @nikitatm333
Разработчик встраиваемых систем
Information
- Rating
- Does not participate
- Registered
- Activity
Specialization
Backend Developer, Embedded Software Engineer
Python
C
OOP
Linux
Docker
Git
SQL
Maths
Разработчик встраиваемых систем
Поправил!
Спасибо за внимательность!
Хах, прошу прощения) Вика уже уволена
Изначально в этой сценке было больше актеров
Как-то исторически сложилось, что с PIO я познакомился раньше и, ввиду отсутствия большой разницы между PIO и расширением ESP-IDF, продолжил работать в PIO. К тому же хотелось в этом цикле статей использовать что-то новое — большинство всё-таки работает в расширении ESP-IDF.
Добрый день! Спасибо!
Уже есть вторая часть с GPIO и ISR. Также на подходе 3-я статья про очереди.
попробуйте еще дребезг кнопки исправить
Проблема в том, что задача
Blink_Task
заваливает процессор и никак не отпускает его.Можно попробовать добавить задержку
void Blink_Task(void *arg) {
while (1) {
gpio_set_level(LED_GPIO, state);
vTaskDelay(pdMS_TO_TICKS(10)); // пусть таска будет опрашивать state каждые 10 мс
}
}
Также еще может быть проблема с дребезгом контактов
Можно прописать простой алгоритм дебаунса
static TickType_t last_toggle = 0;
static void IRAM_ATTR gpio_isr_handler(void *arg) {
TickType_t now = xTaskGetTickCountFromISR();
if (now - last_toggle > pdMS_TO_TICKS(50)) {
state = !state;
last_toggle = now;
}
}
Сделаем!
Тогда можно попробовать прерывания. Настройте оба пина на
GPIO_INTR_ANYEDGE
и в одном ISR читайте оба уровня. Что-то вроде:static void IRAM_ATTR gpio_isr_handler(void* arg) {
bool bit1 = gpio_get_level(PIN_ONE);
bool bit0 = gpio_get_level(PIN_ZERO);
if (bit1 && !bit0) {
// поймали «1»
} else if (!bit1 && bit0) {
// поймали «0»
} else if (!bit1 && !bit0) {
// пауза → конец сообщения
}
}
Но я все равно не до конца уверен в этой затее с ISR, так как 100кбайт на ядро довольно много. Но если вы не будете задействовать ядро с ISR (Core 0), а все остальные задачи выполнять на Core 1, то может что-то выйдет...
Я хотел в этой статье разобрать очереди, но получилось довольно много информации на прерывании. Я решил, что первую часть следующей статьи я уделю очереди.
Вы правы, что очереди тут будут лучшим вариантом
Окей, посмотрю
Спасибо
Обязательно будет!
Я не сталкивался с таким, но могу предположить несколько вариантов:
1) Проблема действительно в правах доступа
2) Можно попробовать обновится, в терминале VSCode:
pio upgrade (либо platformio upgrade)
pio update (либо platformio update)
Также можно посмотреть список плат в ручную: pio boards
----------------------------------------------------------------------------------
Если жалуется на pio, то можно попробовать установить в ручную
Установите pytho, а затем попробуйте:
pip install -U platformio
Проверьте версию:
platformio --version. Если все ок то обновляемся (upgrade и update) и смотрим список плат pio boards (либо platformio boards). Если все ок можно перезапустить VSCode и попробовать снова.
Если ошибки все еще летят то смотреть логи
Добрый день! После Ваших слов теперь точно буду продолжать)
Добрый день! Спасибо, проверю и исправлю!
Может проблема не только в программаторе, но и в версиях самой OS и CubeIDE. Я не первый кто сталкивался с такой проблемой из моего круга общения, но и также были люди говорящие, что все сразу прошивается без проблем. У разных людей разные проблемы)
В любом случае дискавери и нуклео у меня также шьются без проблем
Попробую также с включенным Outline, спасибо!
У меня с STM32CubeProgrammer были проблемы связанные с тем, что он не мог подтянуть обновления из сети, насколько я помню (или что-то подобное). Это, вроде, связанно с санкциями. Репозитории Cube у меня также не устанавливает из сети и приходится под каждую серию камней их качать в ручную.
Спасибо большое!
Пока не знаком, обязательно изучу
Я согласен, что винда самый лояльный и практичный вариант, но ради обучения и экспериментов это офигенский опыт)
Но я обожаю macOS и Linux и стремлюсь сделать так, чтобы моя разработка не зависела от OS 😊