a1200220417 发表于 2018-7-2 14:00:11

关于CANopen协议移植编译出现的问题

CO_Data ObjDict_Data = CANOPEN_NODE_DATA_INITIALIZER(ObjDict);
IAR编译提示Error: expected a "," 错误指向CO_Data
Error: expected a "," 错误指向CO_Data
Error: expected a "," 错误指向CANOPEN_NODE_DATA_INITIALIZER(ObjDict)
自己比对发现并没有什么问题,但一直编译不过,希望可以指出来什么问题!什么感谢!

其中CO_Data 为如下结构体:
struct struct_CO_Data {

    //* Object dictionary
    UNS8             *bDeviceNodeId;    //节点地址
    const            indextable *objdict;
    s_PDO_status   *PDO_status;       //PDO传输类型
    INTEGER16      *RxPDO_EventTimers;
    void (*RxPDO_EventTimers_Handler)(CO_Data*, UNS32);
    const quick_index *firstIndex;//起始索引
    const quick_index *lastIndex;//终止索引
    const UNS16       *ObjdictSize;
    const UNS8      *iam_a_slave;
    valueRangeTest_t valueRangeTest;

    // SDO
    s_transfer         transfers;
   
    // State machine
    e_nodeState      nodeState;
    s_state_communication CurrentCommunicationState;
    initialisation_t initialisation;
    preOperational_t preOperational;
    operational_t operational;
    stopped_t stopped;
    void (*NMT_Slave_Node_Reset_Callback)(CO_Data*);
    void (*NMT_Slave_Communications_Reset_Callback)(CO_Data*);
   

    // NMT-heartbeat
    UNS8      *ConsumerHeartbeatCount;
    UNS32       *ConsumerHeartbeatEntries;
    INTEGER16   *ConsumerHeartBeatTimers;
    UNS16       *ProducerHeartBeatTime;
    INTEGER16   ProducerHeartBeatTimer;
    heartbeatError_t heartbeatError;
    e_nodeState NMTable;
   
//    /* NMT-nodeguarding */
    INTEGER16 GuardTimeTimer;
    INTEGER16 LifeTimeTimer;
    nodeguardError_t nodeguardError;
    UNS16 *GuardTime;
    UNS8 *LifeTimeFactor;
    UNS8 nodeGuardStatus;
   
    // SYNC
    INTEGER16   syncTimer;
    UNS32       *COB_ID_Sync;//只可写入0x80(同步器不工作)与0x40000080(激活同步发生器)
    UNS32       *Sync_Cycle_Period;//同步周期
    post_sync_t post_sync;
    post_TPDO_t post_TPDO;
    post_SlaveBootup_t post_SlaveBootup;
    post_SlaveStateChange_t post_SlaveStateChange;

    //General
    UNS8         toggle;
    CAN_PORT       canHandle;   //选择CAN1或者CAN2
    scanIndexOD_t scanIndexOD;//
    storeODSubIndex_t storeODSubIndex;
      
    // DCF concise
    const indextable* dcf_odentry;
    UNS8*         dcf_cursor;
    UNS32         dcf_entries_count;
    UNS8            dcf_status;
    UNS32         dcf_size;
    UNS8*         dcf_data;

    // EMCY
    e_errorState    error_state;
    UNS8            error_history_size;
    UNS8*         error_number;
    UNS32*          error_first_element;
    UNS8*         error_register;
    UNS32*          error_cobid;
    s_errors      error_data;
    post_emcy_t   post_emcy;
   
};
CANOPEN_NODE_DATA_INITIALIZER(ObjDict);为如下宏定义
#define CANOPEN_NODE_DATA_INITIALIZER(NODE_PREFIX){\
    /* Object dictionary*/\
    & NODE_PREFIX ## _bDeviceNodeId,   /* bDeviceNodeId */\
    NODE_PREFIX ## _objdict,             /* objdict*/\
    NODE_PREFIX ## _PDO_status,          /* PDO_status */\
    NULL,                              /* RxPDO_EventTimers */\
    _RxPDO_EventTimers_Handler,          /* RxPDO_EventTimers_Handler */\
    & NODE_PREFIX ## _firstIndex,      /* firstIndex */\
    & NODE_PREFIX ## _lastIndex,         /* lastIndex */\
    & NODE_PREFIX ## _ObjdictSize,       /* ObjdictSize */\
    & NODE_PREFIX ## _iam_a_slave,       /* iam_a_slave */\
    NODE_PREFIX ## _valueRangeTest,      /* valueRangeTest */\
    \
    /* SDO, structure s_transfer */\
    {\
          REPEAT_SDO_MAX_SIMULTANEOUS_TRANSFERS_TIMES(s_transfer_Initializer)\
    },\
    \
    /* State machine*/\
    Unknown_state,      /* nodeState */\
    /* structure s_state_communication */\
    {\
      0,          /* csBoot_Up */\
      0,          /* csSDO */\
      0,          /* csEmergency */\
      0,          /* csSYNC */\
      0,          /* csHeartbeat */\
      0,         /* csPDO */\
      0         /* csLSS */\
    },\
    _initialisation,   /* initialisation */\
    _preOperational,   /* preOperational */\
    _operational,      /* operational */\
    _stopped,            /* stopped */\
    NULL,                /* NMT node reset callback */\
    NULL,                /* NMT communications reset callback */\
    \
    /* NMT-heartbeat */\
    & NODE_PREFIX ## _highestSubIndex_obj1016, /* ConsumerHeartbeatCount */\
    NODE_PREFIX ## _obj1016,                   /* ConsumerHeartbeatEntries */\
    NODE_PREFIX ## _heartBeatTimers,         /* ConsumerHeartBeatTimers*/\
    & NODE_PREFIX ## _obj1017,               /* ProducerHeartBeatTime */\
    TIMER_NONE,                              /* ProducerHeartBeatTimer */\
    _heartbeatError,         /* heartbeatError */\
    \
    {REPEAT_NMT_MAX_NODE_ID_TIMES(NMTable_Initializer)},\
                                                   /* iswell initialized at "Unknown_state". Is it ok ? (FD)*/\
    \
    /* NMT-nodeguarding */\
    TIMER_NONE,                              /* GuardTimeTimer */\
    TIMER_NONE,                              /* LifeTimeTimer */\
    _nodeguardError,         /* nodeguardError */\
    & NODE_PREFIX ## _obj100C,               /* GuardTime */\
    & NODE_PREFIX ## _obj100D,               /* LifeTimeFactor */\
    {REPEAT_NMT_MAX_NODE_ID_TIMES(nodeGuardStatus_Initializer)},\
    \
    /* SYNC */\
    TIMER_NONE,                              /* syncTimer */\
    & NODE_PREFIX ## _obj1005,               /* COB_ID_Sync */\
    & NODE_PREFIX ## _obj1006,               /* Sync_Cycle_Period */\
    /*& NODE_PREFIX ## _obj1007, */            /* Sync_window_length */\
    _post_sync,               /* post_sync */\
    _post_TPDO,               /* post_TPDO */\
    _post_SlaveBootup,            /* post_SlaveBootup */\
      _post_SlaveStateChange,            /* post_SlaveStateChange */\
    \
    /* General */\
    0,                                       /* toggle */\
    NULL,                   /* canSend */\
    NODE_PREFIX ## _scanIndexOD,                /* scanIndexOD */\
    _storeODSubIndex,                /* storeODSubIndex */\
    /* DCF concise */\
      NULL,       /*dcf_odentry*/\
    NULL,      /*dcf_cursor*/\
    1,      /*dcf_entries_count*/\
    0,      /* dcf_status*/\
      0,      /* dcf_size */\
      NULL,   /* dcf_data */\
    \
    /* EMCY */\
    Error_free,                      /* error_state */\
    sizeof(NODE_PREFIX ## _obj1003) / sizeof(NODE_PREFIX ## _obj1003),      /* error_history_size */\
    & NODE_PREFIX ## _highestSubIndex_obj1003,    /* error_number */\
    & NODE_PREFIX ## _obj1003,    /* error_first_element */\
    & NODE_PREFIX ## _obj1001,       /* error_register */\
      & NODE_PREFIX ## _obj1014,       /* error_cobid */\
    /* error_data: structure s_errors */\
    {\
    REPEAT_EMCY_MAX_ERRORS_TIMES(ERROR_DATA_INITIALIZER)\
    },\
    _post_emcy,            /* post_emcy */\
}


xiaoshen-372360 发表于 2018-8-22 09:27:29

你的CANopen库是哪里的呢?可否发给我一份我们一起研究
页: [1]
查看完整版本: 关于CANopen协议移植编译出现的问题