Witam.
Ostatnio zaczęłem bawić się w programowanie up Atmega16.
W tym celu zassałem sobie AVRStudio z Atmela i WInAVR z avrferaks.
Po napisaniu programu i stwierdzeniu niepoprawności jego działania ruszyłem program krok po kroku i zauważyłem , że pomija mi pewne części kodu. Ja otworzyłem kod asemblera to okazało się że linijka kodu C wogóle znikłodzie asemblera.
Co może być przyczyną takiego zachowania?
Dokładnie chodzi o zmienną Licz
Kod C:
Kod asemblera:
Ostatnio zaczęłem bawić się w programowanie up Atmega16.
W tym celu zassałem sobie AVRStudio z Atmela i WInAVR z avrferaks.
Po napisaniu programu i stwierdzeniu niepoprawności jego działania ruszyłem program krok po kroku i zauważyłem , że pomija mi pewne części kodu. Ja otworzyłem kod asemblera to okazało się że linijka kodu C wogóle znikłodzie asemblera.
Co może być przyczyną takiego zachowania?
Dokładnie chodzi o zmienną Licz
Kod C:
#include <AVR/io.h>
#include <AVR/interrupt.h>
#include "global.h"
//************************ DEFINICJE ***************************************
//************************ Deklaracje zmiennych *****************************
unsigned char Kol_diod, wiersz, Pk_Wy, Diod;
unsigned char Licz;
unsigned char Pk_WyTMP;
//***************************************************************************
int main(void) // Pętla główna
{
DDRA=0xff; // Port A jako wyjścia
DDRB=0b01111111; // Port B jako wyjścia
DDRD=0b00000000; // Port D jako wejścia
PORTA=0xff;
//sei(); // Zezwolenie na obsługę przerwań
Pk_Wy=0x0;
Pk_WyTMP=9;
u08 x;
// u08 y;
Licz=1;
do
{
x++;
Licz++;
}
while (x==250);
} Kod asemblera:
6: {
+0000003E: EF9F SER R25 Set Register
+0000003F: BB9A OUT 0x1A,R25 Out to I/O location
18: DDRB=0b01111111; // Port B jako wyjścia
+00000040: E78F LDI R24,0x7F Load immediate
+00000041: BB87 OUT 0x17,R24 Out to I/O location
19: DDRD=0b00000000; // Port D jako wejścia
+00000042: BA11 OUT 0x11,R1 Out to I/O location
20: PORTA=0xff;
+00000043: BB9B OUT 0x1B,R25 Out to I/O location
22: Pk_Wy=0x0;
+00000044: 92100065 STS 0x0065,R1 Store direct to data space
23: Pk_WyTMP=9;
+00000046: E089 LDI R24,0x09 Load immediate
+00000047: 93800060 STS 0x0060,R24 Store direct to data space
30: Licz++;
+00000049: E082 LDI R24,0x02 Load immediate
+0000004A: 93800064 STS 0x0064,R24 Store direct to data space
33: }
+0000004C: E080 LDI R24,0x00 Load immediate
+0000004D: E090 LDI R25,0x00 Load immediate
+0000004E: 9508 RET Subroutine return
33: }
+0000004F: 94F8 CLI Global Interrupt Disable
+00000050: CFFF RJMP PC-0x0000 Relative jump;