avr-gcc

Nagy Endre gumo at lucifer.kgt.bme.hu
Sun May 4 15:46:21 CEST 2003


Elkezdtem en is hasznalni az avr-gcc-t, es tenyleg nagyon konnyen lehet
benne programozni :) A multkori port kerdesre a helyes valasz:
if(PINC & _BV(PINC0) == 0) {...}, mivel PINC0 fixen 0-nak van definialva,
csak a bit sorszamat jeloli, PINC viszont a korrektul MMIO-val mappelt
PINC regiszter makroja, tehat hasznalhato inb() nelkul is.

Egyetlen dolog zavarta most meg a nyugalmamat. Akartam irni egy
ezredmasodperces felbontasu keslelteto fuggvenyt a timertol fuggetlenul.
Kezenfekvo a megoldas, az orajeltol fuggoen vegrehajtunk N db ures
ciklust (elvileg N kb. CLK/4000, ha 4 orajel hosszu ciklust csinalunk).

A CLK/4000 tul gyors lett (hibasan!), ezert mindenfele ertekeket
probalgattam. Alant lathato az illeto fuggveny es a gcc altal generalt
assembly forras ket valtozata.

A belso ciklusban van a lenyeg: CLK/160-nal pontosan azt teszi, amit C-ben
irtam, azaz egyesevel csokkenti az i-t. CLK/320-nal viszont mar 25-osevel
csokkenti az i-t! Honnan veszi a 25-ot...?

Most akkor egybol irjam is a bugreportot, vagy van valami esszeru
magyarazat a tortentekre?

Gumo

========================================
#define CLK 8000000
...
void delay(uint16_t ms) {ˇ
    uint16_t i;ˇ
    for(;ms;ms--) {ˇ
        for(i=CLK/160;i;i--) {ˇ
        }ˇ
    }ˇ
}ˇ
========================================
.LM3:ˇ
        ldi r18,lo8(-15536)ˇ
        ldi r19,hi8(-15536)ˇ
.L10:ˇ
        subi r18,lo8(-(-1))ˇ
        sbci r19,hi8(-(-1))ˇ
        brne .L10ˇ
        .stabn 68,0,68,.LM4-delay
.LM4:ˇ
        sbiw r24,1ˇ
        brne .L11ˇ
========================================
#define CLK 8000000
...
void delay(uint16_t ms) {ˇ
    uint16_t i;ˇ
    for(;ms;ms--) {ˇ
        for(i=CLK/320;i;i--) {ˇ
        }ˇ
    }ˇ
}ˇ
========================================
.LM3:ˇ
        ldi r18,lo8(25000)ˇ
        ldi r19,hi8(25000)ˇ
.L10:ˇ
        subi r18,lo8(-(-25))ˇ
        sbci r19,hi8(-(-25))ˇ
        brne .L10ˇ
        .stabn 68,0,68,.LM4-delay
.LM4:ˇ
        sbiw r24,1ˇ
        brne .L11ˇ
========================================


More information about the Elektro mailing list