Skip to content

Commit f09e205

Browse files
oyvindronningstadnordicjm
authored andcommitted
zcbor: Make changes to zcbor code to satisfy mynewt compile options
printf format type and bit-casting between uint and float. Signed-off-by: Øyvind Rønningstad <[email protected]>
1 parent 63ddb71 commit f09e205

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

boot/zcbor/include/zcbor_print.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,41 +73,41 @@ do { \
7373
#endif
7474

7575
__attribute__((used))
76-
static void zcbor_print_compare_lines(const uint8_t *str1, const uint8_t *str2, uint32_t size)
76+
static void zcbor_print_compare_lines(const uint8_t *str1, const uint8_t *str2, size_t size)
7777
{
78-
for (uint32_t j = 0; j < size; j++) {
78+
for (size_t j = 0; j < size; j++) {
7979
zcbor_do_print("%x ", str1[j]);
8080
}
8181
zcbor_do_print("\r\n");
82-
for (uint32_t j = 0; j < size; j++) {
82+
for (size_t j = 0; j < size; j++) {
8383
zcbor_do_print("%x ", str2[j]);
8484
}
8585
zcbor_do_print("\r\n");
86-
for (uint32_t j = 0; j < size; j++) {
86+
for (size_t j = 0; j < size; j++) {
8787
zcbor_do_print("%x ", str1[j] != str2[j]);
8888
}
8989
zcbor_do_print("\r\n");
9090
zcbor_do_print("\r\n");
9191
}
9292

9393
__attribute__((used))
94-
static void zcbor_print_compare_strings(const uint8_t *str1, const uint8_t *str2, uint32_t size)
94+
static void zcbor_print_compare_strings(const uint8_t *str1, const uint8_t *str2, size_t size)
9595
{
96-
for (uint32_t i = 0; i <= size / 16; i++) {
97-
zcbor_do_print("line %d (char %d)\r\n", i, i*16);
96+
for (size_t i = 0; i <= size / 16; i++) {
97+
zcbor_do_print("line %zu (char %zu)\r\n", i, i*16);
9898
zcbor_print_compare_lines(&str1[i*16], &str2[i*16],
9999
MIN(16, (size - i*16)));
100100
}
101101
zcbor_do_print("\r\n");
102102
}
103103

104104
__attribute__((used))
105-
static void zcbor_print_compare_strings_diff(const uint8_t *str1, const uint8_t *str2, uint32_t size)
105+
static void zcbor_print_compare_strings_diff(const uint8_t *str1, const uint8_t *str2, size_t size)
106106
{
107107
bool printed = false;
108-
for (uint32_t i = 0; i <= size / 16; i++) {
108+
for (size_t i = 0; i <= size / 16; i++) {
109109
if (memcmp(&str1[i*16], &str2[i*16], MIN(16, (size - i*16))) != 0) {
110-
zcbor_do_print("line %d (char %d)\r\n", i, i*16);
110+
zcbor_do_print("line %zu (char %zu)\r\n", i, i*16);
111111
zcbor_print_compare_lines(&str1[i*16], &str2[i*16],
112112
MIN(16, (size - i*16)));
113113
printed = true;

boot/zcbor/src/zcbor_common.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -355,23 +355,30 @@ float zcbor_float16_to_32(uint16_t input)
355355
: (expo + (F32_BIAS - F16_BIAS));
356356
uint32_t value32 = (sign << F32_SIGN_OFFS) | (new_expo << F32_EXPO_OFFS)
357357
| (mantissa << (F32_EXPO_OFFS - F16_EXPO_OFFS));
358-
return *(float *)&value32;
358+
float result;
359+
360+
memcpy(&result, &value32, sizeof(result));
361+
return result;
359362
}
360363
}
361364

362365

363366
uint16_t zcbor_float32_to_16(float input)
364367
{
365-
uint32_t value32 = *(uint32_t *)&input;
368+
uint32_t value32;
369+
370+
memcpy(&value32, &input, sizeof(value32));
366371

367372
uint32_t sign = value32 >> F32_SIGN_OFFS;
368373
uint32_t expo = (value32 >> F32_EXPO_OFFS) & F32_EXPO_MSK;
369374
uint32_t mantissa = value32 & F32_MANTISSA_MSK;
370375

371376
uint16_t value16 = (uint16_t)(sign << F16_SIGN_OFFS);
372377

378+
uint32_t abs_value32 = value32 & ~(1 << F32_SIGN_OFFS);
373379
float abs_input;
374-
*(uint32_t *)&abs_input = value32 & ~(1 << F32_SIGN_OFFS);
380+
381+
memcpy(&abs_input, &abs_value32, sizeof(abs_input));
375382

376383
if (abs_input <= (F16_MIN / 2)) {
377384
/* 0 or too small for float16. Round down to 0. value16 is already correct. */

0 commit comments

Comments
 (0)