所以我在这里对RF24Network库提出了一些挑战:https://github.com/TMRh20/RF24Network
我修改了这个库,我正在尝试让它运行在Teensy 3.5上,这是ARM和32位而不是AVR 8位,直到现在我都在使用它。
此:
RF24NetworkHeader *header = (RF24NetworkHeader*)(&frame_buffer);
我的理解是非法的,但适用于Atmegas(328p / 2560)。在Teensy上,这在我修改的库版本中崩溃了(我想因为我改变了RF24NetworkHeader结构的大小)。
在下面的代码行中我读取并操作了Header(因此是frame_buffer,因为" header"是指向frame_buffer的指针)。然后,Frame_buffer正在被重用,因为它是一个全局变量。
我首先创建了一个新的RF24NetworkHeader
对象,然后在那里复制了Frame_buffer的内容,然后创建了一个新的指针:
RF24NetworkHeader hdr;
memcpy(&hdr, frame_buffer, sizeof(RF24NetworkHeader));
RF24NetworkHeader *header;
header = &hdr;
但是我忘了将Header复制回Frame_buffer,因为在其他函数中进一步处理了Frame_buffer的内容。
RF24NetworkHeader
是由uint16_t
,unsigned chars
和一个固定大小的unsigned char
数组组成的结构。
有没有办法正确访问frame_buffer,好像它是RF24NetworkHeader
而不违反严格的别名规则?
我读到联盟的C ++方法大部分时间都可以工作,但也是非法的。
谢谢!