Vorab - das ganze läuft auf einem Atmel.
Ich habe eine NTP Klasse erstellt, stellt aus dem Internet die aktuelle Zeit zur Verfügung
Dazu gibt es die Funktion time_t getNtpTime(); In time_t steht die Zeit im Unix Format zur Verfügung,
Im Hauptprogramm gibt es eine Lib (time.h) dies ist quasi eine Softwareuhr.
Dort kann man in der Funktion setSyncProvider( ); einen Funktionpointer einhängen der die time_t zurückgibt und die Uhr ist dann in synch.
Der Header meiner Klasse schaut so aus:
#ifndef TimeServer_h
#define TimeServer_h
#include <Arduino.h>
#include <WProgram.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <inttypes.h>
#include <Time.h>
const int NTP_PACKET_SIZE=48;
class TimeServer
{
public:
TimeServer();
TimeServer(byte *NTPSERVER);
time_t getNtpTime();
void Start();
private:
byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets
unsigned long sendNTPpacket(byte *address);
boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours);
EthernetUDP udp;
EthernetClass eth;
};
#endif
Alles anzeigen
Wenn ich im Hauptprogramm sowas mache:
meckert der Compiler das die Pointer nicht kompatibel sind.
das hier funktioniert ohne Probleme
TimeServer InternetZeit;
..
time_t TimeWrapper()
{
return InternetZeit.getNtpTime();
}
setSyncProvider(TimeWrapper);
Alles anzeigen
Also ist eine Funktonszeiger einer Funkton aus einer Klasse ist was anderes als ein Funktionzeiger aus der aufrufenden Klasse.
Muss man diese funktion als static defineren ? - nur dann compilert es nicht weil alles static sein muß