Show Posts
Pages: [1] 2 3
1  International / Deutsch / Re: Speicher Freigabe von strtok on: December 01, 2013, 04:38:06 pm
Hi  smiley

was soll ich sagen perfekt

Code:
char* classWebServer::getValueFromUrl(char* pcID) {
  char* ptr = strstr(m_pchRequest, pcID);
  if(ptr == NULL) {
    return NULL;
  }
  char* startPtr = ptr + strlen(pcID) + 1;
  int length = strcspn(startPtr, "? =&/");
 
  char* pcBuffer = (char*)calloc(length+1, sizeof(char));
  strncpy(pcBuffer, startPtr, length);
 
 return pcBuffer;
}

Danke nochmals für deine große HIlfe

Grüße
Stefan
2  International / Deutsch / Re: Speicher Freigabe von strtok on: December 01, 2013, 02:29:46 pm
Hi,

Beispielstring:

Code:
GET http://192.168.177.23/?modul=micro&do=login&uname=sepp&up=123456789 HTTP 1.1

Ich suche z.B. nach modul (ist im String pcID) und Rückgabewert soll dann micro sein, usw

Der Funktion übergebe ich dann nur noch modul oder do usw und bekomme den entsprechenden Wert  zurück.

Gruß und Danke für deine Hilfe
speedy
3  International / Deutsch / Re: Speicher Freigabe von strtok on: December 01, 2013, 02:08:40 pm
Hallo Serenifly,

vielen Dank für deine Antwort.

Du hast die Funktion richtig gelesen :o), der string soll erhalten bleiben deshalb wird eine Kopie erstellt.

Warum ich mit strtok arbeite, hmm, ist halt eine Möglichkeit, doch wenn der Speicher dann verloren ist, muss ich eine andere schreiben. Ich probiere mich mal an deiner Idee :-).

Hast zufällig einen Code  Schnippsel rumliegen  smiley-wink

Gruß
speedy
4  International / Deutsch / Speicher Freigabe von strtok on: December 01, 2013, 01:42:29 pm
Hallo zusammen,

ich bin gerade am optimieren meiner Funktionen da Speicherknappheit herrscht.

Wenn ich folgende Funktion aufrufe sind gleich mal 126 Byte verschwunden.

Die 126 byte ist die Größe der m_pchRequest Variable

Code:
char* classWebServer::getValueFromUrl(char* pcID) {
  char *ptr;
  char *pcBuf = NULL;
  int iFound = 0;

  char *pcUrl = (char *)malloc(strlen(m_pchRequest)+1 * sizeof(char));
  memset(&pcUrl[0], 0, strlen(m_pchRequest)+1 * sizeof(char));
  strcpy(pcUrl, m_pchRequest);
 
  ptr = strtok(pcUrl, "? =&/");
  if(strcmp(ptr, "GET") == 0) {
  }

  while(ptr != NULL) {   
    ptr = strtok(NULL, "? =&/");   
    if(strcmp(ptr, "HTTP") == 0) {
      break;
    }   

    if(strcmp(ptr, pcID) == 0) {
      ptr = strtok(NULL, "? =&/");   
      pcBuf = ((char *)malloc(strlen(ptr)+1 * sizeof(char)));
      strcpy(pcBuf, ptr);
      break;
    }   
  }   
  free(pcUrl);
  pcUrl = NULL;
  ptr = NULL;
  return pcBuf;
}

Doch warum? Wie kann ich den von strtok belegten Speicher wieder freigeben?

Vielen Dank im vorraus.

Gruß
speedy
5  International / Deutsch / Ethernet als Webserver, unkontrollierter Abbruch on: July 14, 2013, 10:34:48 am
Hallo zusammen,

hoffe ich kann mal wieder auf eure Hilfe zählen :o)

Die Kommunikation (Webserver, AJAX) zwischen MEGA und Client funktioniert soweit ganz gut, doch es kommt so alle 5 Aufrufe vor das der Webserver vom MEGA die Verbindung abbricht

Mit Hilfe von AJAX habe ich heraus gefunden das es im Sendestatus 3, also beim Sendevorgang zum Abbruch kommt.

Es sind noch knappe 4KB RAM Speicher frei, daran kann es nicht liegen.

Mit dieser Function lese ich die Daten aus einer TXT Datei von der SD-Card aus und generiere ein XML Datei zum senden.

Code:
/////////////////////////
// SEND/ TEMPERATUR LOAHG FILE
//////////////////////
void classApp::sendXMLTemperaturLogFile(char *pchID, char* pchFileName) {
  unsigned int iSize = 0;
  char szBuffer[128];
  memset(&szBuffer[0], 0, 128*sizeof(char));
 
  char *chPath = (char*)malloc(40 * sizeof(char));
  memset(&chPath[0], 0, 40 * sizeof(char));
  strcat(chPath, "temp/");
  strcat(chPath, pchID);
  strcat(chPath, "/logger/");
  strcat(chPath, pchFileName);
 
  File logFile = SD.open(chPath, FILE_READ);
 
  classXML pXML; 
  pXML.Open(m_WebServer.getClient()); 
  pXML.setItemOpen("TEMPERATURLOGFILE"); 
 
  while (logFile.available()) {
    char chBuf = logFile.read();
    if(chBuf == '#') {
      break;
    }
    if(chBuf == '\r') {
      continue;
    }
    if(chBuf == ':') {
      pXML.setItemOpen("ITEM");
      pXML.setItemDATA("STD", szBuffer);
      memset(&szBuffer[0], 0, 128*sizeof(char));
      iSize = 0;
      continue;
    }
    if(chBuf == ',') {
      pXML.setItemDATA("MIN", szBuffer);
      memset(&szBuffer[0], 0, 128*sizeof(char));
      iSize = 0;
      continue;
    }
    if(chBuf == '\n') {
      pXML.setItemDATA("TEMP", szBuffer);
      pXML.setItemClose("ITEM");
      memset(&szBuffer[0], 0, 128*sizeof(char));
      iSize = 0;
      continue;
    }
 
    szBuffer[iSize] = chBuf;
    iSize++;   
  }

  pXML.setItemClose("TEMPERATURLOGFILE");
  pXML.Close();
 
  logFile.close();
  free(chPath);
}

Irgend welche Ideen woran es liegen könnte?

Grüße
speedy
6  International / Deutsch / Re: PWM und analogRead falsche Ausgabe on: June 25, 2013, 02:43:59 pm
Hallo zusammen,

vielen Dank für eure ausführliche Erläterung.

Grüße
speedy
7  International / Deutsch / PWM und analogRead falsche Ausgabe on: June 24, 2013, 06:48:10 pm
Hallo zusammen,

ich lese mich gerade in die Sache PWM ein und kann auch schon einen 12V Lüfter hoch und runter fahren. Ich möchte nun den gesetzten Wert des PWM Pins auslesen doch kommen da ganz andere Zahlen raus.

Gesetzt ist z.B. 255 doch die Ausgabe sagt 70 :-(

Warum??

Code:
#define led 9
int i = 0;
int del = 100;

void setup()
{
  Serial.begin(9600);
  pinMode(led, OUTPUT); 
  digitalWrite(led, HIGH); 
  analogWrite(led, 50);
}

 void loop()
 {
    digitalWrite(led, HIGH);
 
     for(i = 50; i < 254; i++)
    {
      analogWrite(led, i);
      Serial.println(analogRead(led));
      delay(del);
    }
   
    delay(10000);
   
    for(i = 254; i > 50; i--)
    {
      analogWrite(led, i);
      Serial.println(analogRead(led));
      delay(del);
    }

}

Grüße
speedy
8  International / Deutsch / Re: RAM Speicher schonender programmieren on: June 12, 2013, 05:00:57 pm
Hallo Udo,

danke für deine Worte  smiley-wink, doch genau das ist mein Ziel, und muss sagen bis heute bin ich ganz zufrieden, dank der Community konnte ich schon sehr viel RAM sparen  smiley und es kann weitergehen.

Genau das macht es doch aus, wenn man ein Ziel im Kopf hat, es dann auch umzusetzen kann und auch noch alles so klappt wie vorgestellt  smiley-mr-green

Gruss
speedy
9  International / Deutsch / Re: SD Datei nach X Tagen automtisch löschen on: June 12, 2013, 04:54:00 pm
Aktuelles Datum nehmen, 10 Tage zurück rechnen und dann vergleichen.

Hi Udo,

genau da liegt mein Problem :-/ Wie mache ich das?

Gruss
speedy
10  International / Deutsch / Re: SD Datei nach X Tagen automtisch löschen on: June 12, 2013, 04:32:39 pm
Hi,

danke für deine Hilfe.

Ist alles sehr einleuchtend und wurde auch alles so umgeschrieben :o)

Wenn ich sagen wir alle Log Files die älter als 10 Tage sind löschen will hilft mir da strcmp nicht viel, oder?

Ich finde ja hier nur heraus ob <, >= usw. aber nicht ob die Datei älter als 10 Tage ist.

Glaube stehe gerade auf dem Schlauch :-(

Gruss
speedy
11  International / Deutsch / Re: SD Datei nach X Tagen automtisch löschen on: June 12, 2013, 09:29:12 am
HI,

danke für eure Antworten.

Du könntest die Datei nach dem Datum benennen.

Ui, das habe ich ja von Haus aus, daran habe ich garnicht gedacht.

Manchmal sieht man den Wald vor lauter Bäume nicht *grins*

Quote
Aber warum löschen? Die kleinsten SD Karten sind 2GB heutzutage, die kriegst du nie voll.

Weil der User endscheiden darf ob die Logfile automatisch gelöscht werden soll.

Jetzt muss ich nur noch raus ausrechnen wie alt die Datei ist.

Dateiname: 01022013.txt (Tag,Monat,Jahr)

Idee?

Grüße
speedy
12  International / Deutsch / SD Datei nach X Tagen automtisch löschen on: June 11, 2013, 07:28:51 pm
Hallo zusammen,

ich möchte nach X Tagen automatisch einige Datei auf der SD-Card löschen.

Doch wie komme ich an das Erstellungsdatum der Dateien?

Grüße
speedy
13  International / Deutsch / Re: Udp IP nicht erreichbar wie abfangen? on: June 10, 2013, 05:41:41 pm
hat sich erledigt, beginPacket() meldet doch etwas zurück, da ist wohl die Doku nicht aktuell.

http://arduino.cc/de/Reference/EthernetUDPBeginPacket

Gruss
speedy
14  International / Deutsch / Udp IP nicht erreichbar wie abfangen? on: June 10, 2013, 05:19:17 pm
Hallo zusammen,

in meinem Projekt spielt die Uhrzeit die Hauptrolle ;-) ich stelle die Uhrzeit mit Hilfe der UDP.

Das funktioniert auch soweit alles sehr gut, nun möchte ich aber wenn IP 1 nicht erreichbar ist, dann versuche IP 2 usw.

Wie kann ich das abfangen bzw. herausfinden ob Verbindung zu Stande gekommen ist?

beginPacket() gibt ja nichts zurück.

Vielen Dank für Denkanstöße.

Grüße
speedy
15  International / Deutsch / Re: RAM Speicher schonender programmieren on: June 10, 2013, 04:24:13 pm
HI,

Code:
char buf[41];
memcpy_P(buf,name,strlen_P(name)+1);

Wird hier nicht auch der char array vorab im RAM reserviert?

Code:
for (int i=0;i<strlen_P(name);i++)
Serial.print((char)pgm_read_byte(name+i));

Das funktinoert prima wenn ich die Daten per Serial ausgeben will, doch wie mache ich das wenn ich z.

Code:
SD.open(....)

in der Function sendXMLFile(...) aufrufen will?

Danke schon einmal vorab.

Gruß
speedy
Pages: [1] 2 3