Цитата(Чип-Хрум @ 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 гарантирует невыбрасывание обращений при оптимизации, но не гарантирует атомарности обращений к многобайтовым переменным.