Pages: 1 [2]   Go Down
Author Topic: main.c aufruf aus dem ordner ".../cores/arduino"  (Read 1812 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
...bist du nur am Meckern und am Kritisieren der Arduino IDE.

hmmm..., was hat die ide damit zu tun. gar nichts!
es ist das sogenannte hilfreiche toolspektakel....
weil durch die zucompilierten core-sourcen teilweise das reale vom atmeg328p durcheinander gebracht wird.

warum kann man nicht die delays... so schreiben:
Code:
void delay(unsigned long ms)
{
_delay_ms(ms);
}

void delayMicroseconds(unsigned int us)
{
_delay_us(us);

}

statt diesen langen code in der wiring.c :
Code:
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;

// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of the timer0_millis++)
cli();
m = timer0_millis;
SREG = oldSREG;

return m;
}

unsigned long micros() {
unsigned long m, t;
uint8_t oldSREG = SREG;

cli();
t = TCNT0;
 
#ifdef TIFR0
if ((TIFR0 & _BV(TOV0)) && (t == 0))
t = 256;
#else
if ((TIFR & _BV(TOV0)) && (t == 0))
t = 256;
#endif

m = timer0_overflow_count;
SREG = oldSREG;

return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
}

void delay(unsigned long ms)
{
unsigned long start = millis();

while (millis() - start <= ms)
;
}

/* Delay for the given number of microseconds.  Assumes a 8 or 16 MHz clock.
 * Disables interrupts, which will disrupt the millis() function if used
 * too frequently. */
void delayMicroseconds(unsigned int us)
{
uint8_t oldSREG;

// calling avrlib's delay_us() function with low values (e.g. 1 or
// 2 microseconds) gives delays longer than desired.
//delay_us(us);

#if F_CPU >= 16000000L
// for the 16 MHz clock on most Arduino boards

// for a one-microsecond delay, simply return.  the overhead
// of the function call yields a delay of approximately 1 1/8 us.
if (--us == 0)
return;

// the following loop takes a quarter of a microsecond (4 cycles)
// per iteration, so execute it four times for each microsecond of
// delay requested.
us <<= 2;

// account for the time taken in the preceeding commands.
us -= 2;
#else
// for the 8 MHz internal clock on the ATmega168

// for a one- or two-microsecond delay, simply return.  the overhead of
// the function calls takes more than two microseconds.  can't just
// subtract two, since us is unsigned; we'd overflow.
if (--us == 0)
return;
if (--us == 0)
return;

// the following loop takes half of a microsecond (4 cycles)
// per iteration, so execute it twice for each microsecond of
// delay requested.
us <<= 1;

// partially compensate for the time taken by the preceeding commands.
// we can't subtract any more than this or we'd overflow w/ small delays.
us--;
#endif

// disable interrupts, otherwise the timer 0 overflow interrupt that
// tracks milliseconds will make us delay longer than we want.
oldSREG = SREG;
cli();

// busy wait
__asm__ __volatile__ (
"1: sbiw %0,1" "\n\t" // 2 cycles
"brne 1b" : "=w" (us) : "0" (us) // 2 cycles
);

// reenable interrupts.
SREG = oldSREG;
}

ich habe nichts gegen alle tool-c-sourcen.
etliche sind wunderbar für den 382p geschrieben.

gruss
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3480
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Libraries sind in der Tat nicht immer so prickelnd. Wenn Du Verbesserungen hast, dann bring sie doch einfach ein. Gute Vorschläge werden normalerweise aufgenommen. Bloß weil Dein Code kürzer aussieht muß das Kompilat aber nicht notwendig besser sein. Hast Du schon mal per Disassembler nachgeschaut ob Dein Vorschlag wirklich besser ist? Bzw. warum die Lösung aus der Library nicht so ersetzt werden kann? In der Regel liegt der Teufel im Detail.
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Hast Du schon mal per Disassembler nachgeschaut ob Dein Vorschlag wirklich besser ist?

es kommt darauf an wie man den level einstellt in winavr-c "0,1,S,2,3" alle binärdateien sind dann unterschiedlich.
auch wird bei diesen levels die länge der delay beeinflusst zb.

gruss
« Last Edit: February 16, 2011, 05:41:11 am by funkheld » Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3480
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Also hast Du NICHT nachgeschaut sondern gibst eine allgemeine Erkenntnis zum Besten. Wie Webmeister werde ich aus Deinen Sprüchen auch nicht schlau.

Wenn Du soviel kannst wie Du tönst, warum schaust Du dann nicht einfach in den Sourcen nach statt solche Fragen wie Deine Eingangsfrage zu stellen? Die Arduino Libs sind ja nicht wirklich groß. Sowas zieht sich jeder C Experte locker in ein paar Stunden durch.

Und ja: die Libs sind nicht super toll. Die wirkliche Arbeit steckt in der AVR-LIBC. Der eigentliche Nutzen steckt in der bequemen Verschalung. Wenn die Dir nicht gefällt, dann benutze sie doch einfach nicht. Ich nehme sie auch nur wenn sie mir nützt. Wenn nicht dann nicht.

Udo
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Full Member
***
Karma: 1
Posts: 107
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich weiss nicht, was du immer für ein kartoffelsalat redest.
dein geplärre geht mir auf den geist...

gruss
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 257
Posts: 21460
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo funkheld

Mir gefällt nicht eine solche Sprache lesen zu müssen.

Bitte benutze eine gemäßigte Ausdrucksweise.

Die Antworten Die Du bekommen hast sind sicher provokativ aber nicht beleidigend.
Wenn Du in einem solchen Ton schreibst, wer soll Dir noch antworten oder mit Dir diskutieren wollen?

Viele Grüße Uwe
 
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3480
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@Uwe: tja, das ist leider der Nachteil eines Forums. Wenn das eine NG wäre, dann hätte es jetzt plonk gemacht und gut ist. Hier geht das anscheinend nur für PMs. Oder kennt jemand noch weitere Einstellungen?

Udo


* screenshot.png (69.43 KB, 1089x750 - viewed 21 times.)
« Last Edit: February 17, 2011, 11:53:30 am by Udo Klein » Logged

Check out my experiments http://blog.blinkenlight.net

Pages: 1 [2]   Go Up
Jump to: