RoboterCC - Robotic Code Compiler
Forum Robot Kits NIBObee NIBObee Projekte Warum wurde der Delay Befehl modifiziert?

Welcome

Nachrichten

Sie sind nicht eingeloggt.

Werbung

Letzte Themen

  • Keine Beiträge vorhanden

Site-Statistic

  • 6298 private projects
  • 359 public projects
  • 10659283 lines compiled
  • 46628 builds
NIBO @ facebook YouTube Twitter
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
  • Seite:
  • 1

THEMA: Warum wurde der Delay Befehl modifiziert?

Warum wurde der Delay Befehl modifiziert? 8 Monate 2 Wochen her #4339

  • boson
  • bosons Avatar
  • OFFLINE
  • Senior Boarder
  • Beiträge: 31
Welchen Sinn hat es den Delay Befehl zu modifizieren?

In delay.c steht dieser Code

void delay(uint16_t ms){
while(ms--)
delay_ms(1);
}

für mich mach das keinen Unterschied ob man delay(100) oder delay_ms(100) eingibt.

dareüber hinaus steht in base.c dieser Code

static void delay(uint8_t count) {
while (count--) {
_delay_ms(100);
}
}

eine "static void" ist eine Funktion die nur aus der jeweiligen Datei also base.c, nicht aber aus anderen aufgerufen werden kann. Der Unterschied zu delay.c ist das hier 100 Mal solange gewartet wird . Ok aber kann man das nicht lösen in dem man zwei Nuller dranhängt? Darüber hinaus erschafft man eine Funktion gleichen Namens , die inerhalb von base.c zu Konflikten mit delay.c führen würde, wenn man dort auf einen #include delay.c machen würde.

Kann mir jemand den Sinn erklären? :unsure:

Gruß Boson
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Warum wurde der Delay Befehl modifiziert? 8 Monate 2 Wochen her #4340

  • workwind
  • workwinds Avatar
  • OFFLINE
  • Administrator
  • Beiträge: 561
Hallo Boson,

der Sinn liegt im sparen von Flash-Speicherplatz...

Als static Funktion wird der Code nur hier eingebunden und vom Optimizer 'geinlined' - Also wird nur ein Register (8-bit) auf den Wert von on gesetzt (bzw. ist das durch den Funktionsaufruf bereits geschehen) und anschließend dekrementiert. Die Funktion blink_all wird nicht 'geinlined', da sie zu komplex ist ;-)

Du hast allerdings vollkommen Recht, dass der lokale Funktionsname delay(uint8_t) im Konflikt mit der globalen Funktion delay(uint16_t) steht!! Die lokale Funktion sollte ich in local_delay100() ändern!

Gruß,
workwind
Der Administrator hat öffentliche Schreibrechte deaktiviert.

Warum wurde der Delay Befehl modifiziert? 8 Monate 2 Wochen her #4341

  • boson
  • bosons Avatar
  • OFFLINE
  • Senior Boarder
  • Beiträge: 31
OK habe ich verstanden, macht Sinn, danke! :)

In meinem Burger Atmel-Studio Projekt habe ich die static void delay bereits umbenannt, da ich in jedem *.c file nur die main.h (entspricht robo.h) einbinde. Dort werden dann alle anderen eingebundenen Dateien gelistet. Das hat für mich den Vorteil, dass ich mir bei einer Erweiterung keine Gedanken machen muss welche Datei ich wo einbinden muss. Es passt immer. Aber deshalb gab es in der base.c die besagten Probleme.

Gruß Boson
Der Administrator hat öffentliche Schreibrechte deaktiviert.
  • Seite:
  • 1
Ladezeit der Seite: 0.081 Sekunden

Werbung

Online

Keiner