我有两个typedef struct
,如下所示:
typedef struct{
UInt32 length;
void* data;
UInt16 value;
} my_type;
typedef struct{
UInt8 type;
UInt32 length;
void* value;
} tlv_t;
我接下来尝试的是为一个my_type
结构分配内存,一个tlv_t
从创建的对象指向的结构my_type
和一个从对象指向的浮点数tlv_t
。
如果我在没有下面最后一行代码的情况下执行代码,它运行良好。我可以存储该值并且可以访问它。
但是,一旦我第二次尝试访问它,上传的代码就根本不再在基于 STM32F105 Contiki 的板上运行。奇怪的是,只有在使用浮点数时才会出现这种情况。其他数据类型(如int
. 不幸的是,我真的需要使用float
......我做错了什么?
另一个问题是printf
不支持某些标志,例如%f
or%ul
. 有人知道如何在 Contiki 上添加对它的支持吗?
my_type* t = malloc(sizeof(my_type));
t->data = malloc(sizeof(tlv_t));
tlv_t* tv = t->data;
tv->type = 10;
tv->length = sizeof(float);
tv->value = malloc(sizeof(float));
*(float*) tv->value = 212.32;
printf("tv->value: %i\n", (int) *(float*) tv->value);
printf("tv->value: %i\n", (int) *(float*) tv->value); // without this line it is working
编辑:
我忘了添加这些类型定义:
typedef unsigned char UInt8;
typedef unsigned short UInt16;
typedef unsigned long UInt32;
EDIT2: 这是完整的代码:
#include <contiki.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cfs/cfs.h>
#include <cfs/cfs-coffee.h>
#include "arg.h"
/*---------------------------------------------------------------------------*/
PROCESS(main_process, "Contiki CLV build015_1");
AUTOSTART_PROCESSES(&main_process);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(main_process, ev, data)
{
PROCESS_BEGIN();
my_type* t = malloc(sizeof(my_type));
t->data = malloc(sizeof(tlv_t));
tlv_t* tv = t->data;
tv->type = 10;
tv->length = sizeof(float);
tv->value = malloc(sizeof(float));
*(float*) tv->value = 212.32;
printf("tv->value: %i\n", (int) *(float*) tv->value);
printf("tv->value: %i\n", (int) *(float*) tv->value); // without this line it is working
while (1) {
PROCESS_YIELD();
}
PROCESS_END();
}
编辑3:
我正在使用最新的 arm-none-eabi-gcc(版本 4_8-2013q4-20131204)。在处理结构、浮点数或内存管理时是否存在任何已知问题?