Hey moscito
Wenn du mit C Anfangen/weitermachen möchtest, dann lege ich die als Entwicklungsumgebung eclipse + WinAVR ans Herz. Das ganze ist kostenlos, und dadurch das die eclipse Platform ein OpenSource-Projekt ist gibt es dafür noch unendlich viele Adons. Aber selbst die eclipse allein stellt schon so manchen kaufbaren C-Compiler in den Schatten.
Zwecks Checksummenprüfung:
In meinen Projekten lasse ich die ankommenden COM-Daten per TX-Interrupt in einen Puffer legen. Aus diesem Puffer wird bei jedem Hauptschleifendurchlauf alle Daten einer Sequenz (solange vorhanden)entnommen, auf Startbyte, Datenanzahl und Cheksumme geprüft, und wenn alles I.O. ist die Daten verarbeitet, und über Variablen den weiteren Programmfunktionen zur Verfügung gestellt. Somit brauchst du dich nicht mehr mit der Com-Funktionalität herumschlagen, und die Daten stehen überall zur verfügung. Auch lässt sich so einen TimeOut-Überwachung einbauen, die nach TimeOut die Variablen löscht.
Übrigens habe ich mal ein keines C-Projekt für den Tiny 45 gemacht, um einen Vergleich zwischen Floatmultiplikation und Ganzzahlmultiplikation zu erhalten. Die Übernahme aus USIDR (universal serial Data Register) musste ich machen, da der Compiler bei einer festen Zahl die Berechnung sonst im Precompiler erledigt. Hier der C-Code:
#include <avr/io.h>
float Data_Out = 0;
float Data_In = 0;
//unsigned int Data_Out = 0;
//unsigned int Data_In = 0;
#define FAKTOR 3
int main (void)
{
Data_In = USIDR;
Data_Out = Data_In * FAKTOR;
return 0;
}
Ich habe jeweils mit float- oder int-Variablen compiliert, wobei die jeweils anderen Rasukommentiert ( // ) wurden. Dann hab ich in AVR-Studio die Ausführungszeit gemessen, dabei ist folgendes herrausgekommen:
Variablentyp---Zeit---------Flashgröße--RAMgröße
float----------3065 Takte--2070 Byte---272 Byte
INT-----------88 Takte----136 Byte-----4 Byte
Du siehst die Unterschiede sind gewaltig.
Gruß Steffen
Wenn du mit C Anfangen/weitermachen möchtest, dann lege ich die als Entwicklungsumgebung eclipse + WinAVR ans Herz. Das ganze ist kostenlos, und dadurch das die eclipse Platform ein OpenSource-Projekt ist gibt es dafür noch unendlich viele Adons. Aber selbst die eclipse allein stellt schon so manchen kaufbaren C-Compiler in den Schatten.
Zwecks Checksummenprüfung:
In meinen Projekten lasse ich die ankommenden COM-Daten per TX-Interrupt in einen Puffer legen. Aus diesem Puffer wird bei jedem Hauptschleifendurchlauf alle Daten einer Sequenz (solange vorhanden)entnommen, auf Startbyte, Datenanzahl und Cheksumme geprüft, und wenn alles I.O. ist die Daten verarbeitet, und über Variablen den weiteren Programmfunktionen zur Verfügung gestellt. Somit brauchst du dich nicht mehr mit der Com-Funktionalität herumschlagen, und die Daten stehen überall zur verfügung. Auch lässt sich so einen TimeOut-Überwachung einbauen, die nach TimeOut die Variablen löscht.
Übrigens habe ich mal ein keines C-Projekt für den Tiny 45 gemacht, um einen Vergleich zwischen Floatmultiplikation und Ganzzahlmultiplikation zu erhalten. Die Übernahme aus USIDR (universal serial Data Register) musste ich machen, da der Compiler bei einer festen Zahl die Berechnung sonst im Precompiler erledigt. Hier der C-Code:
#include <avr/io.h>
float Data_Out = 0;
float Data_In = 0;
//unsigned int Data_Out = 0;
//unsigned int Data_In = 0;
#define FAKTOR 3
int main (void)
{
Data_In = USIDR;
Data_Out = Data_In * FAKTOR;
return 0;
}
Ich habe jeweils mit float- oder int-Variablen compiliert, wobei die jeweils anderen Rasukommentiert ( // ) wurden. Dann hab ich in AVR-Studio die Ausführungszeit gemessen, dabei ist folgendes herrausgekommen:
Variablentyp---Zeit---------Flashgröße--RAMgröße
float----------3065 Takte--2070 Byte---272 Byte
INT-----------88 Takte----136 Byte-----4 Byte
Du siehst die Unterschiede sind gewaltig.
Gruß Steffen