Например TDA7294

Форум РадиоКот • Просмотр темы - Обработка исключений
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб окт 25, 2025 05:31:05

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Обработка исключений
СообщениеДобавлено: Чт апр 07, 2022 06:33:48 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 17
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 185
Откуда: Барнаул
Рейтинг сообщения: 0
Доброго дня и весеннего всем настроения.
Давным давно делал большой, для себя, проект на ATmege32. Несколько тысяч строк кода и проект готов. Все бы ничего, но в этом изделии использовался датчик температуры/влажности HTU21. Датчик подключается по I2C. И иногда, датчик не отвечал в отведенный тайминг и девайс зависал. Тогда, не долго думая, просто использовал WatcDog и так и использовал эту поделку. При сбоях поделка просто перезагружалась и продолжала работу. Спустя несколько лет, решил вернуться к этой проблеме. первое что пришло в голову, это обработка исключений. ПРошивку писал на С++ в Атмел Студио 7. Вставил конструкцию Try...Catch, атмел студио, даже опознал синтаксис. попробовал собрать и получаю ошибку "exception handling disabled use '-fexceptions' to enable". Хм, вроде бы все понятно, нужно просто включить исключения. Но я как то даже растерялся, где это сделать? :dont_know:

Начал гуглить. И информации практически нет. Где то на форумах даже встречал что эта конструкция не будет работать на AVR, мол камушек не поддерживает.

ну и собственно вопрос, можно ли использовать исключения, если можно то как?
А если нельзя, то может как то по другому решить эту проблему а не перезагружать все устройство.

_________________
Я все еще учусь, и ох как тяжело это дается


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Обработка исключений
СообщениеДобавлено: Чт апр 07, 2022 08:49:39 
Друг Кота
Аватар пользователя

Карма: 49
Рейтинг сообщений: 392
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 7014
Откуда: Ижевск
Рейтинг сообщения: 0
...по другому решить...

Вводится тайм-аут, в течение которого бяка должна ответить. Например, на Т/С0.

_________________
Docendo discimus


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Обработка исключений
СообщениеДобавлено: Чт апр 07, 2022 14:39:30 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 17
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 185
Откуда: Барнаул
Рейтинг сообщения: 0
Ну раз более изящных решений нет, буду делать так. спасибо.

_________________
Я все еще учусь, и ох как тяжело это дается


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Обработка исключений
СообщениеДобавлено: Пт апр 22, 2022 23:51:57 
Встал на лапы
Аватар пользователя

Карма: 3
Рейтинг сообщений: 11
Зарегистрирован: Вт фев 21, 2012 20:42:26
Сообщений: 135
Откуда: Санкт-Петербург, Россия, Земля
Рейтинг сообщения: 0
Обработка исключений - дорогое удовольствие. Тут и раскрутка стека и создание объекта, не просто так по умолчанию это выключено. Если брать конкретно IIC, то я делал драйвер с ограничением таймаута.

Код:
/*
 * Выставляет на шину байт данных.
 */
void iic_ll_write(uint8_t d)
{
        if (error != IIC_NO_ERROR) {
                return;
        }

        TWDR = d;
        TWCR = (1 << TWINT) | (1 << TWEN);
        twi_wait(1 << TWINT);
        if (_twsr_not(TWI_MT_DATA_ACK)) {
                error |= IIC_ERROR_WRITE;
        }
        return;
}

/*
 * \brief Ожидание завершения операции.
 * \details
 */
void twi_wait(const uint8_t mask)
{
        uint8_t c;
        for (c = 0; (TWCR & mask) == 0; c++) {
                if (c > IIC_TIMEOUT) {
                        error |= IIC_ERROR_WAIT;
                        break;
                }
                _delay_us(950);
        }
}


По нормальному функция twi_wait завершается, если за отведенное время в регистре TWCR сбросится бит, совпадающий с битом в параметре mask. Иначе устанавливается глобальная переменная error, которую может проверить вызывающий код.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y