Цитата(NikitoS-86 @ Sep 22 2008, 15:43)

3) Как можно всётаки обойтись без макросов на С? МОжно ли сделать так, чтобы вызов прерывания был похож на вызов функции? Потому что даже если я сделаю массивы гнлобальными, то мне как-то надо ведь им сообщать какое по счёту это прерывание? Можно конечно завести ещё вдобавок глобальную переменную-счётчки... Но я если честно вообще не очень жалую глобальные переменные именно потому, что доступ к ним - откуда хочешь...
Если не сложно можно получить пример простейший как вообще выполнять обработчик что называется по-простому....
1) А... Вот вы о чём.

То есть вы вообще хотите обойтись без прерываний, на сколько я понял.
Да - можно. И, по-моему это понятно из моего текста.
У меня ведь прерывание по таймеру, а я там читаю АЦП. А вы можете вызывать чтение АЦП непосредственно в main. Либо прямо в теле, либо с помощью п/п.
В этом случае в п/п вам надо проверить флаг готовности АЦП и ждать его выставления и прочитать значение. Опять таки (см. выше) первое, после переключ. канала отбросить как не верное.
2) Доступ к глобальным переменным можно ограничить тем же static. В этом случае обращение к ним будет возможно только из данного файла. Посмотрите также мой текст внимательно. Так номер канала у меня размещён в озу (не портится от вызова к вызову) и в тоже время обращение к этой переменной возможно только из прерывания. Всё это, я предвидя ваши вопросы уже писал - почитайте внимательно.
Цитата
4) Переделал немножко код, и теперь он выглядит вот так вот... и вроде даже что-то делает:
У меня только возник ещё вопросы: поскольку мы пишем на С, а не на ассемблере, то при прогоне программы дебагер проскакивает те месте, где я работаю со своими переменными! Совершенно очевидно, что когда я пишу intX = ...; на ассемблере это может занять больше строчек... Но всётаки можно как-нибудь заставить его показывать что вообще происходит с моими переменными? Как мне например после прохода программы определить что он поместил в мой массив? как это увидеть?
1) Вы можете расскрыть этот оператор при необходимости. Для этого в AVR Studio есть View/Disasmebler. И ... идите по асмовому тексту
2) Для просмотра содержимого переменных (в том числе массивов, структур и даже указателей) есть View/Watch. Кстати если на переменной щёлкнуть правой кн. мыши, то сразу можно добавить в окно отладки. И ... пожалуйста - смотри - меняй. В любом виде.
Цитата
Пока писал ответ Вы добавили код=) Но тем лучше... МОжно только поподробнее по поводу синтаксиса прерывания...
#pragma..........
как работает?
Я работаю под IAR. Там это фактически указание компилятору по какому вектору расположить данное прерывание ну и тому подобное (например закончить RETI вместо RET)
Цитата
И ещё одно... В примере в самом начале есть строчка:
#define KADMUX (1<<ADLAR) // работа от внешнего опорного источника с выравниванием "влево"
Разве ADLAR имеет какое-то отношение к тому, какой источник используется? Помоему он отвечает только за то, в каком виде представлять результат=/ Или это как раз из-за того, что вырвано из контекста?
Просто в данном регистре также кодируется источник ОН. Если соотв. бит=0 (как у меня) так - внутр. опора. Я это написал в коментариях, чтобы видеть. Возможно правильнее было бы написать
#define KADMUX (1<<ADLAR) |(0<<REFS0)|(0<<REFS1) // работа от внешнего опорного источника с
Всё в ваших руках. Я коментирую для себя. Сам пишу - сам читаю.

Поэтому местами упрощаю.