我正在使用微控制器并获得以下工作代码:
.h文件
const static uint8_t state0[] = "Off";
const static uint8_t state1[] = "ROMLoad";
const static uint8_t state2[] = "RAMLoad";
const static uint8_t state3[] = "PacketSend";
const static uint8_t state4[] = "Process";
.c文件
switch (coapapp_vars.state) {
case 0:
packetfunctions_reserveHeaderSize(msg, sizeof(state0) - 1);
memcpy(&msg->payload[0], &state0, sizeof(state0) - 1);
break;
case 1:
packetfunctions_reserveHeaderSize(msg, sizeof(state1) - 1);
memcpy(&msg->payload[0], &state1, sizeof(state1) - 1);
break;
case 2:
packetfunctions_reserveHeaderSize(msg, sizeof(state2) - 1);
memcpy(&msg->payload[0], &state2, sizeof(state2) - 1);
break;
case 3:
packetfunctions_reserveHeaderSize(msg, sizeof(state3) - 1);
memcpy(&msg->payload[0], &state3, sizeof(state3) - 1);
break;
case 4:
packetfunctions_reserveHeaderSize(msg, sizeof(state4) - 1);
memcpy(&msg->payload[0], &state4, sizeof(state4) - 1);
break;
}
我确实希望通过在切换后调用memcpy来更改此代码以缩短文件(以减少上传的代码)。因此,我需要使用一个指针来指向.h中的正确值,方法是使用case来填充指针。 不幸的是,我无法让它发挥作用。因此,我非常无能为力,我需要使用*或&或者根本不需要使用它来使其工作。我尝试了很多不同的方法,但都没有成功。
问题是:我使用什么类型的uint8_t(uint8_t / uint8_t * / uint8_t **)来初始化指向其中一个char数组的变量? 如何填写(指针)变量(ptr = state / ptr =& state / ptr =& state [0] / ...)? 如何在memcpy函数中使用(指针)变量(ptr /& ptr / * ptr /&(* ptr)/ ...)?
我知道我需要使用我为自己设置的变量。
如果需要,请提供更多信息:此代码用于OpenWSN。我正在使用物联网设备/微控制器。我正在使用他们的COAP实现向浏览器发送信息。
编辑:reserveHeaderSize函数和memcpy函数都将在切换后放置。 正如正确答案所指出的,这很简单,但我一直在忽略一个小愚蠢的错误:我没有删除第三个参数中的sizeof,所以我基本上做了sizeof(大小)。 DERP
答案 0 :(得分:2)
如果我已正确理解您,您希望在每个case
中指定一个指针变量,以便之后可以调用memcpy()
。如果是这样,那很简单。您只需要在每种情况下设置要复制的大小,但您已经提到过它。
它是怎么回事:
uint8_t *stateptr; // pointers can be assigned to arrays
size_t size;
switch (coapapp_vars.state) {
case 0:
packetfunctions_reserveHeaderSize(msg, sizeof(state0) - 1);
stateptr = state0;
size = sizeof state0;
break;
case 1:
packetfunctions_reserveHeaderSize(msg, sizeof(state1) - 1);
stateptr = state1;
size = sizeof state1;
break;
// other cases
}
memcpy(&msg->payload[0], stateptr, size-1);
请注意,您的代码中也可以写
memcpy( &msg->payload[0], state0, sizeof state0 - 1 );
而不是..., &state0, ...
。