Vlad_G 8 5 сентября Опубликовано 5 сентября · Жалоба Например, возьмём функцию: HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size) В программе к ней обращаюсь следующим образом: HAL_UART_Transmit_DMA(&huart2, (uint8_t*)Rx_Uart, 12); Как бы всё нормуль, работает. Но кроме она умеет возвращать коды ошибок, например (фрагмент из описания этой функции): if ((pData == NULL) || (Size == 0U)) { return HAL_ERROR; } Правильно ли я понимаю, что если я хочу проверить, правильно ли отработала эта функция или выдала какую либо ошибку, то вместо простого обращения (как см. выше) я должен написать: if(HAL_UART_Transmit_DMA(&huart2, (uint8_t*)Rx_Uart, 12) == HAL_ERROR) { что-то делаем согласно типу ошибки} ? А в случае, если я просто обращаюсь: HAL_UART_Transmit_DMA(&huart2, (uint8_t*)Rx_Uart, 12), то куда уходит: return HAL_ERROR/HAL_OK/... ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 5 сентября Опубликовано 5 сентября · Жалоба Да, правильно. Ошибки лучше отлавливать. Никуда не уходит, просто не используется. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 86 5 сентября Опубликовано 5 сентября (изменено) · Жалоба HAL_ERROR означает ошибку конфигурации модуля или ошибку работы с ним. Конкретно и указано - if ((pData == NULL) || (Size == 0U)) то есть, если при конфигурации DMA указатель на данные = NULL или же размер данных = 0, такая ошибка и возникнет. Конкретно эту ошибку нужно отлавливать на этапе отладки, поскольку это - ошибка программиста. if(... == HAL_ERROR) { while(1); } и при отладке код зависнет на этой строке, и при остановке в отладке курсор встанет именно на эту строчку. А дальше уже проверяйте параметры конфигурации. Второй вариант - можно выводить диагностическое сообщение в какой-нить интерфейс, например по UART в терминалку. Но для этого интерфейс UART должен быть написан без ошибок. 1 час назад, Vlad_G сказал: о куда уходит: return HAL_ERROR/HAL_OK/... Это дефайн - текстовое имя числового значения. Я на память не помню, какому числу соответствует HAL_ERROR. Но по return просто возвращается какое-то числовое значение. При вызове ф-ции возвращаемое ею значение допускается игнорировать, то есть не присваивать никакой переменной и не использовать иным способом. Изменено 5 сентября пользователем EdgeAligned 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad_G 8 6 сентября Опубликовано 6 сентября · Жалоба Спасибо вам! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 6 сентября Опубликовано 6 сентября · Жалоба В 05.09.2024 в 17:58, EdgeAligned сказал: Второй вариант - можно выводить диагностическое сообщение в какой-нить интерфейс, например по UART в терминалку. Но для этого интерфейс UART должен быть написан без ошибок. Да, случай вспомнился из жизни. Зовет регулировщик - графическая панель не запускается. Черный экран и тишина. И так на всей партии. Сначала помянул чью-то маму, потом решил подключиться к уарту. Ну и видим: Init xxx - Ok Init yyy - Ok Init touch screen - Fail Оказалось, снабженцы при закупке дисплеев на одну букву ошиблись и закупили с другим контроллером тача - ILI вместо FT. Пришлось, конечно, срочно перепиливать драйвер. Но одна строчка диагностического вывода сэкономила кучу времени на диагностику (которого и так не было) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться