Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
AVR STUDIO - ASM
JaHo Offline
Nowicjusz
*

Liczba postów: 35
Dołączył: 24-06-2011
Post: #21
RE: AVR STUDIO - ASM
No i byłem się mocno zdziwiłem.
Zarówno książka "Embedded C Programming and the Atmel AVR" w rozdziale "2.4.2 DATA MEMORY" (na stronach 89 do 94) jak i książka "CodeVisionAVR User Manual" w rozdziale "3.16 SRAM Memory Organization" (strony 86 i 87) oraz w rozdziale "3.18.1 Calling Assembly Functions from C" (strona 91) mówią wyraźnie że kompilator CodeVisionAVR C implementuje dwa stosy, jeden nazywany "stosem systemowym" (do przechowywania "adresów powrotu" i informacji "kontrolnych" procesora) i drugi zwany "stosem danych" (do przechowywania danych tymczasowych jak np. argumentów procedur, zmiennych lokalnych używanych w procedurach oraz do zachowywania stanu rejestrów używanych przez procedury przerwań; "stos danych" jest umieszczony w RAM bezpośrednio pod "stosem systemowym").
Z opisu jednak wynika że i ten kompilator preferuje umieszczanie zmiennych globalnych i lokalnych w rejestrach a nie na "stosie danych".
To chyba dosyć jasno pokazuje że nie można linkować razem procedur / bibliotek skompilowanych przez avr gcc i CodeVisionAVR C. A co więcej, procedury asemblerowe nie są nawet "przenaszalne" na poziomie kodu źródłowego.

Dla porządku warto chyba wspomnieć o klasie procesorów które nie mają RAM w ogóle (albo mają go mikroskopijnie mało). I w takich procesorach może istnieć "stos systemowy", ale zrealizowany w pełni sprzętowo poprzez hardware'owe LIFO o bardzo ograniczonej wielkości ... np. pamiętam procesor który miał "w sobie" miejsce na 6 adresów powrotu (nie mogę sobie przypomnieć typu). Nie ma tu oczywiście mowy o żadnym przekazywaniu parametrów przez stos (ani o żadnych zmiennych lokalnych), a maksymalna liczba "zagłębionych" wywołań procedur byłaby właśnie 6 (no ale trzeba pamiętać że jeśli w dowolnym momencie może przyjść przerwanie które musi mieć "miejsce" na stosie albo jeśli do tego przerwania mogą się jeszcze "zagłębiać" to trzeba to też przewidzieć w "bilansie").

A propos jakości generowanego kodu ... czy ktoś próbował avr gcc z "-Os -mcall-prologues"? Według "AVR Libc - FAQ - Which -O flag to use?" te flagi dają "najlepszy uniwersalny" poziom optymalizacji.
(Ten post był ostatnio modyfikowany: 12-04-2012 16:04 przez JaHo.)
12-04-2012 16:03
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
AVR STUDIO - ASM - SQ6ADE - 14-10-2010, 0:06
RE: AVR STUDIO - ASM - SP5FCS - 14-10-2010, 22:39
RE: AVR STUDIO - ASM - SQ6ADE - 15-10-2010, 21:04
RE: AVR STUDIO - ASM - SQ6ADE - 28-10-2010, 21:55
RE: AVR STUDIO - ASM - SQ6OXK - 28-10-2010, 23:53
RE: AVR STUDIO - ASM - SP9FKP - 14-11-2010, 14:36
RE: AVR STUDIO - ASM - SP9FKP - 02-12-2010, 8:47
RE: AVR STUDIO - ASM - SQ6ADE - 02-12-2010, 14:08
RE: AVR STUDIO - ASM - SP4EJT - 10-04-2012, 15:11
RE: AVR STUDIO - ASM - SP5FCS - 10-04-2012, 22:22
RE: AVR STUDIO - ASM - JaHo - 10-04-2012, 16:52
RE: AVR STUDIO - ASM - SP4EJT - 10-04-2012, 19:05
RE: AVR STUDIO - ASM - SQ6ADE - 10-04-2012, 19:10
RE: AVR STUDIO - ASM - SP4EJT - 10-04-2012, 19:31
RE: AVR STUDIO - ASM - SQ6ADE - 10-04-2012, 20:48
RE: AVR STUDIO - ASM - SQ6ADE - 10-04-2012, 22:25
RE: AVR STUDIO - ASM - JaHo - 11-04-2012, 22:09
RE: AVR STUDIO - ASM - SP5FCS - 11-04-2012, 23:02
RE: AVR STUDIO - ASM - JaHo - 12-04-2012, 10:29
RE: AVR STUDIO - ASM - SP5FCS - 12-04-2012, 12:44
RE: AVR STUDIO - ASM - JaHo - 12-04-2012 16:03

Skocz do:


Użytkownicy przeglądający ten wątek: 2 gości