[microC, AVR] Jak wykonać kod jeszcze przed wejściem w main()?
19:17Sat, 20 September 2014
Zdarzyło mi się, przy przesiadce z ATmega32 na ATmega128, że kod nie działał. Nie mogłem dojć co jest przyczyną. Nie działały najprostsze rzeczy (jak choćby ustawianie bitu na porcie). Skróciłem program do minimum (napisałem jedynie trzy linijki instrukcji w funkcji main). Odpaliłem - nie działa. Utworzyłem nowy projekt - odpaliłem - działa. Okazało się, że miałem jeszcze zadeklarowane obiekty (np. sterownik DS1307). Konstruktory tych obiektów uruchamiały np. TWI, a z racji, że ATmega128 ma inaczej konfigurowane TWI - program utykał w jakiejś tam pętli. Tak więc trzeba również zwracać uwagę na otoczenie main(), a dokładniej czy nie deklarujemy jakiś obiektów (instancji klas), a w związku z tym, czy nie przeszkadza nam w programie to co zrobiły konstruktory tych obiektów.
Jeśli więc chcesz wykonać jakiś kod jeszcze przed wejściem w main(), napisz klasę z konstruktorem i zadeklaruj obiekt tej klasy (ale nie jako wskaźnik!).
Podobne faq:
- [microC, AVR] Użycie sprintf wyrzuca błędy kompilacji - o co chodzi?
- [microC, AVR] Jak zwiększyć wydajność pętli?
- [Ogólne] Mikrokontroler się zawiesza (lub resetuje), gdy na wyświetlaczu matrycowym LED pojawiła się więcej niż jedna litera - jaka jest przyczyna?
-
Język C: Czasochłonne błędy przez które
ludzieprogramiści skaczą z mostów – część 1 - [Atmel ATmega] Zablokowałem mikrokontroler ATMega. Co robić?
- [Atmel ATmega] Funkcja _delay_loop_1 działa nieprawidłowo gdy wywołana z parametrem 0