Dazu musst du in der mainloop eine Funktion f16_check() regelmässig aufrufen:Ich habs eleganter gelöst, so das diese jederzeit im Betrieb entfernt / gewechselt werden kann.
Code: Alles auswählen
/**
* \ingroup sd
* Ein-/Ausstecken der Karte abhandeln
*/
void f16_check(void)
{
if(sd_get_root_dir() && !sd_raw_available())
{
fat16_close_dir(cwdir_ptr);
sd_close();
cwdir_ptr = 0;
#if USE_LOGDATEI
if (logStatus.logfile) {
f16_close(logStatus.logfile);
logStatus.logfile = 0;
}
#endif
SD_DEBUG("\r\nSD-Karte unplugged");
}
else if(!sd_get_root_dir() && sd_raw_available())
{
switch(sd_open()) // SD-Karte initialisieren
{
case SD_ERROR_NONE:
cwdir_ptr = sd_get_root_dir(); // dir-Pointer setzen
cwdirectory[0] = '/'; // start ist root
cwdirectory[1] = 0;
#if USE_LOGDATEI
machineStatus.LogInit = 1; // Logdatei in Mainloop initialisieren
#endif
SD_DEBUG("\r\nSD-Karte initialisiert");
return;
case SD_ERROR_INIT:
SD_DEBUG("\r\nSD-Karte initialization failed");
break;
case SD_ERROR_PARTITION:
SD_DEBUG("\r\nSD-Karte opening partition failed");
break;
case SD_ERROR_FS:
SD_DEBUG("\r\nSD-Karte opening filesystem failed");
break;
case SD_ERROR_ROOTDIR:
SD_DEBUG("\r\nSD-Karte opening root directory failed");
break;
default:
SD_DEBUG("\r\nSD-Karte unknown error");
break;
}
}
}
Wenn Fehler gefunden werden, freuen sich auch andere, die den Code nutzen, dass sie nicht nochmal suchen müssen.In der Soft von Wil sind noch paar kleine Fehler drinn
Code: Alles auswählen
//ändern einer Variable
int16_t command_setvar (char *outbuffer)
{
#if USE_ADC
uint8_t i;
uint32_t var = 0;
getLong(&var);
i = (uint8_t) var;
getLong(&var);
//var_array[i] = var; <---- da ist der Übeltäter
if (outbuffer) {..........
Code: Alles auswählen
#if USE_MMC
if(!sd_raw_available())
{
sdk = 0;
}
else
{
if (!sdk)
{
f16_init();
sdk = 1;
}
#if USE_SCHEDULER
#if USE_LOGDATEI
if (machineStatus.LogInit ) ...........
Code: Alles auswählen
//Standart INDEX.HTM Seite wenn keine andere gefunden wurde
if (!http_entry[index].new_page_pointer
#if USE_MMC
&& !http_entry[index].mmc // falls Zeiger noch nicht in Dateipuffer zeigt
#endif
)
{
//Besucher Counter
var_array[MAX_VAR_ARRAY-1]++;
if(!sd_raw_available()) //Karte nicht gesteckt
{
http_entry[index].new_page_pointer = Page2;
http_entry[index].http_header_type = 0;
sdk = 0;
}
else
{
if (!sdk)
{
f16_init();
sdk = 1;
}
http_entry[index].new_page_pointer = Page1;
http_entry[index].http_header_type = 0;
}
}..........
Code: Alles auswählen
/**
* \ingroup tcpcmdcommon
* \b VAR-Befehl: ändern/anzeigen einer unsigned int Variable
*
* \b Syntax VAR \<index\> [\<Wert\>]<br>
* \<index\> Speicherplatz der Variable<br>
* \<Wert\> optional neuer Wert oder -1 zur Anzeige des aktuellen Wertes
*
* \attention Die Speicherplätze 0 bis 4 werden auch vom AD-Wandler verwendet
* und somit durch die aktuellen ADC-Werte überschrieben.
*/
int16_t command_setvar (char *outbuffer)
{
#if USE_ADC
uint8_t i;
uint32_t var = 0;
getLong(&var);
i = (uint8_t) var;
getLong(&var);
if( var <= UINT16_MAX ) { // falls größer 64K (oder -1) wird die Variable nur angezeigt
var_array[i] = (unsigned int)var;
}
if (outbuffer) {
sprintf_P(outbuffer,PSTR("Inhalt der Variable[%2i] = %2u\r\n"),i,var_array[i]);
return strlen(outbuffer);
}
else {
usart_write("Inhalt der Variable[%2i] = %2u\r\n",i,(uint32_t)var_array[i]);
}
#endif
return 0;
}
Die aktuelle Version findest du ganz oben im ersten Beitrag.orfix hat geschrieben:bin bei der 093 version
Grußwil hat geschrieben:Falls du in der config.h einfach nur die Cam aktivierst wird dir der Speicher im Flash und im RAM überlaufen. Irgendwas anderes musst du dann abschalten (sendmail, dns ...) damit es noch in den 644er passt. Vielleicht liegt es daran, dass du es nicht programmieren kannst