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

 
 
> Прерывания в Mega32, Много неясностей
Чип-Хрум
сообщение May 26 2007, 13:29
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 1-04-07
Пользователь №: 26 675



Накопились вопросы по программированию прерываний на си.
1. Может ли находится основная программа в прерывании в плоть до вывода на жк экран
к примеру таймера 1 ? На сколко она может быть большой ?
2. Можно-ли прерывание осуществлять из прерывания (из таймера делать вызов ацп).
3. Может ли быть подпрограмма в прерывании, и сколько их может быть внутрь(матрешки),
Короче говоря на что расчитан стек он же не безграничен.
4. Насколько я понял прерывания эта функция с входными и выходными переменными типа void.
То бишь с переменными работать не придется?А как же тогда работать с переменными?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение May 26 2007, 15:45
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(Чип-Хрум @ May 26 2007, 16:29) *
Накопились вопросы по программированию прерываний на си.
1. Может ли находится основная программа в прерывании в плоть до вывода на жк экран
к примеру таймера 1 ? На сколко она может быть большой ?

Не стоит так делать. Лучше в прерывании таймера запустить АЦП и выйти из прерывания, в прерывании АЦП занести значение АЦП в какой-то буфер (максимум - прямо в прерывании обсчитать что-то в духе экспоненциального фильтра, но не дольше) и выставить флаг "есть новое значение", а вещи типа преобразования результата в ASCII и вывода на ЖКИ - лучше делать в фоне (в "основном цикле").
Прерывания хороши, когда их много мелких на короткие "оперативные" задачи, а всё медленное надо вынести наверх. Меньше проблем будет позже, при добавлении других прерываний (UART, другие таймера, внешние источники).
Конечно, можно в таймерном прерывании разрешить вложенные прерывания и программно ждать завершения работы АЦП, конвертить, выводить на экран - но это нехорошо. Наворачивается вложенность, растут стеки. Просто некрасиво.

Цитата(Чип-Хрум @ May 26 2007, 16:29) *
2. Можно-ли прерывание осуществлять из прерывания (из таймера делать вызов ацп).

Запустить АЦП можно, но вложенным прерывание станет только если в таймерном после этого запуска задержаться до тех пор, пока АЦП отработает. Но даже в этом случае я бы вышел из таймерного (пусть АЦП подождёт до этого момента) и вошёл в АЦП-шное отдельно.
Вложенные прерывания хороши при нормальной приоритетной системе, когда можно расписать что важнее чего и что чем может прерываться.

Цитата(Чип-Хрум @ May 26 2007, 16:29) *
3. Может ли быть подпрограмма в прерывании, и сколько их может быть внутрь(матрешки),
Короче говоря на что расчитан стек он же не безграничен.

Сколько есть памяти. Иногда это (сделать в прерывании что-то срочное, разрешить вложенные прерывания и продолжать потихоньку делать медленную часть) действительно удобно, но только иногда. И если тяжело при разрешении вложенных указать - какие могут "вкладываться", а какие - нет, то область "иногда" сокращается.

Цитата(Чип-Хрум @ May 26 2007, 16:29) *
4. Насколько я понял прерывания эта функция с входными и выходными переменными типа void.
То бишь с переменными работать не придется?А как же тогда работать с переменными?

Глобальные, как это не прискорбно :-)
Могут быть переменные уровня файла и доступ к ним через специальные функции (запрещающие на время доступа все или только нужные прерывания), могут быть "общедоступные" - тогда обязательно volatile и всё равно иногда придётся запрещать прерывания при доступе к ним. volatile гарантирует невыбрасывание обращений при оптимизации, но не гарантирует атомарности обращений к многобайтовым переменным.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Чип-Хрум   Прерывания в Mega32   May 26 2007, 13:29
- - mempfis_   2. "Можно-ли прерывание осуществлять из преры...   May 26 2007, 14:18
- - defunct   ЦитатаТо бишь с переменными работать не придется? ...   May 26 2007, 15:43
- - Alexey Belyaev   Ребят, а что будет если у меня например работает п...   Jun 4 2007, 05:49
|- - IgorKossak   Цитата(Alexey Belyaev @ Jun 4 2007, 08:49...   Jun 4 2007, 06:37
|- - ALexx   Цитата(Alexey Belyaev @ Jun 4 2007, 08:49...   Jun 4 2007, 06:42
- - Чип-Хрум   Вот пример программы в ней переменная unsigned cha...   Jun 9 2007, 09:37
|- - xemul   Цитата(Чип-Хрум @ Jun 9 2007, 13:37)...   Jun 9 2007, 10:24
|- - zltigo   Цитата(xemul @ Jun 9 2007, 13:24) В прото...   Jun 9 2007, 19:40
- - mdmitry   Цитата(Чип-Хрум @ Jun 9 2007, 13:37)...   Jun 9 2007, 10:11
- - Чип-Хрум   Ув. xemul я спрашивал конкретно а ты не ответил , ...   Jun 9 2007, 16:13
|- - defunct   Чип-Хрум Формулируйте вопрос нормально. что где ч...   Jun 9 2007, 19:00
|- - xemul   Цитата(Чип-Хрум @ Jun 9 2007, 20:13)...   Jun 14 2007, 15:28
- - SunnyDevil   Чтобы понять почему написанная программа та себя в...   Jun 11 2007, 13:18


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

 


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


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