logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Błędnie pracujący UART w atmega32

Karuzelnik 07 Gru 2008 17:58 875 1
REKLAMA
  • #1 5829660
    Karuzelnik
    Poziom 11  
    Witam serdecznie,

    piszę obecnie w Bascomie dość rozbudowany projekt na Atmegę32 używający przerwania Timera T0 oraz komunikacji z drugim mikrokontrolerem za pomocą kontroli przerwania Urxc i bufora nadawania. Projekt nie używa procedur ani funkcji zawierających zmienne lokalne ani skoków Gosub. Jedynym elementem zwiększającym stos jest przerwanie od Timera T0 oraz przerwanie odebranych danych Uart-u. Projekt zawiera rozbudowane menu i wszystkie skoki bezwarunkowe GOTO. Przerwanie Timera T0 jest generowane co 1 milisekundę. Sam system pracuje bezproblemowo, do momentu kiedy wielkość kodu wynosi poniżej 50% pamięci flesz. Po dalszym rozbudowaniu menu i zwiększeniu się kodu powyżej 50% zaczynają się schody, polegające najczęściej na zablokowaniu się wysyłania danych po UART albo zablokowaniu odbioru.
    Proszę o jakąś podpowiedź bo już nie wiem co robić.
    Czy można w jakiś sposób kontrolować stos przy obsłudze przerwań.
    Pierwsze moje problemy zaczęły się od wielkości kodu na poziomie 40% ale "wyrzucenie" procedur i skoków Gosub dało mi dodatkowe 10% kodu. Niestety końca programu nie widać a mnie skończyły się pomysły. Dodam, że próby ze zmianami wielkości ramki i stosów nic nie dają.
    Dziękują za radę.

    Proszę zmienić tytuł wiadomości - regulamin p.11.1
    [zumek]
  • REKLAMA
  • #2 5829946
    mirekk36
    Poziom 42  
    Pierwsza i podstawowa rada to zrób całkowicie odwrotnie jeśli chodzi o swoje procedury i skoki GOTO. Czyli wyrzuć w diabły wszystkie skoki GOTO i zacznij świadomie używać procedur, funkcji itp. A wtedy zobczysz, że program nie będzie cię przerastał gdy zacznie przekraczać 40% pojemności kodu.
REKLAMA