sockets - Arduino loose serial-connection with our server -
we trying develop webapplication receive data arduino. programmed arduino send (on web server) json's every 5 seconds. works fine 1-2 minutes don't receive data arduino. tx keeps blinking our console shows empty string. ideeas? ps. baudrate set 9600 if tell :)
according github issue page ajson library, seems there memory leak in print(ajsonobject *) function, returns buffer char array allocated malloc(), you're responsible calling free() on again. calling function print(ajsonobject *, ajsonstream *), calls printvalue , print(ajsonobject *), not keep references allocated array , consequently not free it.
it seems making ajson send data directly stream work if modify functions call print(ajsonobject *) free memory.
alternatively, can call print(ajsonobject *) yourself, send contents of char array out serial port, , free memory. easier modify many function calls in library itself.
edit: seems problem indeed, have tried code on mega2560 , printed out free memory after printing each json object (with of this library) , , got this:
{"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 7755 {"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 7644 <snip> {"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 540 {"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 429 {"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 318 {"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 207 {"value1":500,"":1000} freememory = 153 freememory = 153 freememory = 153 freememory = 153 however, there 1 other thing have do, namely calling ajson.deleteitem() on json object, because contributes memory leak. try changing code in loop this:
ajsonobject *msg = createmessage(); char *json = ajson.print(msg); serial.print(json); serial.println(); free(json); ajson.deleteitem(msg); now, available memory stays same after each loop iteration:
{"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 7884 {"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 7884 {"value1":500,"value2":1000,"value3":1500,"value4":2000} freememory = 7884 <snip> edit 2: looks using stream works too, though still have call ajson.deleteitem(msg) after printing data.
Comments
Post a Comment