All streams
Search
Write a publication
Pull to refresh
18
0
Никита Томилин @nikitatm333

Разработчик встраиваемых систем

Send message

Поправил!

Спасибо за внимательность!

Хах, прошу прощения) Вика уже уволена
Изначально в этой сценке было больше актеров

Как-то исторически сложилось, что с 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 😊

Information

Rating
Does not participate
Registered
Activity

Specialization

Backend Developer, Embedded Software Engineer
Python
C
OOP
Linux
Docker
Git
SQL
Maths