問題があります。私の配列にいくつかの値を書いて、私はデバイスとの接続にinaticizeフレームにハンドルを送信したいが、私は構造体から私のデータを拾うときに私が望むよりも別の値を上書きする。構造体の配列の値がまだ変化しています
私のfooがあります。
int handlePackets (struct _PacketData * outputPacket, uint8_t command){
outputPacket->addr = SERIAL;
outputPacket->length = 0;
outputPacket->cmd = command;
switch (outputPacket->cmd)
{
case CMD_SET_OUTPUT:
outputPacket->length = 0x06;
outputPacket->data[0] = 0x80;
outputPacket->data[1] = 0x3F;
outputPacket->data[2] = 0x10;
outputPacket->data[3] = 0x40;
outputPacket->data[4] = 0x30;
return COMM_FRAME_OK;
}
return COMM_FRAME_OK;
}
int sendPacket (struct _PacketData * outputPacket, uint8_t * buffer){
int cntr = 0, x;
buffer[cntr++] = STX;
buffer[cntr++] = outputPacket->addr >> 24;
buffer[cntr++] = outputPacket->addr >> 16;
buffer[cntr++] = outputPacket->addr >> 8;
buffer[cntr++] = outputPacket->addr & 0xff;
buffer[cntr++] = outputPacket->length >> 8;
buffer[cntr++] = outputPacket->length & 0xff;
buffer[cntr++] = outputPacket->cmd;
for (x = 0; x < outputPacket->length -1 ; x++)
{
buffer[cntr++] = outputPacket->data[x];
}
crc = calcCrcBuffer (buffer + 1, cntr - 1);
buffer[cntr++] = (unsigned char) (crc >> 8); //crc high byte
buffer[cntr++] = (unsigned char) (crc & 0xff); //crc low byte
buffer[cntr++] = ETX;
return cntr;
}
構造
struct _PacketData{
uint32_t addr;
uint16_t length;
uint8_t cmd;
uint8_t data[256];};
main.cの
int main(void) {
struct _PacketData * outputOutPack;
uint8_t tab[256];
int i;
uint8_t *buffer = tab;
handlePackets(&outputOutPack,CMD_SET_OUTPUT);
result = sendPacket(&outputOutPack, buffer);}
は私のFRAMの出力eは私のようなものではありません。データはバッファ[cntr]から値を上書きしますが、理由はわかりません。
出力:
[0] = 0x82
[1] = 00
[2] = 0x18
[3] = 0xb0
[4] = 0xa5
[5] = 00
[6] = 0x6
[7] = 0x78
[8] = 0x82
[9] = 00
[10] = 0x18
[11] = 0xb0
[12] = 0xa5
[13] = 0x64
[14] = 0xfe
[15] = 0x83
ポジション7は、出力 - > CMDと、次の出力 - >データ、[8-12]が、そのない私の配列である:)
任意の提案?
ありがとうございました
あなたの関数はポインタへのポインタではなく、ポインタへのポインタです。 'struct _PacketData * outputOutPack;'を 'struct _PacketData outputOutPack;'に変更することができます – cmidi
コンパイラの警告をオンにします。コンパイラはhandlePacketsとsendPacketのパラメータ#1の間違ったデータ型について文句を言います。 – Gerhardh
それは動作します! 1つのシンボルと2日間違いを見つけることに失われた。それは私の見落としでしたが、時には別の人がどこに問題があるかを見ています。ありがとうcmidi! – cvanyy