Страница 1 из 1
Многозадачность
Добавлено: Вс дек 06, 2009 18:57:40
Irdis777
Добрый вечер, форумчане! Огромное спасибо, что откликаетесь на вопросы! Мир спасет электроника
Возник такой вопрос. Может ли контроллер выполнять несколько программ одновременно? Допустим, МК используется в охранной системе. На одном из входов весит датчик открытия. На другом, например, датчик разбития стекла в другой комнате. Так вот, если сработал датчик открытия, а потом спустя некоторое время датчик разбития, то контроллер сначала выполнит программу, определенную для открытия, а потом перейдет на разбитие? Пусть время выполнения программ больше интервала между срабатываниями. Или проще на входные шлейфы испльзовать свои МК, просто более простые и дешевые, и чтобы ими управлял центральный? Заранее спасибо!
Добавлено: Вс дек 06, 2009 19:00:08
МитяРа
Эти и многие другие похожие вещи и алгоритмы делаются по прерываниям..
И пофигу мышь, сколько датчиков висит в системе.. /в разумных пределах конечно/...
Добавлено: Вс дек 06, 2009 19:48:47
Irdis777
Ага. что-то где-то начал понимать, спасибо ответу обучалке

Добавлено: Вс дек 06, 2009 20:35:40
МитяРа
_noise
хоть "например" что ли добавить, а то как-то.
А там вместо "например" в начале фразы написано "Эти и многие другие похожие"..

Добавлено: Вс дек 06, 2009 20:54:55
Irdis777
А не могли бы вы порекомендовать какую нибудь статью или сайт для примера?
Добавлено: Вс дек 06, 2009 21:25:40
МитяРа
Irdis777..
А не могли бы вы порекомендовать какую нибудь статью или сайт для примера?
А чем те не понравилась ссылка _noise тремя постами выше?
..
_noise
оригинальный однако способ цитирования, уж не первый раз замечаю: популярно так. отстаю от моды.
Да нет.. это мя когда на Коте зарегился, то никак не мог разобраться с цитированием..
Пришлось придумать что-то своё..
Добавлено: Вс дек 06, 2009 21:28:50
Irdis777
[quote="МитяРа"]Irdis777..
А не могли бы вы порекомендовать какую нибудь статью или сайт для примера?
А чем те не понравилась ссылка _noise тремя постами выше?
..
_noise
просто я пока на си учусь.хотелось бы побольше примеров разобранных
Добавлено: Вс дек 06, 2009 21:31:07
Irdis777
Или вообще книгу какую-нибудь, где все было бы понятно написано и с нуля

Добавлено: Вс дек 06, 2009 21:34:00
DrWatson
поиск по форуму и Гугль рулят - были темы такие и не один раз.
Полазай по торрент-трекерам - там сборки книг по сотням мегабайт попадаются.
Ищите, да обрящете...
Добавлено: Пн дек 07, 2009 21:33:32
Irdis777
Добрый вечер.
Че-то я конкретно видимо торможу

, но никак не могу сделать элементарное. Просто надо чтобы порт D мигал по прерываниям. Это не является какой либо технической задачей и не требует реализации в металле) Просто хочу понять
Вот исходник:
#include <mega128>
#include <delay>
unsigned char ch;
void timer1_ovf_isr(void)
{
ch++;
}
void main(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0x00;
PORTC=0x00;
DDRC=0xFF;
//PORTD=0x00;
DDRD=0xFF;
PORTE=0x00;
DDRE=0x00;
PORTF=0x00;
DDRF=0x00;
PORTG=0x00;
DDRG=0x00;
ACSR=0x80;
while (1)
{
PORTD = ch;
delay_ms(100);
};
}
Подскажите, пожалуйста, где косяк?
Добавлено: Пн дек 07, 2009 21:52:55
DrWatson
Во-первых перед while(1) надо разрешить прерывания ассемблерной командой sei (вроде бы в данной реализации компилятора есть функция sei() в <interrupt.h>)
Во вторых строчку PORTD=ch; можно поместить и в обработчик прерывания после ch++; а цикл while(1) в данном случае можно сделать и пустым.
Добавлено: Пн дек 07, 2009 22:02:51
Irdis777
как будто прерывания не работают. а выходах висят 0
какую бы задержку не ставил, ничегоне меняется
Добавлено: Пн дек 07, 2009 22:10:23
DrWatson
мил человек, ты вообще читаешь что тебе пишут?
как у тебя будут работать прерывания, если ты их не разрешил, да еще и таймер Т1, который должен эти прерывания вызывать не проинициализировал!!!
бегом читать даташит про таймер Т1 и прерывания!