Skocz do zawartości

Błąd w WinAVR


PyNone

Pomocna odpowiedź

Z tą pętlą to bym uważał. Po pierwsze nie tworzy jej GCC, to po prostu kawałek programu który jest kompilowany jak każdy inny. Wbrew pozorom funkcja main() nie jest taka wyjątkowa i można zamiast niej użyć innej nazwy.

Wspomniany kod jest w przypadku AVR zawarty w bibliotece libc (http://download.savannah.gnu.org/releases/avr-libc/), dlatego wydaje się, że jest magicznie dodawany. Ten sam kompilator, czyli gcc w wersji dla STM32 zawiera plik startowy w "jawnej" postaci i łatwiej zobaczyć co się dzieje.

Ale wracając do AVR, przykładowy kod z biblioteki wygląda tak:

	.section .init9,"ax",@progbits
#ifdef __AVR_ASM_ONLY__
XJMP	main
#else	/* !__AVR_ASM_ONLY__ */
XCALL	main
XJMP	exit
#endif	/* __AVR_ASM_ONLY__ */
;	.endfunc

Jak widać wywoływana jest funkcja main, a po jej powrocie exit(). Nie ma pętli, więc trzeba byłoby sprawdzić kod w exit().

W każdym razie powrót z main w przypadku embedded należy traktować jako błąd. Różne wersje bibliotek implementują różne zachowania - czasem nieskończoną pętlę, czasem reset, a czasem są po prostu błędne (np. STM32).

edit: kod funkcji exit() faktycznie zawiera pętlę:

	ASSEMBLY_CLIB_SECTION
.global _U(exit)
.type	_U(exit), "function"

_U(exit):
cli
XJMP	_U(_exit)

.size	_U(exit), . - _U(exit)
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.