Voor mijn arduino heb ik een simpel protocol verzonnen wat data in meerder pakketjes kan opsplitsen, helaas gaat het bij het kopieren van het bericht naar de tijdelijke buffer (die pas verwerkt word als het laatste bericht binnen gekomen is) iets mis.
Ik declareer als eerste een tijdelijk array van de grootte huidige buffer + datablock grootte (-9 wanwege crc + header). Vervolgens kopieer ik alle bytes van de algehele buffer naar het array en gooi de bytes van het datablock erbij. Nadat dit gebeurd is release ik de oude algemene buffer en kopieer ik de pointer naar de nieuwe buffer.
De 1e keer werkt de code, de tweede keer werkt het niet, na wat debuggen ben ik erachter gekomen dat de 2e x het geheugenadres van tempBuffer gelijk is aan commandBuffer. (en na de free gaat alles dan naar de knoppen).
Wat ik echter niet begrijp is hoe dit kan gebeuren, ik maak toch netjes een nieuwe tempBuffer aan (die op een nieuw geheugenadres gealloceerd word?)
Het is vast een domme (beginners) fout, maar ik spot hem even niet zo snel
Ik declareer als eerste een tijdelijk array van de grootte huidige buffer + datablock grootte (-9 wanwege crc + header). Vervolgens kopieer ik alle bytes van de algehele buffer naar het array en gooi de bytes van het datablock erbij. Nadat dit gebeurd is release ik de oude algemene buffer en kopieer ik de pointer naar de nieuwe buffer.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| unsigned char tempBuffer[commandBufferLength+blockLength-9]; for(int i = 0; i<commandBufferLength;i++) { //save bytes that we got already tempBuffer[i] = commandBuffer[i]; } for(int i = 7; i<blockLength-2;i++) { //copy block to tempbuffer and strip off header and crc tempBuffer[commandBufferLength+i-7] = dataBlock[i]; } commandBufferLength+=blockLength-9; //add blocklength free(commandBuffer); //clear old command buffer commandBuffer = tempBuffer; //copy pointer |
De 1e keer werkt de code, de tweede keer werkt het niet, na wat debuggen ben ik erachter gekomen dat de 2e x het geheugenadres van tempBuffer gelijk is aan commandBuffer. (en na de free gaat alles dan naar de knoppen).
Wat ik echter niet begrijp is hoe dit kan gebeuren, ik maak toch netjes een nieuwe tempBuffer aan (die op een nieuw geheugenadres gealloceerd word?)
Het is vast een domme (beginners) fout, maar ik spot hem even niet zo snel
Mess with the best, die like the rest