AVRDOS BASCOM Przerwanie-nie działa

Tutaj mozesz poruszać tematy ogólne powiązane z elektroniką, np. dyskusje na temat podzespołów, układów, zasad ich działania. Czyli można pisać o wszystkim czego nie da się przyporządkować do innych działów.
ODPOWIEDZ
Awatar użytkownika
mictronic
-
Posty: 81
Rejestracja: 04 paź 2006, 19:28
Lokalizacja: Bydgoszcz
Kontakt:

AVRDOS BASCOM Przerwanie-nie działa

Post autor: mictronic » 06 mar 2011, 19:16

Witam, uruchomiłem avrdos wraz z obsługa wyświetlacza graficznego z nokii 3310 i wszystko poprawnie chodzi oprócz obsługi przerwania zewnętrznego.Otóż po wyjściu z prostej procedury inicjującej DOSa konfiguruje INT0 i program wpada narazie do pustej pętli.
Kiedy omijam konfiguracje avr dos przerwanie obsługiwane jest poprawne jednak kiedy już je dodam to nie. Sprawdziłem program wychodzi z podprogramu i poprawnie wpada do pętli.

Co jest zle?

Kod: Zaznacz cały

Filemanager

sei
Config Int0 = Falling
Enable Int0
On Int0 Int_sw

Do
Waitms 10
Loop
End


Int_sw:

 Ddrd.7 = 1
 Toggle Portd.7

Return


Sub Filemanager

   Lcdgoxy 0 , 12
   Lcdstr ".:uSD_MANAGER:." , 2 , 0

   Config Clock = Soft
   Enable Interrupts
   Config Date = Mdy , Separator = .

   Lcdgoxy 1 , 0
   Lcdstr "uSD:Init..." , 0 , 0

   Reinit:

   Ddrb.3 = 1                                               'kierunek portu ON/OFF uSD

   Portb.3 = 0                                              'zeruj
   Waitms 100                                               'czekaj
   Portb.3 = 1                                              'włącz

    Lcdgoxy 2 , 0
    Lcdstr "uSD:" , 0 , 0
    Waitms 500

   $include "Config_MMC.bas"


   If Gbdriveerror = 0 Then

      Lcdstr "OK" , 0 , 0
      Waitms 500
      Lcdgoxy 3 , 0
      Lcdstr "FAT32:Init..." , 0 , 0
      Waitms 500
      Lcdgoxy 4 , 0
      Lcdstr "FAT32:" , 0 , 0

      $include "Config_AVR-DOS.BAS"                         ' Include AVR-DOS Configuration and library

      Btemp1 = Initfilesystem(1)                            ' Partition 1
      If Btemp1 = 0 Then
      Lcdstr "OK" , 0 , 0
      Waitms 500
      Else
      Lcdstr "Fail" , 0 , 0
      Wait 2
      Goto Reinit
      End If

   Else

      Lcdstr "Fail" , 0 , 0
      Waitms 500
      Lcdclear 5 , 2 , 4 , 4
      Lcdgoxy 2 , 25
      Lcdstr "ReInit" , 0 , 0

      Goto Reinit

   End If

End Sub   

keruseykaryu

Post autor: keruseykaryu » 06 mar 2011, 19:30

A od kiedy to includuje się pliki konfiguracyjne w subach?

Awatar użytkownika
mictronic
-
Posty: 81
Rejestracja: 04 paź 2006, 19:28
Lokalizacja: Bydgoszcz
Kontakt:

Post autor: mictronic » 06 mar 2011, 19:34

Include można dać kiedy się chce zresztą odsyłam do helpa...
Chyba ze o czymś nie wiem.

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 06 mar 2011, 19:45

A spróbuj go dać na początku, może się zdziwisz jak zadziała. Ja jeszcze nie widziałem żadnego języka programowania w którym komendy "include" wstawia się gdzie popadnie. Zawsze są na początku. Zresztą kompilator BASCOM jest na to czuły.

Awatar użytkownika
mictronic
-
Posty: 81
Rejestracja: 04 paź 2006, 19:28
Lokalizacja: Bydgoszcz
Kontakt:

Post autor: mictronic » 06 mar 2011, 19:50

Jest jak najbardziej OK , tak jest tez w przykładowych plikach dot. obsługi avrdos.

$include:

Ta dyrektywa pozwala na dołączenie innego programu lub pliku z tekstem źródłowym najczęściej używanych fragmentów programu.

Pozwala to na stworzenie biblioteki sprawdzonych procedur, których użycie jest niezbędne w aktualnym programie głównym. Można w ten sposób uporządkować tworzony program lub ukryć niepotrzebne szczegóły.

(c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005

[ Dodano: 2011-03-06, 19:56 ]
Ja nie mowie ze coś mi się źle kompiluje. Wszystko działa pliki na karcie są poprawnie odczytywane. Problem jest w niemożności uruchomienia przerwania w chwili gdy avrdos jest zainicjowany. Nie jest to raczej problem ze stosem bo obsługa przerwania bierze pewnie z dwa bajty a ja wsadzałem już bardziej stosożerne rzeczy.

Awatar użytkownika
mr_x
Użytkownik
Posty: 385
Rejestracja: 12 gru 2010, 19:05
Lokalizacja: /bin/bash
Kontakt:

Post autor: mr_x » 06 mar 2011, 20:48

kayron pisze:A spróbuj go dać na początku, może się zdziwisz jak zadziała. Ja jeszcze nie widziałem żadnego języka programowania w którym komendy "include" wstawia się gdzie popadnie. Zawsze są na początku. Zresztą kompilator BASCOM jest na to czuły.
W asemblerze nie zawsze daje się na początku, często wskazane jest dać w innym miejscu.

keruseykaryu

Post autor: keruseykaryu » 06 mar 2011, 21:59

mictronic pisze:Include można dać kiedy się chce zresztą odsyłam do helpa...
Znajdź mi w helpie informację o tym, że dyrektywy umieszcza się w subach...
Ja nie mowie ze coś mi się źle kompiluje. Wszystko działa pliki na karcie są poprawnie odczytywane.
A ja nie mówię, że ci się błędnie skompiluje. Kompilator posłusznie wklei tam... gdzie nie trzeba.
mictronic pisze:Nie jest to raczej problem ze stosem bo obsługa przerwania bierze pewnie z dwa bajty a ja wsadzałem już bardziej stosożerne rzeczy.
Kulą w płot kolego. Obsługa przerwania zbierze minimum 28 bajtów ze stosu. Teraz to Ja cię do helpa poślę...

Awatar użytkownika
mictronic
-
Posty: 81
Rejestracja: 04 paź 2006, 19:28
Lokalizacja: Bydgoszcz
Kontakt:

Post autor: mictronic » 08 mar 2011, 19:58

Rzeczywiście obsługa przerwania bez użycia nosave zapisuje aktualny stan rejestrów czyli 32 bajty i jeszcze trochę... Właśnie zbaczając z tematu kiedy mogę stosować nosave i jeśli wpisze przykładowo HW, SWStack i Framesize po 100 to oznacza że całkowicie program zabierze w RAMie 300bajtów + zmienne ?

Więcej pytań i tak nie mam bo nie wyjaśniliśmy wcześniejszych.

keruseykaryu

Post autor: keruseykaryu » 08 mar 2011, 20:46

mictronic pisze:Właśnie zbaczając z tematu kiedy mogę stosować nosave
Jak sam będziesz wiedział co robi przerwanie, czyli napiszesz go jako inline w asemblerze. Inaczej tego nie stosuj bo kod w maliny pójdzie.
mictronic pisze:jeśli wpisze przykładowo HW, SWStack i Framesize po 100 to oznacza że całkowicie program zabierze w RAMie 300bajtów + zmienne ?
Niestety jak najbardziej. No i "zmienne"... Wiesz. Zmienne co masz w programie przez Dim deklarowane to nie wszystko jest. Cała masa zmiennych jest jeszcze, które Bascom ładuje na "dzień dobry". Trza czytać raporty kompilacji.

Awatar użytkownika
mictronic
-
Posty: 81
Rejestracja: 04 paź 2006, 19:28
Lokalizacja: Bydgoszcz
Kontakt:

Post autor: mictronic » 19 mar 2011, 23:01

Witam,podczas kolejnej próby naprawy kodu przez kompletny strzał usunąłem linijki dotyczące konfiguracji clock'a które były domyślnie w samplach avrdosa:

Kod: Zaznacz cały

   Config Clock = Soft
   Enable Interrupts
   Config Date = Mdy , Separator = .
Po tym zabiegu przerwanie INT0 ruszyło i działa jak trzeba!

Poco jest ta śmieszna konfiguracja skoro zegar i tak nie jest ustawiany a karta działa bez tego...

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 20 mar 2011, 13:00

Do zapisywania danych na karcie trzeba podać czas. Może być to data produkcji urządzenia, ale bez niej się nie da.

Awatar użytkownika
mictronic
-
Posty: 81
Rejestracja: 04 paź 2006, 19:28
Lokalizacja: Bydgoszcz
Kontakt:

Post autor: mictronic » 21 mar 2011, 14:06

A gdzie tą datę się wpisuje?

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 21 mar 2011, 19:08

W helpie do bascoma widziałem zmienne czasu i daty, zaczynające się od $. Jednak od dłuższego czasu nie siedzę w tym i nie wiem gdzie dokładnie tego szukać.
Nie wiem też czy da się na stałe ustawić te zmienne czy można je tylko przestawiać, a zegara nie da się zatrzymać.

ODPOWIEDZ