[Mikrokontrolery] problem czysto teoretyczny

0

chodzi o taką strukturę programu aby dokładanie kolejnych zadań do poprawnie
działającego programu nie wpływało na wykonywanie już zaimplementowanych
zadań.

Przykład: procesor (ja uzywam Atmela 90s2313)

  1. steruje diodą migającą dokładnie z częstotliwością 1Hz (0,5s świeci, 0,5s
    nie świeci)
  2. dokładnie co 100ms odczytuje dane z przetwornika A/C

.... ale potem dochodze do wniosku, że chce dołożyć
zadanie, które np. dokładnie co 0,25s wysyła dane przez swój port szeregowy
do PC.

TRAGEDIA. Wszystkie interwały czasowe tak mozolnie
dobrane "rozjeżdżają się". Dioda już nie miga tak jak chciałem itd. Każda ingerencja w program napisamy w ten sposób jest dalece irytująca.

w "normalnym" c++ walnalbym klasy, watki i takie tam rozne. ale jak to zrobic bedac ograniczonym niewielka moca takiego mikrokontrolera i uzywajac "czystego" c (ewentualnie asma)?

0

podczep wszystko do przerwania od licznika.

0

a pokaz jak wyznaczac te interwaly czasowe

0

Wybiersza najmniejszy interwal czasowy jaki masz a inne dopasowywujesz aby byly wielokrotnoscia no i juz masz np 0.25s a led co sekunde wiec jakas zmienna i liczysz 1,2,3,4 i znow (oczywiscie podlaczone do przerwan jak pisal ŁF)
masz w tym atmelu do dyspozycji dwa timery - nie spodziewaj sie ze w taki maly uP upchniesz nie wiadomo co !

poza tym warto wiedziec co ile czasu zajmuje bo jak licznik wywola przerwanie a ono bedzie zajmowalo duzo czasu (wiecej niz krok czasu do nastepnego) to sie posypie - zreszta wszedzie gdzie mozliwy jest jeden watek.

0

hmm jezeli dane zadania zajmuja zawsze taki sam okreslony czas (czas wykonania operandow) to moze dodawaj jakies wartosci do timera ?

0

Zaznaczam - nie mam pojęcia o programowaniu Atmela w C. Programowałem jedynie 8051 w asm. Nie zjedzcie mnie, jeżeli napiszę zupełne bzdury.

Vixen - a opisz dokładniej, jak do tej pory robiłeś to mruganie diodą....

Bo z tego co piszesz, to wygląda mi na to, że Twój program składa się z pętli, która zapala/gasi diodę, a następnie wykonuje odpowiednią (precyzyjnie obliczoną) ilość NOPów.... To będzie działało, ale już nic z tym programem więcej nie zrobisz.

Niestety, musisz w tym celu użyć systemu przerwań i timerów...

0

yakhub: mniej wiecej tak jak opisujesz, tylko w c, ale zasada ta sama.

pytanko formalne: da sie oprogramowac przerwania i timera w c, bez zbytniego uzywania asma?

0

A dlaczego tak się bronisz tego asm? Programowanie mikrokontrolerów w asm to przyjemność :). Mnie do tego zmuszają w szkole więc już weszło mi to w nawyk.

0
vixen03 napisał(a)

pytanko formalne: da sie oprogramowac przerwania i timera w c, bez zbytniego uzywania asma?

Oczywiście, że się da.

0
letus napisał(a)

A dlaczego tak się bronisz tego asm?

bo mi szkoda zdrowia i nie umiem poukladac sobie w glowie zawartosci 30 rejestrow :P
po to jest c, zebym nie musial sie bawic w jakies glupie szczegoliki, bo ktos juz za mnie zrobil te robote. po co wywazac otwarte drzwi?

1 użytkowników online, w tym zalogowanych: 0, gości: 1