реклама на сайте
подробности

 
 
> Как реагировать на критическую ошибку времени исполнения?, Хочется аналог исключения в iar avr
AndryG
сообщение Apr 15 2016, 22:34
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Рисую велосипед марки "планировщик". Будет ездить на связанных списках sm.gif Для рисования использую IAR (avr).

В коде есть момент "приплыли", когда дальнейшее нормальное выполнение невозможно.
Я решил, что в данном случае не надо полумер по типу "а эту задачу в очередь не поставим, ибо места нет".

На php я бы выбросил исключение и перехватил бы его на самом высоком уровне для вывода юзеру "упс".
А как тут быть? Решение хочется универсальное, ибо планируется использовать сей код в разных проектах без индивидуального допиливания.

Поделитесь, пжлст, идеями. Может какой механизм великого компилятора можно задействовать? Как вы поступаете в таких случаях?

Код
void qtTask(qtTaskPtr ptr, qtDelay tick){
  Task *r = empty.h;

  if(NULL == r){ // нет свободных записей. Приплыли.
    PORTB |= 0xff; // это отладочная затычка. Как быть при такой ошибке в библиотечном коде.
    while(1);
  }

  head2tail(&empty, tick ? &delay : &active);
...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AndryG
сообщение Apr 16 2016, 10:20
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Я хочу переложить заботу "как жить дальше" с библиотечного кода на основную программу. Пусть она думает, как ей жить после такого конфуза.

Порылся в документации. (IAR C/C++ Compiler Reference Guide for AVR 86 стр.)
В раделе System startup and termination встречается описание функций exit(), abort(), _exit(), __exit().

Как я понял, то я могу вызывать в библиотченом коде abort(), указывая тем самым, что нормально дальше работать невозможно.
А основная программа может реализовать свою функцию __exit(int) и там уже колдовать. Или светодиод зажечь и стоять при отладке или перегрузиться с журналированием и т.д.

Попробовал поставить abort() и exit() в проблемном месте. И совсем не понимаю, о чём меня предупреждают
Цитата
Warning[w6]: Type conflict for external/entry "abort", in module dispatcher against external/entry in module ?abort;
prototyped function vs K&R function
Warning[w6]: Type conflict for external/entry "exit", in module dispatcher against external/entry in module ?exit; prototyped
function vs K&R function

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 22:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016