こんにちは、次のようなエラーがあります: コードを Arduino atmega にアップロードするたびに typedef-declaration に type-name がありません。
typedef union DrsData
{
unsigned char ucData[MAX_PACKET_SIZE-MIN_PACKET_SIZE];
DrsRWData stRWData;
DrsIJogData stIJogData;
DrsSJogData stSJogData; <-the error is highlighted at this line
}DrsData;
このコードの何が問題なのか分かりますか? ありがとう!
これは、ヘッダーを含むソース コードです。
#include<Arduino.h>
#include<Wire.h>
#include<Math.h>
#include <SoftwareSerial.h>//
#define rxPin 19 // Defines the "recieve" pin for software serial to motor `enter code here`controller
#define txPin 18 // Defines the "transmit" pin for software serial to motor controller
//CPU
#define F_CPU 16000000
//ATmega128? ???? ?? ???? ??
#include <avr/io.h>
//interrupt? ???? ? ??? ???? ???? ??
#include <avr/interrupt.h>
//_delay_ms ? ??? ??? ???? ??
#include <util/delay.h>
#include<inttypes.h>
#define PROTOCOL_SIZE_IDX 2
#define PROTOCOL_ID_IDX 3
#define PROTOCOL_CMD_IDX 4
#define PROTOCOL_CS1_IDX 5
#define PROTOCOL_CS2_IDX 6
#define PROTOCOL_DATA_IDX 7
#define HEADER 0xFF
//SIZE
#define MIN_PACKET_SIZE 7
#define MIN_ACK_PACKET_SIZE 9
#define MAX_PACKET_SIZE 223
#define MAX_DATA_SIZE (MAX_PACKET_SIZE-MIN_PACKET_SIZE)
//ID ??
#define MAX_ID 0xFD
#define BROADCAST_ID 0xFE
//CMD - Request Packet
#define CMD_EEP_WRITE 0x01
#define CMD_EEP_READ 0x02
#define CMD_RAM_WRITE 0x03
#define CMD_RAM_READ 0x04
#define CMD_RW_DATA_ADDR_IDX 7
#define CMD_RW_DATA_LEN_IDX 8
#define CMD_I_JOG 0x05
#define CMD_I_JOG_STRUCT_SIZE 5
#define CMD_I_JOG_MAX_DRS (MAX_DATA_SIZE/CMD_I_JOG_STRUCT_SIZE)
#define CMD_S_JOG 0x06
#define CMD_S_JOG_STRUCT_SIZE 4
#define CMD_S_JOG_MAX_DRS (MAX_DATA_SIZE/CMD_S_JOG_STRUCT_SIZE)
#define CMD_STAT 0x07
#define CMD_ROLLBACK 0x08
#define CMD_REBOOT 0x09
#define CMD_MIN (CMD_EEP_WRITE)
#define CMD_MAX (CMD_REBOOT)
//CMD - ACK Packet
#define CMD_ACK_MASK 0x40
#define CMD_EEP_WRITE_ACK (CMD_EEP_WRITE|CMD_ACK_MASK)
#define CMD_EEP_READ_ACK (CMD_EEP_READ|CMD_ACK_MASK)
#define CMD_RAM_WRITE_ACK (CMD_RAM_WRITE|CMD_ACK_MASK)
#define CMD_RAM_READ_ACK (CMD_RAM_READ|CMD_ACK_MASK)
#define CMD_I_JOG_ACK (CMD_I_JOG|CMD_ACK_MASK)
#define CMD_S_JOG_ACK (CMD_S_JOG|CMD_ACK_MASK)
#define CMD_STAT_ACK (CMD_STAT|CMD_ACK_MASK)
#define CMD_ROLLBACK_ACK (CMD_ROLLBACK|CMD_ACK_MASK)
#define CMD_REBOOT_ACK (CMD_REBOOT|CMD_ACK_MASK
#define CMD_ACK_MIN (CMD_EEP_WRITE_ACK)
#define CMD_ACK_MAX (CMD_REBOOT_ACK)
#define DrsPacket
#define stPacket
#define pstPacket
#define DrsData
typedef struct DrsSet
{
unsigned char ucStopFlag : 1;
unsigned char ucMode : 1;
unsigned char ucLedGreen : 1;
unsigned char ucLedBlue : 1;
unsigned char ucLedRed : 1;
unsigned char ucJogInvalid : 1;
unsigned char reserved : 2;
}DrsSet;
typedef struct DrsJog
{
unsigned int uiValue : 15;
unsigned int reserved : 1;
}DrsJog;
typedef struct DrsSJog
{
DrsJog stJog;
DrsSet stSet;
unsigned char ucId;
}DrsSJog;
typedef struct DrsIJog
{
DrsJog stJog;
DrsSet stSet;
unsigned char ucId;
unsigned char ucPlayTime;
}DrsIJog;
typedef struct DrsIJogData
{
DrsIJog stIJog[CMD_I_JOG_MAX_DRS];
}DrsIJogData;
typedef struct DrsSJogData
{
unsigned char ucPlayTime;
DrsSJog stSJog[CMD_S_JOG_MAX_DRS];
}DrsSJogData;
typedef struct DrsRWData
{
unsigned char ucAddress;
unsigned char ucLen;
unsigned char ucData[MAX_DATA_SIZE-2];
}DrsRWData;
typedef union DrsData
{
unsigned char ucData[MAX_PACKET_SIZE-MIN_PACKET_SIZE];
DrsRWData stRWData;
DrsIJogData stIJogData;
DrsSJogData stSJogData;
}DrsData;
typedef struct DrsPacket
{
unsigned char ucHeader[2];
unsigned char ucPacketSize;
unsigned char ucChipID;
unsigned char ucCmd;
unsigned char ucCheckSum1;
unsigned char ucCheckSum2;
union DrsData unData;
}DrsPacket;
//CheckSum
#define CHKSUM_MASK 0xFE
//////////////////////////////receiving state result value //////////////////////////////
enum{
DRS_RXWAITING,
DRS_RXCOMPLETE,
DRS_HEADERNOTFOUND,
DRS_INVALIDSIZE,
DRS_UNKNOWNCMD,
DRS_INVALIDID,
DRS_CHKSUMERROR,
DRS_RXTIMEOUT
}DrsRxStatus;
//?? ??? ??? ??
#define USART_BUF_SIZE 256
//?? ??, ?? ???, ?? ???, ??? ?? ??? ?? ??
//USART0_EXT volatile unsigned char gucRxBuffer[USART_BUF_SIZE];
//USART0_EXT volatile unsigned char gucRxBufferReadIdx;
//USART0_EXT volatile unsigned char gucRxBufferWriteIdx;
//USART0_EXT volatile unsigned char gucRxBufferCnt;
volatile unsigned char gucRxBuffer[USART_BUF_SIZE];
volatile unsigned char gucRxBufferReadIdx;
volatile unsigned char gucRxBufferWriteIdx;
volatile unsigned char gucRxBufferCnt;
//USART0? ??? ??
void USART0_Init(unsigned long ulBaudRate);
//USART0? ?? ??? ???? ??
void USART0_PutChar(unsigned char ucData);
//USART0? ?? ?? ?? ???? ??
void USART0_PutNChar(unsigned char *pucData, unsigned char ucCnt);
//USART0? ?? ???? ?? ?? ???? ???? ??
unsigned char USART0_ucGetNChar(unsigned char *pucTarget, unsigned char ucCnt);
//USART0? ?? ???? ?? ?? ???? ??? ??
unsigned char USART0_ucTrashNChar(unsigned char ucCnt);
//USART0? ?? ??? ????? ??
void USART0_ClearBuffer(void);
void hklx_Init(unsigned long ulBaudRate);
void hklx_SendPacket( DrsPacket stPacket);
unsigned char hklx_ucReceivePacket( DrsPacket *pstPacket);
void setup()
{
//DRS-0101? Calibrated Position ??? ???? ?? ???
typedef struct DrsCaliPos
{
int iPosition : 13;
unsigned int uiGPIO1 : 1;
unsigned int uiGPIO2 : 1;
unsigned int reserved : 1;
}
DrsCaliPos;
//Calibrated Position ??? ?? ??? ?? ???
typedef union DrsUnionCaliPos
{
DrsCaliPos stCaliPos;
unsigned int uiCaliPos;
}
DrsUnionCaliPos;
//HerkuleX? ???? ?? ???
Serial.begin(9600);
Serial.begin(115200);
pinMode(rxPin, INPUT); //RX //connect to TX of motor
pinMode(txPin, OUTPUT); //TX //connect to RX of motor
}
typedef struct DrsPacket
{
unsigned char ucHeader[2];
unsigned char ucPacketSize;
unsigned char ucChipID;
unsigned char ucCmd;
unsigned char ucCheckSum1;
unsigned char ucCheckSum2;
DrsData unData;
}DrsPacket;
// void hklx_SendPacket(DrsPacket stPacket){
void hklx_SendPacket(DrsPacket stPacket){
unsigned char i;
DrsPacket stPacket;
// declare header
stPacket.ucHeader[0] = HEADER;
stPacket.ucHeader[1] = HEADER;
//CheckSum
stPacket.ucCheckSum1 = stPacket.ucPacketSize ^ stPacket.ucChipID ^ stPacket.ucCmd;
for( i=0; i<(stPacket.ucPacketSize-MIN_PACKET_SIZE); i++ )
stPacket.ucCheckSum1 ^= stPacket.unData.ucData[i];
stPacket.ucCheckSum2 = ~(stPacket.ucCheckSum1);
stPacket.ucCheckSum1 &= CHKSUM_MASK;
stPacket.ucCheckSum2 &= CHKSUM_MASK;
//PacketSize ?? USART0?? ??
USART0_PutNChar(&stPacket.ucHeader[0], stPacket.ucPacketSize);
return 0;
}
完全なエラー メッセージ:
line 136: error: missing type-name in typedef-declaration
line 147: error: missing type-name in typedef-declaration
line 250: error: ISO C++ forbids declaration of 'unData' with no type
line 251: error: missing type-name in typedef-declaration
line 259: error: expected primary-expression before '.' token