Skip to content

Commit c8f5163

Browse files
hasslesstechkoroliLich
authored andcommitted
Issue #26: [fix] reset function does not cast values, copies memory directly
1 parent ca89c76 commit c8f5163

File tree

1 file changed

+47
-3
lines changed

1 file changed

+47
-3
lines changed

KPI_Rover/Database/ulDatabase.c

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@
99
#define DB_LOCK() osMutexAcquire(ulDatabase_mutex, osWaitForever)
1010
#define DB_FREE() osMutexRelease(ulDatabase_mutex)
1111

12+
union TypeHolder {
13+
uint8_t u8;
14+
int8_t i8;
15+
uint16_t u16;
16+
int16_t i16;
17+
uint32_t u32;
18+
int32_t i32;
19+
float f;
20+
};
21+
1222
static osMutexId_t ulDatabase_mutex;
1323
StaticSemaphore_t *ulDatabase_mutex_cb;
1424

@@ -336,21 +346,55 @@ bool ulDatabase_reset(uint16_t id)
336346
if (p == NULL)
337347
return false;
338348

349+
union TypeHolder new_value;
350+
339351
DB_LOCK();
340352

341353
switch (p->type) {
342354
case UINT8:
355+
new_value.u8 = (uint8_t) p->defaultValue;
356+
break;
343357
case INT8:
344-
memcpy(&(db.dataArray[p->offset]), &(p->defaultValue), 1);
358+
new_value.i8 = (int8_t) p->defaultValue;
345359
break;
346360
case UINT16:
361+
new_value.u16 = (uint16_t) p->defaultValue;
362+
break;
347363
case INT16:
348-
memcpy(&(db.dataArray[p->offset]), &(p->defaultValue), 2);
364+
new_value.i16 = (int16_t) p->defaultValue;
349365
break;
350366
case UINT32:
367+
new_value.u32 = (uint32_t) p->defaultValue;
368+
break;
351369
case INT32:
370+
new_value.i32 = (int32_t) p->defaultValue;
371+
break;
372+
case FLOAT:
373+
new_value.f = (float) p->defaultValue;
374+
break;
375+
}
376+
377+
switch (p->type) {
378+
case UINT8:
379+
memcpy(&(db.dataArray[p->offset]), &(new_value.u8), sizeof(new_value.u8));
380+
break;
381+
case INT8:
382+
memcpy(&(db.dataArray[p->offset]), &(new_value.i8), sizeof(new_value.u8));
383+
break;
384+
case UINT16:
385+
memcpy(&(db.dataArray[p->offset]), &(new_value.u16), sizeof(new_value.u16));
386+
break;
387+
case INT16:
388+
memcpy(&(db.dataArray[p->offset]), &(new_value.i16), sizeof(new_value.i16));
389+
break;
390+
case UINT32:
391+
memcpy(&(db.dataArray[p->offset]), &(new_value.u32), sizeof(new_value.u32));
392+
break;
393+
case INT32:
394+
memcpy(&(db.dataArray[p->offset]), &(new_value.i32), sizeof(new_value.i32));
395+
break;
352396
case FLOAT:
353-
memcpy(&(db.dataArray[p->offset]), &(p->defaultValue), 4);
397+
memcpy(&(db.dataArray[p->offset]), &(new_value.f), sizeof(new_value.f));
354398
break;
355399
}
356400

0 commit comments

Comments
 (0)