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

 
 
> GCC: Аварийный выход из прерывания (функции), чем заменить оператор goto?
MaxiMuz
сообщение May 16 2013, 14:50
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Возникла ситуация когда при обработке прерывания нужно изменить привычный ход программы, когда содержимое сохранненых регистров и указатель стека уже не важны. Оператор goto тут не работает:
Код
ISR (xxx_vect)
{
  ...
  ...
  goto m1;
}
void main (void)
{
  ...
  ...
  while (1)
    { ...
           ...
         }
m1:
  ...
  ...
}

Что можно здесь сделать ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lagman
сообщение May 16 2013, 15:45
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Просто из прерывания вызываете другую функцию, зачем вам в main возвращаться, если вам не важны стэк и регистры.
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение May 16 2013, 18:20
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Цитата(Lagman @ May 16 2013, 18:45) *
Просто из прерывания вызываете другую функцию, зачем вам в main возвращаться, если вам не важны стэк и регистры.
не могу перегружать память сохраняемыми регистрами
в теме была описана ситуевина: http://electronix.ru/forum/index.php?showtopic=112377

Цитата(zombi @ May 16 2013, 19:09) *
Не знаю как на СИ.
А на асме записываю в стек нужный мне адрес и ret
на Асме я бы просто rjmp написал

Цитата(Палыч @ May 16 2013, 19:40) *
Функции setjmp / longjmp подойдут ?
похоже нет

Цитата(Палыч @ May 16 2013, 19:40) *
Функции setjmp / longjmp подойдут ?
похоже нет

Цитата(Xenia @ May 16 2013, 20:51) *
Проще всего в программе установить семафоры с ветвлением по if или switch, а из прерывания эти семафоры переключать.
я так и поступил , но всеже хочется разобраться с "прыжками"
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 16 2013, 18:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(MaxiMuz @ May 16 2013, 21:20) *
не могу перегружать память сохраняемыми регистрами
в теме была описана ситуевина: http://electronix.ru/forum/index.php?showtopic=112377

А регистры сохраняются? Вы смотрели?
Цитата(MaxiMuz @ May 16 2013, 21:20) *
на Асме я бы просто rjmp написал

Так и напишите
Код
ISR(...)
{
asm("rjmp 0x1234"); // нужный адрес выберете сами
}

По выбранному адресу расположите вашу функцию (Си или асм)
Цитата(MaxiMuz @ May 16 2013, 21:20) *
я так и поступил , но всеже хочется разобраться с "прыжками"

Изврат это какой-то, чего с ними разбираться.
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение May 17 2013, 11:10
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Цитата(_Артём_ @ May 16 2013, 21:28) *
А регистры сохраняются? Вы смотрели?
почти все старшие регистры, независимо используются они или нет
Go to the top of the page
 
+Quote Post
Tiro
сообщение May 17 2013, 21:26
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(MaxiMuz @ May 17 2013, 14:10) *
почти все старшие регистры, независимо используются они или нет

Метки как значения давно есть в ГСС. 4.3 Labels as Values
Go to the top of the page
 
+Quote Post
MaxiMuz
сообщение May 19 2013, 16:27
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Цитата(Tiro @ May 18 2013, 00:26) *
Метки как значения давно есть в ГСС. 4.3 Labels as Values

Помоему то что нужно!
Но всеже както странно , первый раз вижу оператор '&&' в таком применении. Это какаято особенность GCC стандарта ?

Цитата(Xenia @ May 19 2013, 03:12) *
А прыгать нельзя! sm.gif Мало ли в каком состоянии стеки находятся в том месте, откуда сигануло в прерывание? Вы, положим по метке перейдете, а стек кто чистить будет?

Xenia такой сценарий sm.gif Если уж выполненно определенное условие , то стек и состояние др.регистров неважно

Цитата(ARV @ May 19 2013, 09:49) *
с моей точки зрения ситуация, когда "регистры и состояние стека уже не важны" должна приводить к аппаратному сбросу контроллера, и никак иначе, тем более из прерывания.
Точно! программа должна выполнить определенные действия и завершиться.

Сообщение отредактировал MaxiMuz - May 19 2013, 16:27
Go to the top of the page
 
+Quote Post
Lagman
сообщение May 19 2013, 18:26
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(MaxiMuz @ May 19 2013, 20:27) *
Точно! программа должна выполнить определенные действия и завершиться.

Если брать микроконтроллеры то там редко когда программа завершается, передавать управление некому, запуск только через включение питания (ресет).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MaxiMuz   GCC: Аварийный выход из прерывания (функции)   May 16 2013, 14:50
||||- - Xenia   Цитата(Lagman @ May 19 2013, 22:26) Если ...   May 19 2013, 19:04
||||- - Палыч   Цитата(Xenia @ May 19 2013, 23:04) В прер...   May 20 2013, 04:53
|||- - _Артём_   Цитата(MaxiMuz @ May 19 2013, 19:27) Точн...   May 19 2013, 20:02
||||- - Xenia   Цитата(_Артём_ @ May 20 2013, 00:02) Если...   May 19 2013, 23:31
|||||- - _Артём_   Цитата(Xenia @ May 20 2013, 02:31) Тогда ...   May 20 2013, 00:00
||||- - MaxiMuz   Цитата(_Артём_ @ May 19 2013, 23:02) Если...   May 20 2013, 12:40
||||- - Сергей Борщ   QUOTE (MaxiMuz @ May 20 2013, 15:40) а в ...   May 20 2013, 13:21
|||||- - Xenia   Цитата(Сергей Борщ @ May 20 2013, 17:21) ...   May 20 2013, 13:44
|||||- - Сергей Борщ   QUOTE (Xenia @ May 20 2013, 16:44) легко ...   May 20 2013, 17:03
|||||- - Xenia   Цитата(Сергей Борщ @ May 20 2013, 21:03) ...   May 20 2013, 18:41
|||||- - _Артём_   Цитата(Xenia @ May 20 2013, 21:41) Нормал...   May 20 2013, 19:03
|||||- - Xenia   Цитата(_Артём_ @ May 20 2013, 22:56) В сл...   May 20 2013, 19:05
||||||- - Tiro   Цитата(Xenia @ May 20 2013, 22:05) Адреса...   May 20 2013, 22:31
|||||- - ARV   Цитата(_Артём_ @ May 20 2013, 23:03) goto...   May 21 2013, 18:08
|||||- - _Артём_   Цитата(ARV @ May 21 2013, 21:08) так ведь...   May 21 2013, 19:20
||||- - _Артём_   Цитата(MaxiMuz @ May 20 2013, 15:40) толь...   May 20 2013, 13:31
||||- - MaxiMuz   Цитата(_Артём_ @ May 20 2013, 16:31) Мне ...   May 21 2013, 20:17
||||- - _Артём_   Цитата(MaxiMuz @ May 21 2013, 23:17) возм...   May 21 2013, 20:54
||||- - MaxiMuz   Цитата(_Артём_ @ May 21 2013, 23:54) О ка...   May 21 2013, 21:01
||||- - demiurg_spb   Всё это (аварийный выход) стоит завернуть в какой-...   May 22 2013, 06:52
||||- - Палыч   Цитата(demiurg_spb @ May 22 2013, 10:52) ...   May 22 2013, 07:01
||||- - demiurg_spb   Цитата(Палыч @ May 22 2013, 11:01) В AVR ...   May 22 2013, 07:05
|||- - Tiro   Цитата(MaxiMuz @ May 19 2013, 19:27) Помо...   May 19 2013, 21:32
||- - _Артём_   Цитата(MaxiMuz @ May 17 2013, 14:10) почт...   May 18 2013, 22:42
|- - zombi   Цитата(MaxiMuz @ May 16 2013, 21:20) на А...   May 16 2013, 19:03
|- - Палыч   Цитата(MaxiMuz @ May 16 2013, 22:20) похо...   May 16 2013, 19:40
|- - Xenia   Цитата(MaxiMuz @ May 16 2013, 22:20) я та...   May 19 2013, 00:12
- - zombi   Не знаю как на СИ. А на асме записываю в стек нужн...   May 16 2013, 16:09
- - Палыч   Функции setjmp / longjmp подойдут ?   May 16 2013, 16:40
- - Xenia   Проще всего в программе установить семафоры с ветв...   May 16 2013, 17:51
- - ARV   Цитата(MaxiMuz @ May 16 2013, 18:50) Возн...   May 19 2013, 06:49
- - ARV   если очень хочется, то можно вот так:Кодvoid __at...   May 20 2013, 17:12
- - Сергей Борщ   _Артем_ ответил по всем пунктам. Касаемо последних...   May 21 2013, 07:45
|- - Палыч   Совершенно непонятно: почему ТС не хочет использов...   May 21 2013, 08:00
|- - _Артём_   Цитата(Палыч @ May 21 2013, 11:00) Соверш...   May 21 2013, 12:51
- - rudy_b   Что-то непонятно. Что значит "программа должн...   May 21 2013, 19:32
|- - _Артём_   Цитата(rudy_b @ May 21 2013, 22:32) И что...   May 21 2013, 19:47
|- - rudy_b   Цитата(_Артём_ @ May 21 2013, 22:47) Пере...   May 22 2013, 08:28
|- - MaxiMuz   Цитата(rudy_b @ May 22 2013, 11:28) А что...   May 25 2013, 06:49
- - _Pasha   Пора голосовать, хто за setjmp/longjmp ?   May 25 2013, 10:16


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:51
Рейтинг@Mail.ru


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