From 9661838676d7f8346bc5b371017d212b99ce14c8 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 2 Feb 2024 12:33:48 +0300 Subject: [PATCH] =?UTF-8?q?rev.(UML-1899):=20=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=87=D0=B8=D0=B9=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20Eth?= =?UTF-8?q?erCAT=20Slave=20=D0=BD=D0=B0=20CM?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Работает. Есть CiA402, OD из SSC Tool. Автономный со своим main(). Проверялся тестами на SOEM. --- F2838x CM EtherCAT Slave.c | 215 + F2838x CM EtherCAT Slave.h | 70 + F2838x CM EtherCAT Slave.xlsx | Bin 0 -> 20894 bytes F2838x CM EtherCAT Slave402.esp | Bin 0 -> 440291 bytes F2838x CM EtherCAT SlaveObjects.h | 495 + RAM/ccsObjs.opt | 4 + RAM/cia402appl.d | 117 - RAM/coeappl.d | 93 - RAM/device/cm.d | 201 - RAM/ecatappl.d | 126 - RAM/ecatcoe.d | 45 - RAM/ecatslv.d | 102 - RAM/ethercat_slave_cm_hal.d | 219 - RAM/f2838x_cm_cia402_solution.map | 2469 +- RAM/f2838x_cm_cia402_solution.out | Bin 375332 -> 0 bytes RAM/f2838x_cm_cia402_solution_linkInfo.xml | 29469 ++++++++++--------- RAM/f2838x_cm_hw.d | 57 - RAM/f2838x_cm_system.d | 24 - RAM/mailbox.d | 81 - RAM/makefile | 8 +- RAM/objdef.d | 90 - RAM/sdoserv.d | 75 - RAM/startup_cm.d | 36 - RAM/subdir_rules.mk | 7 + RAM/subdir_vars.mk | 36 +- TMS320F28388D.ccxml | 164 +- applInterface.h | 154 +- cia402appl.c | 108 +- cia402appl.h | 85 +- coeappl.c | 165 +- coeappl.h | 17 +- ecat_def.h | 148 +- ecatappl.c | 221 +- ecatappl.h | 57 +- ecatcoe.c | 19 +- ecatcoe.h | 2 + ecatfoe.c | 395 + ecatfoe.h | 171 + ecatslv.c | 408 +- ecatslv.h | 56 +- esc.h | 28 +- foeappl.c | 299 + foeappl.h | 89 + mailbox.c | 161 +- mailbox.h | 5 + objdef.c | 252 +- objdef.h | 9 +- sdoserv.c | 1717 +- sdoserv.h | 45 +- tiescfoe.c | 208 + tiescfoe.h | 63 + 51 files changed, 20009 insertions(+), 19076 deletions(-) create mode 100644 F2838x CM EtherCAT Slave.c create mode 100644 F2838x CM EtherCAT Slave.h create mode 100644 F2838x CM EtherCAT Slave.xlsx create mode 100644 F2838x CM EtherCAT Slave402.esp create mode 100644 F2838x CM EtherCAT SlaveObjects.h delete mode 100644 RAM/cia402appl.d delete mode 100644 RAM/coeappl.d delete mode 100644 RAM/device/cm.d delete mode 100644 RAM/ecatappl.d delete mode 100644 RAM/ecatcoe.d delete mode 100644 RAM/ecatslv.d delete mode 100644 RAM/ethercat_slave_cm_hal.d delete mode 100644 RAM/f2838x_cm_cia402_solution.out delete mode 100644 RAM/f2838x_cm_hw.d delete mode 100644 RAM/f2838x_cm_system.d delete mode 100644 RAM/mailbox.d delete mode 100644 RAM/objdef.d delete mode 100644 RAM/sdoserv.d delete mode 100644 RAM/startup_cm.d create mode 100644 ecatfoe.c create mode 100644 ecatfoe.h create mode 100644 foeappl.c create mode 100644 foeappl.h create mode 100644 tiescfoe.c create mode 100644 tiescfoe.h diff --git a/F2838x CM EtherCAT Slave.c b/F2838x CM EtherCAT Slave.c new file mode 100644 index 0000000..d7a7a3a --- /dev/null +++ b/F2838x CM EtherCAT Slave.c @@ -0,0 +1,215 @@ +/* +* This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. +* The corresponding license agreement applies. This hint shall not be removed. +*/ + +/** +\addtogroup F2838xCMEtherCATSlave F2838x CM EtherCAT Slave +@{ +*/ + +/** +\file F2838x CM EtherCAT Slave.c +\brief Implementation + Created with SSC Tool application parser 1.6.4.0 +\version 0.0.0.1 +*/ + + +/*----------------------------------------------------------------------------------------- +------ +------ Includes +------ +-----------------------------------------------------------------------------------------*/ +#include "ecat_def.h" + +#include "applInterface.h" + +#define _F2838X_CM_ETHER_CAT_SLAVE_ 1 +#include "F2838x CM EtherCAT Slave.h" +#undef _F2838X_CM_ETHER_CAT_SLAVE_ +/*-------------------------------------------------------------------------------------- +------ +------ local types and defines +------ +--------------------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------------------- +------ +------ local variables and constants +------ +-----------------------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------------------- +------ +------ application specific functions +------ +-----------------------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------------------- +------ +------ generic functions +------ +-----------------------------------------------------------------------------------------*/ + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \brief The function is called when an error state was acknowledged by the master + +*//////////////////////////////////////////////////////////////////////////////////////// + +void APPL_AckErrorInd(UINT16 stateTrans) +{ + +} + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \return AL Status Code (see ecatslv.h ALSTATUSCODE_....) + + \brief The function is called in the state transition from INIT to PREOP when + all general settings were checked to start the mailbox handler. This function + informs the application about the state transition, the application can refuse + the state transition when returning an AL Status error code. + The return code NOERROR_INWORK can be used, if the application cannot confirm + the state transition immediately, in that case this function will be called cyclically + until a value unequal NOERROR_INWORK is returned + +*//////////////////////////////////////////////////////////////////////////////////////// + +UINT16 APPL_StartMailboxHandler(void) +{ + return ALSTATUSCODE_NOERROR; +} + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \return 0, NOERROR_INWORK + + \brief The function is called in the state transition from PREEOP to INIT + to stop the mailbox handler. This functions informs the application + about the state transition, the application cannot refuse + the state transition. + +*//////////////////////////////////////////////////////////////////////////////////////// + +UINT16 APPL_StopMailboxHandler(void) +{ + return ALSTATUSCODE_NOERROR; +} + + + + +#if EXPLICIT_DEVICE_ID +///////////////////////////////////////////////////////////////////////////////////////// +/** + \return The Explicit Device ID of the EtherCAT slave + + \brief Read the Explicit Device ID (from an external ID switch) +*//////////////////////////////////////////////////////////////////////////////////////// +UINT16 APPL_GetDeviceID() +{ +#if _WIN32 + #pragma message ("Warning: Implement explicit Device ID latching") +#else + #warning "Implement explicit Device ID latching" +#endif + /* Explicit Device 5 is expected by Explicit Device ID conformance tests*/ + return 0x5; +} +#endif + + + +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param index index of the requested object. +\param subindex subindex of the requested object. +\param objSize size of the requested object data, calculated with OBJ_GetObjectLength +\param pData Pointer to the buffer where the data can be copied to +\param bCompleteAccess Indicates if a complete read of all subindices of the + object shall be done or not + + \return result of the read operation (0 (success) or an abort code (ABORTIDX_.... defined in + sdosrv.h)) + *//////////////////////////////////////////////////////////////////////////////////////// +UINT8 mySdoRead(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * pData, UINT8 bCompleteAccess) { +#if _WIN32 +#pragma message ("Warning: Implement CoE read callback") +#else + #warning "Implement CoE read callback" +#endif + return 0; +} + + +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param index index of the requested object. +\param subindex subindex of the requested object. +\param objSize size of the requested object data, calculated with OBJ_GetObjectLength +\param pData Pointer to the buffer where the data can be copied to +\param bCompleteAccess Indicates if a complete read of all subindices of the + object shall be done or not + + \return result of the read operation (0 (success) or an abort code (ABORTIDX_.... defined in + sdosrv.h)) + *//////////////////////////////////////////////////////////////////////////////////////// +UINT8 mySdoWrite(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * pData, UINT8 bCompleteAccess) { +#if _WIN32 +#pragma message ("Warning: Implement CoE write callback") +#else + #warning "Implement CoE write callback" +#endif + return 0; +} +#if USE_DEFAULT_MAIN +///////////////////////////////////////////////////////////////////////////////////////// +/** + + \brief This is the main function + +*//////////////////////////////////////////////////////////////////////////////////////// +#if _PIC24 && EL9800_HW +int main(void) +#elif _WIN32 +int main(int argc, char* argv[]) +#else +void main(void) +#endif +{ + /* initialize the Hardware and the EtherCAT Slave Controller */ +#if FC1100_HW +#if _WIN32 + u16FcInstance = 0; + if (argc > 1) + { + u16FcInstance = atoi(argv[1]); + } +#endif + if(HW_Init()) + { + HW_Release(); + return; + } +#else + HW_Init(); +#endif + MainInit(); + + bRunApplication = TRUE; + do + { + MainLoop(); + + } while (bRunApplication == TRUE); + + HW_Release(); +#if _PIC24 + return 0; +#endif +} +#endif //#if USE_DEFAULT_MAIN +/** @} */ + diff --git a/F2838x CM EtherCAT Slave.h b/F2838x CM EtherCAT Slave.h new file mode 100644 index 0000000..e9cfb95 --- /dev/null +++ b/F2838x CM EtherCAT Slave.h @@ -0,0 +1,70 @@ +/* +* This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. +* The corresponding license agreement applies. This hint shall not be removed. +*/ + +/** + * \addtogroup F2838xCMEtherCATSlave F2838x CM EtherCAT Slave + * @{ + */ + +/** +\file F2838x CM EtherCAT Slave.h +\brief F2838x CM EtherCAT Slave function prototypes and defines + +\version 1.0.0.11 + */ + + + #ifndef _F2838X_CM_ETHER_CAT_SLAVE_H_ +#define _F2838X_CM_ETHER_CAT_SLAVE_H_ + + +/*----------------------------------------------------------------------------------------- +------ +------ Includes +------ +-----------------------------------------------------------------------------------------*/ +#include "ecat_def.h" + +#include "ecatappl.h" + +/*----------------------------------------------------------------------------------------- +------ +------ Defines and Types +------ +-----------------------------------------------------------------------------------------*/ + +#endif //_F2838X_CM_ETHER_CAT_SLAVE_H_ + +//include custom application object dictionary +#include "F2838x CM EtherCAT SlaveObjects.h" + + +#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) + #define PROTO +#else + #define PROTO extern +#endif + + +PROTO void APPL_Application(void); +#if EXPLICIT_DEVICE_ID +PROTO UINT16 APPL_GetDeviceID(void); +#endif + +PROTO void APPL_AckErrorInd(UINT16 stateTrans); +PROTO UINT16 APPL_StartMailboxHandler(void); +PROTO UINT16 APPL_StopMailboxHandler(void); +PROTO UINT16 APPL_StartInputHandler(UINT16 *pIntMask); +PROTO UINT16 APPL_StopInputHandler(void); +PROTO UINT16 APPL_StartOutputHandler(void); +PROTO UINT16 APPL_StopOutputHandler(void); + +PROTO UINT16 APPL_GenerateMapping(UINT16 *pInputSize,UINT16 *pOutputSize); +PROTO void APPL_InputMapping(UINT16* pData); +PROTO void APPL_OutputMapping(UINT16* pData); + +#undef PROTO +/** @}*/ + diff --git a/F2838x CM EtherCAT Slave.xlsx b/F2838x CM EtherCAT Slave.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b1d21297db5b934090e290269fe0bedf923f6870 GIT binary patch literal 20894 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

_&sjW-E$k_TXbNAEu8SM-#eDs=$QF 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 p-XN!x16? +\brief NOTE : This file will be overwritten if a new object dictionary is generated!
+*/ + +#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) +#define PROTO +#else +#define PROTO extern +#endif +/****************************************************************************** +* Object 0x1600 : OutputMapping +******************************************************************************/ +/** +* \addtogroup 0x1600 0x1600 | OutputMapping +* @{ +* \brief Object 0x1600 (OutputMapping) definition +*/ +#ifdef _OBJD_ +/** +* \brief Object entry descriptions
+*
+* SubIndex 0
+* SubIndex 1 - map 0x7000 SIO 32bit
+* SubIndex 2 - map 0x7001 SIO 8bit
+* SubIndex 3 - 8bit padding
+*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1600[] = { +{ DEFTYPE_UNSIGNED8 , 0x8 , ACCESS_READ }, +{ DEFTYPE_UNSIGNED32 , 0x20 , ACCESS_READ }, /* Subindex1 - map 0x7000 SIO 32bit */ +{ DEFTYPE_UNSIGNED32 , 0x20 , ACCESS_READ }, /* Subindex2 - map 0x7001 SIO 8bit */ +{ DEFTYPE_UNSIGNED32 , 0x20 , ACCESS_READ }}; /* Subindex3 - 8bit padding */ + +/** +* \brief Object/Entry names +*/ +OBJCONST UCHAR OBJMEM aName0x1600[] = "OutputMapping\000" +"SubIndex 001\000" +"SubIndex 002\000" +"SubIndex 003\000\377"; +#endif //#ifdef _OBJD_ + +#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ +/** +* \brief Object structure +*/ +typedef struct OBJ_STRUCT_PACKED_START { +UINT16 u16SubIndex0; +UINT32 SI1; /* Subindex1 - map 0x7000 SIO 32bit */ +UINT32 SI2; /* Subindex2 - map 0x7001 SIO 8bit */ +UINT32 SI3; /* Subindex3 - 8bit padding */ +} OBJ_STRUCT_PACKED_END +TOBJ1600; +#endif //#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ + +/** +* \brief Object variable +*/ +PROTO TOBJ1600 OutputMapping0x1600 +#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) +={3,0x70000020,0x70010008,0x00000008} +#endif +; +/** @}*/ + + + +/****************************************************************************** +* Object 0x1A00 : InputMapping +******************************************************************************/ +/** +* \addtogroup 0x1A00 0x1A00 | InputMapping +* @{ +* \brief Object 0x1A00 (InputMapping) definition +*/ +#ifdef _OBJD_ +/** +* \brief Object entry descriptions
+*
+* SubIndex 0
+* SubIndex 1 - map SI 0bit
+* SubIndex 2 - 8bit padding
+* SubIndex 3 - map 0x6001 SIO 16bit
+*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1A00[] = { +{ DEFTYPE_UNSIGNED8 , 0x8 , ACCESS_READ }, +{ DEFTYPE_UNSIGNED32 , 0x20 , ACCESS_READ }, /* Subindex1 - map SI 0bit */ +{ DEFTYPE_UNSIGNED32 , 0x20 , ACCESS_READ }, /* Subindex2 - 8bit padding */ +{ DEFTYPE_UNSIGNED32 , 0x20 , ACCESS_READ }}; /* Subindex3 - map 0x6001 SIO 16bit */ + +/** +* \brief Object/Entry names +*/ +OBJCONST UCHAR OBJMEM aName0x1A00[] = "InputMapping\000" +"SubIndex 001\000" +"SubIndex 002\000" +"SubIndex 003\000\377"; +#endif //#ifdef _OBJD_ + +#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ +/** +* \brief Object structure +*/ +typedef struct OBJ_STRUCT_PACKED_START { +UINT16 u16SubIndex0; +UINT32 SI1; /* Subindex1 - map SI 0bit */ +UINT32 SI2; /* Subindex2 - 8bit padding */ +UINT32 SI3; /* Subindex3 - map 0x6001 SIO 16bit */ +} OBJ_STRUCT_PACKED_END +TOBJ1A00; +#endif //#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ + +/** +* \brief Object variable +*/ +PROTO TOBJ1A00 InputMapping0x1A00 +#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) +={3,0x60000008,0x00000008,0x60010010} +#endif +; +/** @}*/ + + + +/****************************************************************************** +* Object 0x1C12 : Obj0x1C12 +******************************************************************************/ +/** +* \addtogroup 0x1C12 0x1C12 | Obj0x1C12 +* @{ +* \brief Object 0x1C12 (Obj0x1C12) definition +*/ +#ifdef _OBJD_ +/** +* \brief Entry descriptions
+* +* Subindex 0
+* Subindex 1 - n (the same entry description is used)
+*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1C12[] = { +{ DEFTYPE_UNSIGNED8 , 0x8 , ACCESS_READ }, +{ DEFTYPE_UNSIGNED16 , 0x10 , ACCESS_READ }}; + +/** +* \brief Object name definition
+* For Subindex 1 to n the syntax 'Subindex XXX' is used +*/ +OBJCONST UCHAR OBJMEM aName0x1C12[] = "Obj0x1C12\000\377"; +#endif //#ifdef _OBJD_ + +#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ +/** +* \brief Object structure +*/ +typedef struct OBJ_STRUCT_PACKED_START { +UINT16 u16SubIndex0; /**< \brief Subindex 0 */ +UINT16 aEntries[1]; /**< \brief Subindex 1 - 1 */ +} OBJ_STRUCT_PACKED_END +TOBJ1C12; +#endif //#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ + +/** +* \brief Object variable +*/ +//PROTO TOBJ1C12 sRxPDOassign +//#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) +//={1,{0x1A00}} +//#endif +; +/** @}*/ + + + +/****************************************************************************** +* Object 0x1C13 : Obj0x1C13 +******************************************************************************/ +/** +* \addtogroup 0x1C13 0x1C13 | Obj0x1C13 +* @{ +* \brief Object 0x1C13 (Obj0x1C13) definition +*/ +#ifdef _OBJD_ +/** +* \brief Entry descriptions
+* +* Subindex 0
+* Subindex 1 - n (the same entry description is used)
+*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1C13[] = { +{ DEFTYPE_UNSIGNED8 , 0x8 , ACCESS_READ }, +{ DEFTYPE_UNSIGNED16 , 0x10 , ACCESS_READ }}; + +/** +* \brief Object name definition
+* For Subindex 1 to n the syntax 'Subindex XXX' is used +*/ +OBJCONST UCHAR OBJMEM aName0x1C13[] = "Obj0x1C13\000\377"; +#endif //#ifdef _OBJD_ + +#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ +/** +* \brief Object structure +*/ +typedef struct OBJ_STRUCT_PACKED_START { +UINT16 u16SubIndex0; /**< \brief Subindex 0 */ +UINT16 aEntries[1]; /**< \brief Subindex 1 - 1 */ +} OBJ_STRUCT_PACKED_END +TOBJ1C13; +#endif //#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ + +/** +* \brief Object variable +*/ +//PROTO TOBJ1C13 sTxPDOassign +//#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) +//={1,{0x1600}} +//#endif +; +/** @}*/ + + + +/****************************************************************************** +* Object 0x6000 : DummyInput1 +******************************************************************************/ +/** +* \addtogroup 0x6000 0x6000 | DummyInput1 +* @{ +* \brief Object 0x6000 (DummyInput1) definition +*/ +#ifdef _OBJD_ +/** +* \brief Entry description +*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6000 = { DEFTYPE_UNSIGNED8 , 0x08 , ACCESS_READ }; +/** +* \brief Object name +*/ +OBJCONST UCHAR OBJMEM aName0x6000[] = "DummyInput1\000\377"; +#endif //#ifdef _OBJD_ + +/** +* \brief Object variable +*/ +PROTO UINT8 DummyInput10x6000; +/** @}*/ + + + +/****************************************************************************** +* Object 0x6001 : DummyInput2 +******************************************************************************/ +/** +* \addtogroup 0x6001 0x6001 | DummyInput2 +* @{ +* \brief Object 0x6001 (DummyInput2) definition +*/ +#ifdef _OBJD_ +/** +* \brief Entry description +*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6001 = { DEFTYPE_UNSIGNED16 , 0x10 , ACCESS_READ }; +/** +* \brief Object name +*/ +OBJCONST UCHAR OBJMEM aName0x6001[] = "DummyInput2\000\377"; +#endif //#ifdef _OBJD_ + +/** +* \brief Object variable +*/ +PROTO UINT16 DummyInput20x6001; +/** @}*/ + + + +/****************************************************************************** +* Object 0x7000 : DummyOutput1 +******************************************************************************/ +/** +* \addtogroup 0x7000 0x7000 | DummyOutput1 +* @{ +* \brief Object 0x7000 (DummyOutput1) definition +*/ +#ifdef _OBJD_ +/** +* \brief Entry description +*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x7000 = { DEFTYPE_UNSIGNED32 , 0x20 , ACCESS_READWRITE }; +/** +* \brief Object name +*/ +OBJCONST UCHAR OBJMEM aName0x7000[] = "DummyOutput1\000\377"; +#endif //#ifdef _OBJD_ + +/** +* \brief Object variable +*/ +PROTO UINT32 DummyOutput10x7000; +/** @}*/ + + + +/****************************************************************************** +* Object 0x7001 : DummyPutput2 +******************************************************************************/ +/** +* \addtogroup 0x7001 0x7001 | DummyPutput2 +* @{ +* \brief Object 0x7001 (DummyPutput2) definition +*/ +#ifdef _OBJD_ +/** +* \brief Entry description +*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x7001 = { DEFTYPE_UNSIGNED16 , 0x10 , ACCESS_READWRITE }; +/** +* \brief Object name +*/ +OBJCONST UCHAR OBJMEM aName0x7001[] = "DummyPutput2\000\377"; +#endif //#ifdef _OBJD_ + +/** +* \brief Object variable +*/ +PROTO UINT16 DummyPutput20x7001; +/** @}*/ + + + +/****************************************************************************** +* Object 0x9000 : Var1 +******************************************************************************/ +/** +* \addtogroup 0x9000 0x9000 | Var1 +* @{ +* \brief Object 0x9000 (Var1) definition +*/ +#ifdef _OBJD_ +/** +* \brief Entry description +*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x9000 = { DEFTYPE_UNSIGNED16 , 0x10 , ACCESS_READ }; +/** +* \brief Object name +*/ +OBJCONST UCHAR OBJMEM aName0x9000[] = "Var1\000\377"; +#endif //#ifdef _OBJD_ + +/** +* \brief Object variable +*/ +PROTO UINT16 Var10x9000 +#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) += 0xAABB +#endif +; +/** @}*/ + + + +/****************************************************************************** +* Object 0x9001 : Var2 +******************************************************************************/ +/** +* \addtogroup 0x9001 0x9001 | Var2 +* @{ +* \brief Object 0x9001 (Var2) definition +*/ +#ifdef _OBJD_ +/** +* \brief Entry description +*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x9001 = { DEFTYPE_UNSIGNED16 , 0x10 , ACCESS_READ }; +/** +* \brief Object name +*/ +OBJCONST UCHAR OBJMEM aName0x9001[] = "Var2\000\377"; +#endif //#ifdef _OBJD_ + +/** +* \brief Object variable +*/ +PROTO UINT16 Var20x9001 +#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) += 0xBBAA +#endif +; +/** @}*/ + + + +/****************************************************************************** +* Object 0xF000 : Obj0xF000 +******************************************************************************/ +/** +* \addtogroup 0xF000 0xF000 | Obj0xF000 +* @{ +* \brief Object 0xF000 (Obj0xF000) definition +*/ +#ifdef _OBJD_ +/** +* \brief Object entry descriptions
+*
+* SubIndex 0
+* SubIndex 1 - Value_1
+* SubIndex 2 - Value_2
+*/ +OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0xF000[] = { +{ DEFTYPE_UNSIGNED8 , 0x8 , ACCESS_READWRITE }, +{ DEFTYPE_UNSIGNED16 , 0x10 , ACCESS_READWRITE }, /* Subindex1 - Value_1 */ +{ DEFTYPE_UNSIGNED16 , 0x10 , ACCESS_READWRITE }}; /* Subindex2 - Value_2 */ + +/** +* \brief Object/Entry names +*/ +OBJCONST UCHAR OBJMEM aName0xF000[] = "Obj0xF000\000" +"Value_1\000" +"Value_2\000\377"; +#endif //#ifdef _OBJD_ + +#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ +/** +* \brief Object structure +*/ +typedef struct OBJ_STRUCT_PACKED_START { +UINT16 u16SubIndex0; +UINT16 Value_1; /* Subindex1 - Value_1 */ +UINT16 Value_2; /* Subindex2 - Value_2 */ +} OBJ_STRUCT_PACKED_END +TOBJF000; +#endif //#ifndef _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ + +/** +* \brief Object variable +*/ +PROTO TOBJF000 Obj0xF000 +#if defined(_F2838X_CM_ETHER_CAT_SLAVE_) && (_F2838X_CM_ETHER_CAT_SLAVE_ == 1) +={2,0,0} +#endif +; +/** @}*/ + + + + + +PROTO UINT8 mySdoRead(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * pData, UINT8 bCompleteAccess); +PROTO UINT8 mySdoWrite(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * pData, UINT8 bCompleteAccess); + + +#ifdef _OBJD_ +TOBJECT OBJMEM ApplicationObjDic[] = { +/* Object 0x1600 */ +{NULL , NULL , 0x1600 , {DEFTYPE_PDOMAPPING , 3 | (OBJCODE_REC << 8)} , asEntryDesc0x1600 , aName0x1600 , &OutputMapping0x1600 , NULL , NULL , 0x0000 }, +/* Object 0x1A00 */ +{NULL , NULL , 0x1A00 , {DEFTYPE_PDOMAPPING , 3 | (OBJCODE_REC << 8)} , asEntryDesc0x1A00 , aName0x1A00 , &InputMapping0x1A00 , NULL , NULL , 0x0000 }, +/* Object 0x1C12 */ +{NULL , NULL , 0x1C12 , {DEFTYPE_UNSIGNED16 , 1 | (OBJCODE_ARR << 8)} , asEntryDesc0x1C12 , aName0x1C12 , &sRxPDOassign , NULL , NULL , 0x0000 }, +/* Object 0x1C13 */ +{NULL , NULL , 0x1C13 , {DEFTYPE_UNSIGNED16 , 1 | (OBJCODE_ARR << 8)} , asEntryDesc0x1C13 , aName0x1C13 , &sTxPDOassign , NULL , NULL , 0x0000 }, +/* Object 0x6000 */ +{NULL , NULL , 0x6000 , {DEFTYPE_UNSIGNED8 , 0 | (OBJCODE_VAR << 8)} , &sEntryDesc0x6000 , aName0x6000 , &DummyInput10x6000 , NULL , NULL , 0x0000 }, +/* Object 0x6001 */ +{NULL , NULL , 0x6001 , {DEFTYPE_UNSIGNED16 , 0 | (OBJCODE_VAR << 8)} , &sEntryDesc0x6001 , aName0x6001 , &DummyInput20x6001 , NULL , NULL , 0x0000 }, +/* Object 0x7000 */ +{NULL , NULL , 0x7000 , {DEFTYPE_UNSIGNED32 , 0 | (OBJCODE_VAR << 8)} , &sEntryDesc0x7000 , aName0x7000 , &DummyOutput10x7000 , NULL , NULL , 0x0000 }, +/* Object 0x7001 */ +{NULL , NULL , 0x7001 , {DEFTYPE_UNSIGNED16 , 0 | (OBJCODE_VAR << 8)} , &sEntryDesc0x7001 , aName0x7001 , &DummyPutput20x7001 , NULL , NULL , 0x0000 }, +/* Object 0x9000 */ +{NULL , NULL , 0x9000 , {DEFTYPE_UNSIGNED16 , 0 | (OBJCODE_VAR << 8)} , &sEntryDesc0x9000 , aName0x9000 , &Var10x9000 , mySdoRead , NULL , 0x0000 }, +/* Object 0x9001 */ +{NULL , NULL , 0x9001 , {DEFTYPE_UNSIGNED16 , 0 | (OBJCODE_VAR << 8)} , &sEntryDesc0x9001 , aName0x9001 , &Var20x9001 , NULL , mySdoWrite , 0x0000 }, +/* Object 0xF000 */ +{NULL , NULL , 0xF000 , {DEFTYPE_RECORD , 2 | (OBJCODE_REC << 8)} , asEntryDesc0xF000 , aName0xF000 , &Obj0xF000 , NULL , NULL , 0x0000 }, +{NULL,NULL, 0xFFFF, {0, 0}, NULL, NULL, NULL, NULL}}; +#endif //#ifdef _OBJD_ + +#undef PROTO + +/** @}*/ +#define _F2838X_CM_ETHER_CAT_SLAVE_OBJECTS_H_ diff --git a/RAM/ccsObjs.opt b/RAM/ccsObjs.opt index 4c96b39..acc8330 100644 --- a/RAM/ccsObjs.opt +++ b/RAM/ccsObjs.opt @@ -1,15 +1,19 @@ +"./F2838x CM EtherCAT Slave.obj" "./cia402appl.obj" "./coeappl.obj" "./ecatappl.obj" "./ecatcoe.obj" +"./ecatfoe.obj" "./ecatslv.obj" "./ethercat_slave_cm_hal.obj" "./f2838x_cm_hw.obj" "./f2838x_cm_system.obj" +"./foeappl.obj" "./mailbox.obj" "./objdef.obj" "./sdoserv.obj" "./startup_cm.obj" +"./tiescfoe.obj" "./device/cm.obj" "../2838x_RAM_lnk_ecat_cm.cmd" "C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ccs/Debug/driverlib_cm.lib" diff --git a/RAM/cia402appl.d b/RAM/cia402appl.d deleted file mode 100644 index e6a9163..0000000 --- a/RAM/cia402appl.d +++ /dev/null @@ -1,117 +0,0 @@ -# FIXED - -cia402appl.obj: ../cia402appl.c -cia402appl.obj: ../ecat_def.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -cia402appl.obj: ../f2838x_cm_system.h -cia402appl.obj: ../applInterface.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -cia402appl.obj: ../esc.h -cia402appl.obj: ../ecatslv.h -cia402appl.obj: ../esc.h -cia402appl.obj: ../f2838x_cm_hw.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -cia402appl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -cia402appl.obj: ../esc.h -cia402appl.obj: ../objdef.h -cia402appl.obj: ../sdoserv.h -cia402appl.obj: ../ecatcoe.h -cia402appl.obj: ../mailbox.h -cia402appl.obj: ../ecatappl.h -cia402appl.obj: ../coeappl.h -cia402appl.obj: ../objdef.h -cia402appl.obj: ../sdoserv.h -cia402appl.obj: ../ecatcoe.h -cia402appl.obj: ../mailbox.h -cia402appl.obj: ../cia402appl.h -cia402appl.obj: ../objdef.h -cia402appl.obj: ../sdoserv.h -cia402appl.obj: ../ecatcoe.h -cia402appl.obj: ../mailbox.h - -../cia402appl.c: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../f2838x_cm_system.h: - -../applInterface.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -../esc.h: - -../ecatslv.h: - -../esc.h: - -../f2838x_cm_hw.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -../esc.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - -../ecatappl.h: - -../coeappl.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - -../cia402appl.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - diff --git a/RAM/coeappl.d b/RAM/coeappl.d deleted file mode 100644 index 7cc25ae..0000000 --- a/RAM/coeappl.d +++ /dev/null @@ -1,93 +0,0 @@ -# FIXED - -coeappl.obj: ../coeappl.c -coeappl.obj: ../ecat_def.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -coeappl.obj: ../f2838x_cm_system.h -coeappl.obj: ../ecatslv.h -coeappl.obj: ../esc.h -coeappl.obj: ../f2838x_cm_hw.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -coeappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -coeappl.obj: ../esc.h -coeappl.obj: ../coeappl.h -coeappl.obj: ../objdef.h -coeappl.obj: ../sdoserv.h -coeappl.obj: ../ecatcoe.h -coeappl.obj: ../mailbox.h -coeappl.obj: ../cia402appl.h -coeappl.obj: ../objdef.h -coeappl.obj: ../sdoserv.h -coeappl.obj: ../ecatcoe.h -coeappl.obj: ../mailbox.h - -../coeappl.c: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../f2838x_cm_system.h: - -../ecatslv.h: - -../esc.h: - -../f2838x_cm_hw.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -../esc.h: - -../coeappl.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - -../cia402appl.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - diff --git a/RAM/device/cm.d b/RAM/device/cm.d deleted file mode 100644 index 0ae6086..0000000 --- a/RAM/device/cm.d +++ /dev/null @@ -1,201 +0,0 @@ -# FIXED - -device/cm.obj: ../device/cm.c -device/cm.obj: ../device/cm.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/device_support/f2838x/common/include/driverlib_cm.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_memmap.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/aes.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdbool.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -device/cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/debug.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/interrupt.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cpu.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ints.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_nvic.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_types.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_aes.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_aes_ss.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/can.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_can.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/sysctl.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_nmi.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_sysctl.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_wwd.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cmmpu.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_cmmpu.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cputimer.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_cputimer.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/dcsm.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_dcsm.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/escss.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_esc_ss.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ethernet.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_emac.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_emac_ss.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/platform_port.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/flash.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_flash.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ipc.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ipc.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/gcrc.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_gcrc.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/gpio.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_gpio.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/i2c.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_i2c.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/mcan.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_mcanss.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_types_mcan.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/memcfg.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_memcfg.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/mpu.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ssi.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ssi.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/systick.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/uart.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_uart.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/udma.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_udma.h -device/cm.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/usb.h - -../device/cm.c: - -../device/cm.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/device_support/f2838x/common/include/driverlib_cm.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_memmap.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/aes.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdbool.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/debug.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/interrupt.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cpu.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ints.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_nvic.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_types.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_aes.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_aes_ss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/can.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_can.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/sysctl.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_nmi.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_sysctl.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_wwd.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cmmpu.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_cmmpu.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cputimer.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_cputimer.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/dcsm.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_dcsm.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/escss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_esc_ss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ethernet.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_emac.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_emac_ss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/platform_port.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/flash.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_flash.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ipc.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ipc.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/gcrc.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_gcrc.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/gpio.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_gpio.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/i2c.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_i2c.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/mcan.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_mcanss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_types_mcan.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/memcfg.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_memcfg.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/mpu.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ssi.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ssi.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/systick.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/uart.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_uart.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/udma.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_udma.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/usb.h: - diff --git a/RAM/ecatappl.d b/RAM/ecatappl.d deleted file mode 100644 index f1ca73b..0000000 --- a/RAM/ecatappl.d +++ /dev/null @@ -1,126 +0,0 @@ -# FIXED - -ecatappl.obj: ../ecatappl.c -ecatappl.obj: ../ecatslv.h -ecatappl.obj: ../ecat_def.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -ecatappl.obj: ../f2838x_cm_system.h -ecatappl.obj: ../esc.h -ecatappl.obj: ../f2838x_cm_hw.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -ecatappl.obj: ../esc.h -ecatappl.obj: ../ecatappl.h -ecatappl.obj: ../coeappl.h -ecatappl.obj: ../objdef.h -ecatappl.obj: ../sdoserv.h -ecatappl.obj: ../ecatcoe.h -ecatappl.obj: ../mailbox.h -ecatappl.obj: ../applInterface.h -ecatappl.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -ecatappl.obj: ../esc.h -ecatappl.obj: ../ecatslv.h -ecatappl.obj: ../esc.h -ecatappl.obj: ../objdef.h -ecatappl.obj: ../sdoserv.h -ecatappl.obj: ../ecatcoe.h -ecatappl.obj: ../mailbox.h -ecatappl.obj: ../ecatappl.h -ecatappl.obj: ../cia402appl.h -ecatappl.obj: ../objdef.h -ecatappl.obj: ../sdoserv.h -ecatappl.obj: ../ecatcoe.h -ecatappl.obj: ../mailbox.h - -../ecatappl.c: - -../ecatslv.h: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../f2838x_cm_system.h: - -../esc.h: - -../f2838x_cm_hw.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -../esc.h: - -../ecatappl.h: - -../coeappl.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - -../applInterface.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -../esc.h: - -../ecatslv.h: - -../esc.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - -../ecatappl.h: - -../cia402appl.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - diff --git a/RAM/ecatcoe.d b/RAM/ecatcoe.d deleted file mode 100644 index ec4bae2..0000000 --- a/RAM/ecatcoe.d +++ /dev/null @@ -1,45 +0,0 @@ -# FIXED - -ecatcoe.obj: ../ecatcoe.c -ecatcoe.obj: ../ecat_def.h -ecatcoe.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -ecatcoe.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -ecatcoe.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -ecatcoe.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -ecatcoe.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -ecatcoe.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -ecatcoe.obj: ../f2838x_cm_system.h -ecatcoe.obj: ../sdoserv.h -ecatcoe.obj: ../ecatcoe.h -ecatcoe.obj: ../mailbox.h -ecatcoe.obj: ../ecatcoe.h -ecatcoe.obj: ../mailbox.h - -../ecatcoe.c: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../f2838x_cm_system.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - -../ecatcoe.h: - -../mailbox.h: - diff --git a/RAM/ecatslv.d b/RAM/ecatslv.d deleted file mode 100644 index 9843011..0000000 --- a/RAM/ecatslv.d +++ /dev/null @@ -1,102 +0,0 @@ -# FIXED - -ecatslv.obj: ../ecatslv.c -ecatslv.obj: ../ecatslv.h -ecatslv.obj: ../ecat_def.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -ecatslv.obj: ../f2838x_cm_system.h -ecatslv.obj: ../esc.h -ecatslv.obj: ../f2838x_cm_hw.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -ecatslv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -ecatslv.obj: ../esc.h -ecatslv.obj: ../ecatappl.h -ecatslv.obj: ../mailbox.h -ecatslv.obj: ../ecatcoe.h -ecatslv.obj: ../mailbox.h -ecatslv.obj: ../objdef.h -ecatslv.obj: ../sdoserv.h -ecatslv.obj: ../ecatcoe.h -ecatslv.obj: ../mailbox.h -ecatslv.obj: ../cia402appl.h -ecatslv.obj: ../objdef.h -ecatslv.obj: ../sdoserv.h -ecatslv.obj: ../ecatcoe.h -ecatslv.obj: ../mailbox.h - -../ecatslv.c: - -../ecatslv.h: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../f2838x_cm_system.h: - -../esc.h: - -../f2838x_cm_hw.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -../esc.h: - -../ecatappl.h: - -../mailbox.h: - -../ecatcoe.h: - -../mailbox.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - -../cia402appl.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - diff --git a/RAM/ethercat_slave_cm_hal.d b/RAM/ethercat_slave_cm_hal.d deleted file mode 100644 index 1ca22a7..0000000 --- a/RAM/ethercat_slave_cm_hal.d +++ /dev/null @@ -1,219 +0,0 @@ -# FIXED - -ethercat_slave_cm_hal.obj: ../ethercat_slave_cm_hal.c -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/libraries/communications/Ethercat/f2838x/include/ethercat_slave_cm_hal.h -ethercat_slave_cm_hal.obj: C:/workspace_v12/f2838x_cm_cia402_solution/device/cm.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/device_support/f2838x/common/include/driverlib_cm.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_memmap.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/aes.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdbool.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/debug.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/interrupt.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cpu.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ints.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_nvic.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_types.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_aes.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_aes_ss.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/can.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_can.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/sysctl.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_nmi.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_sysctl.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_wwd.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cmmpu.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_cmmpu.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cputimer.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_cputimer.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/dcsm.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_dcsm.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/escss.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_esc_ss.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ethernet.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_emac.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_emac_ss.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/platform_port.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/flash.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_flash.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ipc.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ipc.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/gcrc.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_gcrc.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/gpio.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_gpio.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/i2c.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_i2c.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/mcan.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_mcanss.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_types_mcan.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/memcfg.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_memcfg.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/mpu.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ssi.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ssi.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/systick.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/uart.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_uart.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/udma.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_udma.h -ethercat_slave_cm_hal.obj: C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/usb.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -ethercat_slave_cm_hal.obj: C:/workspace_v12/f2838x_cm_cia402_solution/ecat_def.h -ethercat_slave_cm_hal.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -ethercat_slave_cm_hal.obj: C:/workspace_v12/f2838x_cm_cia402_solution/f2838x_cm_system.h - -../ethercat_slave_cm_hal.c: - -C:/ti/c2000/C2000Ware_5_01_00_00/libraries/communications/Ethercat/f2838x/include/ethercat_slave_cm_hal.h: - -C:/workspace_v12/f2838x_cm_cia402_solution/device/cm.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/device_support/f2838x/common/include/driverlib_cm.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_memmap.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/aes.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdbool.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/debug.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/interrupt.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cpu.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ints.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_nvic.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_types.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_aes.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_aes_ss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/can.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_can.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/sysctl.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_nmi.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_sysctl.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_wwd.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cmmpu.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_cmmpu.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/cputimer.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_cputimer.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/dcsm.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_dcsm.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/escss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_esc_ss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ethernet.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_emac.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_emac_ss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/platform_port.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/flash.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_flash.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ipc.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ipc.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/gcrc.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_gcrc.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/gpio.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_gpio.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/i2c.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_i2c.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/mcan.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_mcanss.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_types_mcan.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/memcfg.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_memcfg.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/mpu.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ssi.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_ssi.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/systick.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/uart.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_uart.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/udma.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/inc/hw_udma.h: - -C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/usb.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -C:/workspace_v12/f2838x_cm_cia402_solution/ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/workspace_v12/f2838x_cm_cia402_solution/f2838x_cm_system.h: - diff --git a/RAM/f2838x_cm_cia402_solution.map b/RAM/f2838x_cm_cia402_solution.map index 84eff75..a2837a7 100644 --- a/RAM/f2838x_cm_cia402_solution.map +++ b/RAM/f2838x_cm_cia402_solution.map @@ -1,10 +1,10 @@ ****************************************************************************** TI ARM Linker PC v20.2.7 ****************************************************************************** ->> Linked Thu Feb 1 16:31:28 2024 +>> Linked Fri Feb 2 11:17:49 2024 OUTPUT FILE NAME: -ENTRY POINT SYMBOL: "_c_int00_noargs" address: 20004999 +ENTRY POINT SYMBOL: "_c_int00_noargs" address: 20004301 MEMORY CONFIGURATION @@ -25,11 +25,11 @@ MEMORY CONFIGURATION CMBANK0_SECTOR11 00274000 00004000 00000000 00004000 RWIX CMBANK0_SECTOR12 00278000 00004000 00000000 00004000 RWIX CMBANK0_SECTOR13 0027c000 00004000 00000000 00004000 RWIX - C1RAM 1fffc000 00001fff 00001ff8 00000007 RWIX + C1RAM 1fffc000 00001fff 00001ffb 00000004 RWIX C0RAM 1fffe000 00001fff 00001ffe 00000001 RWIX BOOT_RSVD 20000000 00000800 00000000 00000800 RWIX S0RAM_RESETISR 20000800 00000008 00000006 00000002 RWIX - S0_S1_S2RAM 20000808 0000b7f7 000047fe 00006ff9 RWIX + S0_S1_S2RAM 20000808 0000b7f7 000041fc 000075fb RWIX S3RAM 2000c000 00003fff 00000000 00003fff RWIX E0RAM 20010000 00003fff 00000000 00003fff RWIX CPU1TOCMMSGRAM0 20080000 00000400 00000000 00000400 RWIX @@ -48,25 +48,25 @@ SEGMENT ALLOCATION MAP run origin load origin length init length attrs members ---------- ----------- ---------- ----------- ----- ------- -1fffc000 1fffc000 000008e0 000008e0 r-x - 1fffc000 1fffc000 000008da 000008da r-- .const - 1fffc8dc 1fffc8dc 00000004 00000004 r-x .text.1 -1fffc8e0 1fffc8e0 00000e58 00000000 rw- - 1fffc8e0 1fffc8e0 0000086e 00000000 rw- .data - 1fffd150 1fffd150 000003e6 00000000 rw- .bss - 1fffd538 1fffd538 00000200 00000000 rw- .stack -1fffd738 1fffd738 000008c6 000008c6 r-x - 1fffd738 1fffd738 000008c6 000008c6 r-x .text.2 +1fffc000 1fffc000 00000938 00000938 r-x + 1fffc000 1fffc000 00000934 00000934 r-- .const + 1fffc934 1fffc934 00000004 00000004 r-x .text.1 +1fffc938 1fffc938 00000e58 00000000 rw- + 1fffc938 1fffc938 0000086e 00000000 rw- .data + 1fffd1a8 1fffd1a8 000003e7 00000000 rw- .bss + 1fffd590 1fffd590 00000200 00000000 rw- .stack +1fffd790 1fffd790 0000086e 0000086e r-x + 1fffd790 1fffd790 0000086e 0000086e r-x .text.2 1fffe000 1fffe000 00001000 00000000 rw- 1fffe000 1fffe000 00001000 00000000 rw- .sysmem 1ffff000 1ffff000 00000ffe 00000ffe r-x 1ffff000 1ffff000 00000ffe 00000ffe r-x .text.3 -20000800 20000800 00004808 00004808 r-x +20000800 20000800 00004208 00004208 r-x 20000800 20000800 00000006 00000006 r-x .resetisr 20000808 20000808 000003f8 000003f8 r-x .text.4 20000c00 20000c00 00000140 00000140 r-- .vtable - 20000d40 20000d40 00003f5e 00003f5e r-x .text.5 - 20004ca0 20004ca0 00000368 00000368 r-- .cinit + 20000d40 20000d40 00003954 00003954 r-x .text.5 + 20004698 20004698 00000370 00000370 r-- .cinit SECTION ALLOCATION MAP @@ -74,96 +74,101 @@ SECTION ALLOCATION MAP output attributes/ section page origin length input sections -------- ---- ---------- ---------- ---------------- -.const 0 1fffc000 000008da - 1fffc000 00000100 coeappl.obj (.const:.string:aName0x1C32) - 1fffc100 000000ff coeappl.obj (.const:.string:aName0x1C33) - 1fffc1ff 00000001 --HOLE-- [fill = 0] - 1fffc200 000000c6 coeappl.obj (.const:asEntryDesc0x1C3x) - 1fffc2c6 00000002 --HOLE-- [fill = 0] - 1fffc2c8 00000078 sdoserv.obj (.const:cAbortCode) - 1fffc340 00000046 cia402appl.obj (.const:.string:aName0x60C2) - 1fffc386 00000042 cia402appl.obj (.const:.string:aName0xF000) - 1fffc3c8 00000040 cia402appl.obj (.const:.string:aName0x607D) - 1fffc408 0000003f coeappl.obj (.const:.string:aName0x10F1) - 1fffc447 00000039 coeappl.obj (.const:.string:aName0x1018) - 1fffc480 00000024 cia402appl.obj (.const:asEntryDesc0x1600) - 1fffc4a4 00000024 cia402appl.obj (.const:asEntryDesc0x1A00) - 1fffc4c8 00000020 objdef.obj (.const:cBitMask) - 1fffc4e8 0000001e cia402appl.obj (.const:.string:aName0x605C) - 1fffc506 0000001e coeappl.obj (.const:asEntryDesc0x1018) - 1fffc524 0000001d cia402appl.obj (.const:.string:aName0xF030) - 1fffc541 0000001b cia402appl.obj (.const:.string:aName0x6061) - 1fffc55c 00000018 cia402appl.obj (.const:asEntryDesc0x1601) - 1fffc574 00000018 cia402appl.obj (.const:asEntryDesc0x1602) - 1fffc58c 00000018 cia402appl.obj (.const:asEntryDesc0x1A01) - 1fffc5a4 00000018 cia402appl.obj (.const:asEntryDesc0x1A02) - 1fffc5bc 00000016 cia402appl.obj (.const:.string:aName0x605A) - 1fffc5d2 00000016 cia402appl.obj (.const:.string:aName0x6064) - 1fffc5e8 00000016 cia402appl.obj (.const:.string:aName0x606C) - 1fffc5fe 00000016 cia402appl.obj (.const:.string:aName0x6085) - 1fffc614 00000016 cia402appl.obj (.const:.string:aName0x6502) - 1fffc62a 00000015 cia402appl.obj (.const:.string:aName0x605B) - 1fffc63f 00000015 cia402appl.obj (.const:.string:aName0xF050) - 1fffc654 00000014 cia402appl.obj (.const:.string:aName0x605E) - 1fffc668 00000014 cia402appl.obj (.const:.string:aName0x6077) - 1fffc67c 00000014 cia402appl.obj (.const:.string:aName0xF010) - 1fffc690 00000013 coeappl.obj (.const:.string:aName0x10F8) - 1fffc6a3 00000013 cia402appl.obj (.const:.string:aName0x6060) - 1fffc6b6 00000012 coeappl.obj (.const:.string:aName0x1C00) - 1fffc6c8 00000012 coeappl.obj (.const:asEntryDesc0x10F1) - 1fffc6da 00000012 cia402appl.obj (.const:asEntryDesc0x607D) - 1fffc6ec 00000012 cia402appl.obj (.const:asEntryDesc0x60C2) - 1fffc6fe 00000012 cia402appl.obj (.const:asEntryDesc0xF000) - 1fffc710 00000012 cia402appl.obj (.const:asEntryDesc0xF010) - 1fffc722 00000012 cia402appl.obj (.const:asEntryDesc0xF030) - 1fffc734 00000012 cia402appl.obj (.const:asEntryDesc0xF050) - 1fffc746 00000011 coeappl.obj (.const:.string:aName0x1009) - 1fffc757 00000011 coeappl.obj (.const:.string:aName0x100A) - 1fffc768 00000010 cia402appl.obj (.const:.string:aName0x1600) - 1fffc778 00000010 cia402appl.obj (.const:.string:aName0x1A00) - 1fffc788 00000010 cia402appl.obj (.const:.string:aName0x607A) - 1fffc798 00000010 cia402appl.obj (.const:.string:aName0x60FF) - 1fffc7a8 0000000f coeappl.obj (.const:.string:aName0x1001) - 1fffc7b7 0000000d cia402appl.obj (.const:.string:aName0x1C12) - 1fffc7c4 0000000d cia402appl.obj (.const:.string:aName0x1C13) - 1fffc7d1 0000000d cia402appl.obj (.const:.string:aName0x6040) - 1fffc7de 0000000c coeappl.obj (.const:.string:aName0x1000) - 1fffc7ea 0000000c coeappl.obj (.const:.string:aName0x1008) - 1fffc7f6 0000000c cia402appl.obj (.const:.string:aName0x1601) - 1fffc802 0000000c cia402appl.obj (.const:.string:aName0x1602) - 1fffc80e 0000000c cia402appl.obj (.const:.string:aName0x1A01) - 1fffc81a 0000000c cia402appl.obj (.const:.string:aName0x1A02) - 1fffc826 0000000c cia402appl.obj (.const:.string:aName0x6041) - 1fffc832 0000000c coeappl.obj (.const:asEntryDesc0x1C00) - 1fffc83e 0000000c cia402appl.obj (.const:asPDOAssignEntryDesc) - 1fffc84a 0000000b cia402appl.obj (.const:.string:aName0x603F) - 1fffc855 00000001 --HOLE-- [fill = 0] - 1fffc856 00000006 coeappl.obj (.const:sEntryDesc0x1000) - 1fffc85c 00000006 coeappl.obj (.const:sEntryDesc0x1001) - 1fffc862 00000006 coeappl.obj (.const:sEntryDesc0x1008) - 1fffc868 00000006 coeappl.obj (.const:sEntryDesc0x1009) - 1fffc86e 00000006 coeappl.obj (.const:sEntryDesc0x100A) - 1fffc874 00000006 coeappl.obj (.const:sEntryDesc0x10F8) - 1fffc87a 00000006 cia402appl.obj (.const:sEntryDesc0x603F) - 1fffc880 00000006 cia402appl.obj (.const:sEntryDesc0x6040) - 1fffc886 00000006 cia402appl.obj (.const:sEntryDesc0x6041) - 1fffc88c 00000006 cia402appl.obj (.const:sEntryDesc0x605A) - 1fffc892 00000006 cia402appl.obj (.const:sEntryDesc0x605B) - 1fffc898 00000006 cia402appl.obj (.const:sEntryDesc0x605C) - 1fffc89e 00000006 cia402appl.obj (.const:sEntryDesc0x605E) - 1fffc8a4 00000006 cia402appl.obj (.const:sEntryDesc0x6060) - 1fffc8aa 00000006 cia402appl.obj (.const:sEntryDesc0x6061) - 1fffc8b0 00000006 cia402appl.obj (.const:sEntryDesc0x6064) - 1fffc8b6 00000006 cia402appl.obj (.const:sEntryDesc0x606C) - 1fffc8bc 00000006 cia402appl.obj (.const:sEntryDesc0x6077) - 1fffc8c2 00000006 cia402appl.obj (.const:sEntryDesc0x607A) - 1fffc8c8 00000006 cia402appl.obj (.const:sEntryDesc0x6085) - 1fffc8ce 00000006 cia402appl.obj (.const:sEntryDesc0x60FF) - 1fffc8d4 00000006 cia402appl.obj (.const:sEntryDesc0x6502) +.const 0 1fffc000 00000934 + 1fffc000 00000108 coeappl.obj (.const:.string:aName0x1C32) + 1fffc108 00000107 coeappl.obj (.const:.string:aName0x1C33) + 1fffc20f 00000001 --HOLE-- [fill = 0] + 1fffc210 000000c6 coeappl.obj (.const:asEntryDesc0x1C3x) + 1fffc2d6 00000002 --HOLE-- [fill = 0] + 1fffc2d8 00000078 sdoserv.obj (.const:cAbortCode) + 1fffc350 00000055 cia402appl.obj (.const:.string:aName0x60C2) + 1fffc3a5 00000047 coeappl.obj (.const:.string:aName0x1018) + 1fffc3ec 00000042 cia402appl.obj (.const:.string:aName0xF000) + 1fffc42e 00000040 cia402appl.obj (.const:.string:aName0x607D) + 1fffc46e 0000003f coeappl.obj (.const:.string:aName0x10F1) + 1fffc4ad 00000001 --HOLE-- [fill = 0] + 1fffc4ae 00000024 cia402appl.obj (.const:asEntryDesc0x1600) + 1fffc4d2 00000024 cia402appl.obj (.const:asEntryDesc0x1A00) + 1fffc4f6 00000020 objdef.obj (.const:cBitMask) + 1fffc516 0000001e coeappl.obj (.const:.string:aName0x1009) + 1fffc534 0000001e coeappl.obj (.const:.string:aName0x100A) + 1fffc552 0000001e cia402appl.obj (.const:.string:aName0x605C) + 1fffc570 0000001e coeappl.obj (.const:asEntryDesc0x1018) + 1fffc58e 0000001d cia402appl.obj (.const:.string:aName0xF030) + 1fffc5ab 0000001b cia402appl.obj (.const:.string:aName0x605E) + 1fffc5c6 0000001b cia402appl.obj (.const:.string:aName0x6061) + 1fffc5e1 00000018 cia402appl.obj (.const:.string:aName0x6085) + 1fffc5f9 00000001 --HOLE-- [fill = 0] + 1fffc5fa 00000018 cia402appl.obj (.const:asEntryDesc0x1601) + 1fffc612 00000018 cia402appl.obj (.const:asEntryDesc0x1602) + 1fffc62a 00000018 cia402appl.obj (.const:asEntryDesc0x1A01) + 1fffc642 00000018 cia402appl.obj (.const:asEntryDesc0x1A02) + 1fffc65a 00000017 cia402appl.obj (.const:.string:aName0x605A) + 1fffc671 00000016 cia402appl.obj (.const:.string:aName0x6064) + 1fffc687 00000016 cia402appl.obj (.const:.string:aName0x606C) + 1fffc69d 00000016 cia402appl.obj (.const:.string:aName0x6502) + 1fffc6b3 00000015 cia402appl.obj (.const:.string:aName0x605B) + 1fffc6c8 00000015 cia402appl.obj (.const:.string:aName0xF050) + 1fffc6dd 00000014 cia402appl.obj (.const:.string:aName0x6077) + 1fffc6f1 00000014 cia402appl.obj (.const:.string:aName0xF010) + 1fffc705 00000013 coeappl.obj (.const:.string:aName0x10F8) + 1fffc718 00000013 cia402appl.obj (.const:.string:aName0x6060) + 1fffc72b 00000012 coeappl.obj (.const:.string:aName0x1C00) + 1fffc73d 00000001 --HOLE-- [fill = 0] + 1fffc73e 00000012 coeappl.obj (.const:asEntryDesc0x10F1) + 1fffc750 00000012 cia402appl.obj (.const:asEntryDesc0x607D) + 1fffc762 00000012 cia402appl.obj (.const:asEntryDesc0x60C2) + 1fffc774 00000012 cia402appl.obj (.const:asEntryDesc0xF000) + 1fffc786 00000012 cia402appl.obj (.const:asEntryDesc0xF010) + 1fffc798 00000012 cia402appl.obj (.const:asEntryDesc0xF030) + 1fffc7aa 00000012 cia402appl.obj (.const:asEntryDesc0xF050) + 1fffc7bc 00000010 cia402appl.obj (.const:.string:aName0x1600) + 1fffc7cc 00000010 cia402appl.obj (.const:.string:aName0x1A00) + 1fffc7dc 00000010 cia402appl.obj (.const:.string:aName0x607A) + 1fffc7ec 00000010 cia402appl.obj (.const:.string:aName0x60FF) + 1fffc7fc 0000000f coeappl.obj (.const:.string:aName0x1001) + 1fffc80b 0000000d cia402appl.obj (.const:.string:aName0x1C12) + 1fffc818 0000000d cia402appl.obj (.const:.string:aName0x1C13) + 1fffc825 0000000d cia402appl.obj (.const:.string:aName0x6040) + 1fffc832 0000000c coeappl.obj (.const:.string:aName0x1000) + 1fffc83e 0000000c coeappl.obj (.const:.string:aName0x1008) + 1fffc84a 0000000c cia402appl.obj (.const:.string:aName0x1601) + 1fffc856 0000000c cia402appl.obj (.const:.string:aName0x1602) + 1fffc862 0000000c cia402appl.obj (.const:.string:aName0x1A01) + 1fffc86e 0000000c cia402appl.obj (.const:.string:aName0x1A02) + 1fffc87a 0000000c cia402appl.obj (.const:.string:aName0x6041) + 1fffc886 0000000c coeappl.obj (.const:asEntryDesc0x1C00) + 1fffc892 0000000c cia402appl.obj (.const:asPDOAssignEntryDesc) + 1fffc89e 0000000b cia402appl.obj (.const:.string:aName0x603F) + 1fffc8a9 00000001 --HOLE-- [fill = 0] + 1fffc8aa 00000006 coeappl.obj (.const:sEntryDesc0x1000) + 1fffc8b0 00000006 coeappl.obj (.const:sEntryDesc0x1001) + 1fffc8b6 00000006 coeappl.obj (.const:sEntryDesc0x1008) + 1fffc8bc 00000006 coeappl.obj (.const:sEntryDesc0x1009) + 1fffc8c2 00000006 coeappl.obj (.const:sEntryDesc0x100A) + 1fffc8c8 00000006 coeappl.obj (.const:sEntryDesc0x10F8) + 1fffc8ce 00000006 cia402appl.obj (.const:sEntryDesc0x603F) + 1fffc8d4 00000006 cia402appl.obj (.const:sEntryDesc0x6040) + 1fffc8da 00000006 cia402appl.obj (.const:sEntryDesc0x6041) + 1fffc8e0 00000006 cia402appl.obj (.const:sEntryDesc0x605A) + 1fffc8e6 00000006 cia402appl.obj (.const:sEntryDesc0x605B) + 1fffc8ec 00000006 cia402appl.obj (.const:sEntryDesc0x605C) + 1fffc8f2 00000006 cia402appl.obj (.const:sEntryDesc0x605E) + 1fffc8f8 00000006 cia402appl.obj (.const:sEntryDesc0x6060) + 1fffc8fe 00000006 cia402appl.obj (.const:sEntryDesc0x6061) + 1fffc904 00000006 cia402appl.obj (.const:sEntryDesc0x6064) + 1fffc90a 00000006 cia402appl.obj (.const:sEntryDesc0x606C) + 1fffc910 00000006 cia402appl.obj (.const:sEntryDesc0x6077) + 1fffc916 00000006 cia402appl.obj (.const:sEntryDesc0x607A) + 1fffc91c 00000006 cia402appl.obj (.const:sEntryDesc0x6085) + 1fffc922 00000006 cia402appl.obj (.const:sEntryDesc0x60FF) + 1fffc928 00000006 cia402appl.obj (.const:sEntryDesc0x6502) + 1fffc92e 00000002 --HOLE-- [fill = 0] + 1fffc930 00000004 cia402appl.obj (.const:.string) -.stack 0 1fffd538 00000200 UNINITIALIZED - 1fffd538 00000004 rtsv7M4_T_le_eabi.lib : boot_cortex_m.c.obj (.stack) - 1fffd53c 000001fc --HOLE-- +.stack 0 1fffd590 00000200 UNINITIALIZED + 1fffd590 00000004 rtsv7M4_T_le_eabi.lib : boot_cortex_m.c.obj (.stack) + 1fffd594 000001fc --HOLE-- .resetisr * 0 20000800 00000006 @@ -172,399 +177,399 @@ section page origin length input sections .vtable 0 20000c00 00000140 20000c00 00000140 startup_cm.obj (.vtable:retain) -.cinit 0 20004ca0 00000368 - 20004ca0 00000340 (.cinit..data.load) [load image, compression = lzss] - 20004fe0 0000000c (__TI_handler_table) - 20004fec 00000004 --HOLE-- [fill = 0] - 20004ff0 00000008 (.cinit..bss.load) [load image, compression = zero_init] - 20004ff8 00000010 (__TI_cinit_table) +.cinit 0 20004698 00000370 + 20004698 00000347 (.cinit..data.load) [load image, compression = lzss] + 200049df 00000001 --HOLE-- [fill = 0] + 200049e0 0000000c (__TI_handler_table) + 200049ec 00000004 --HOLE-- [fill = 0] + 200049f0 00000008 (.cinit..bss.load) [load image, compression = zero_init] + 200049f8 00000010 (__TI_cinit_table) .sysmem 0 1fffe000 00001000 UNINITIALIZED 1fffe000 00000010 rtsv7M4_T_le_eabi.lib : memory.c.obj (.sysmem) 1fffe010 00000ff0 --HOLE-- -.data 0 1fffc8e0 0000086e UNINITIALIZED - 1fffc8e0 000003e8 cia402appl.obj (.data:DefCiA402AxisObjDic) - 1fffccc8 000001e0 coeappl.obj (.data:GenObjDic) - 1fffcea8 00000118 cia402appl.obj (.data:ApplicationObjDic) - 1fffcfc0 000000b0 cia402appl.obj (.data:DefCiA402ObjectValues) - 1fffd070 00000019 coeappl.obj (.data:acDevicename) - 1fffd089 00000014 coeappl.obj (.data:acHardwareversion) - 1fffd09d 00000014 coeappl.obj (.data:acSoftwareversion) - 1fffd0b1 00000001 sdoserv.obj (.data) - 1fffd0b2 00000006 cia402appl.obj (.data:sModulardeviceprofile) - 1fffd0b8 00000014 coeappl.obj (.data) - 1fffd0cc 00000014 coeappl.obj (.data:sIdentity) - 1fffd0e0 0000000d objdef.obj (.data:aSubindexDesc) - 1fffd0ed 00000002 ecatslv.obj (.data) - 1fffd0ef 00000001 --HOLE-- - 1fffd0f0 0000000c cia402appl.obj (.data:sConfiguredModuleIdentList) - 1fffd0fc 0000000c cia402appl.obj (.data:sDetectedModuleIdentList) - 1fffd108 0000000c objdef.obj (.data:sErrorSettings) - 1fffd114 0000000c cia402appl.obj (.data:sModuleProfileInfo) - 1fffd120 0000000a ecatappl.obj (.data) - 1fffd12a 00000002 --HOLE-- - 1fffd12c 00000008 rtsv7M4_T_le_eabi.lib : _lock.c.obj (.data:$O1$$) - 1fffd134 00000008 : memory.c.obj (.data:$O1$$) - 1fffd13c 00000006 cia402appl.obj (.data:sRxPDOassign) - 1fffd142 00000006 coeappl.obj (.data:sSyncmanagertype) - 1fffd148 00000006 cia402appl.obj (.data:sTxPDOassign) +.data 0 1fffc938 0000086e UNINITIALIZED + 1fffc938 000003e8 cia402appl.obj (.data:DefCiA402AxisObjDic) + 1fffcd20 000001e0 coeappl.obj (.data:GenObjDic) + 1fffcf00 00000118 cia402appl.obj (.data:ApplicationObjDic) + 1fffd018 000000b0 cia402appl.obj (.data:DefCiA402ObjectValues) + 1fffd0c8 00000019 coeappl.obj (.data:acDevicename) + 1fffd0e1 00000014 coeappl.obj (.data:acHardwareversion) + 1fffd0f5 00000014 coeappl.obj (.data:acSoftwareversion) + 1fffd109 00000001 --HOLE-- + 1fffd10a 00000006 cia402appl.obj (.data:sModulardeviceprofile) + 1fffd110 00000014 coeappl.obj (.data) + 1fffd124 00000014 coeappl.obj (.data:sIdentity) + 1fffd138 0000000d objdef.obj (.data:aSubindexDesc) + 1fffd145 00000002 ecatslv.obj (.data) + 1fffd147 00000001 --HOLE-- + 1fffd148 0000000c cia402appl.obj (.data:sConfiguredModuleIdentList) + 1fffd154 0000000c cia402appl.obj (.data:sDetectedModuleIdentList) + 1fffd160 0000000c objdef.obj (.data:sErrorSettings) + 1fffd16c 0000000c cia402appl.obj (.data:sModuleProfileInfo) + 1fffd178 0000000a ecatappl.obj (.data) + 1fffd182 00000002 --HOLE-- + 1fffd184 00000008 rtsv7M4_T_le_eabi.lib : _lock.c.obj (.data:$O1$$) + 1fffd18c 00000008 : memory.c.obj (.data:$O1$$) + 1fffd194 00000006 cia402appl.obj (.data:sRxPDOassign) + 1fffd19a 00000006 coeappl.obj (.data:sSyncmanagertype) + 1fffd1a0 00000006 cia402appl.obj (.data:sTxPDOassign) -.bss 0 1fffd150 000003e6 UNINITIALIZED - 1fffd150 000001a0 (.common:LocalAxes) - 1fffd2f0 00000044 (.common:aPdInputData) - 1fffd334 00000044 (.common:aPdOutputData) - 1fffd378 00000044 (.common:sSyncManInPar) - 1fffd3bc 00000044 (.common:sSyncManOutPar) - 1fffd400 00000034 (.common:sMbxReceiveQueue) - 1fffd434 00000034 (.common:sMbxSendQueue) - 1fffd468 00000010 (.common:aSdoInfoHeader) - 1fffd478 00000008 (.common:SyncManInfo) - 1fffd480 00000004 (.common:nSdoSegBytesToHandle) - 1fffd484 00000004 (.common:nSdoSegCompleteSize) - 1fffd488 00000004 (.common:pAPPL_MainLoop) - 1fffd48c 00000004 (.common:pCoeSendStored) - 1fffd490 00000004 (.common:pSdoInfoObjEntry) - 1fffd494 00000004 (.common:pSdoPendFunc) - 1fffd498 00000004 (.common:pSdoResStored) - 1fffd49c 00000004 (.common:pSdoSegData) - 1fffd4a0 00000004 (.common:pSdoSegObjEntry) - 1fffd4a4 00000004 (.common:pStoreData) - 1fffd4a8 00000004 (.common:psReadMbx) - 1fffd4ac 00000004 (.common:psRepeatMbx) - 1fffd4b0 00000004 (.common:psStoreMbx) - 1fffd4b4 00000004 (.common:psWriteMbx) - 1fffd4b8 00000004 (.common:u32CheckForDcOverrunCnt) - 1fffd4bc 00000004 (.common:u32CycleTimeStartValue) - 1fffd4c0 00000004 (.common:u32LastDc32Value) - 1fffd4c4 00000004 (.common:u32MinCycleTimeStartValue) - 1fffd4c8 00000004 (.common:u32MinCycleTimeValue) - 1fffd4cc 00000004 (.common:u32StoreDataSize) - 1fffd4d0 00000004 (.common:u32SystemTimeReadFailure) - 1fffd4d4 00000002 (.common:EcatWdValue) - 1fffd4d6 00000002 (.common:EsmTimeoutCounter) - 1fffd4d8 00000002 (.common:LatchInputSync0Counter) - 1fffd4da 00000002 (.common:LatchInputSync0Value) - 1fffd4dc 00000002 (.common:Sync0WdCounter) - 1fffd4de 00000002 (.common:Sync0WdValue) - 1fffd4e0 00000002 (.common:Sync1WdCounter) - 1fffd4e2 00000002 (.common:Sync1WdValue) - 1fffd4e4 00000002 (.common:i16WaitForPllRunningCnt) - 1fffd4e6 00000002 (.common:i16WaitForPllRunningTimeout) - 1fffd4e8 00000002 (.common:nEcatStateTrans) - 1fffd4ea 00000002 (.common:nEscAddrInputData) - 1fffd4ec 00000002 (.common:nEscAddrOutputData) - 1fffd4ee 00000002 (.common:nMaxEscAddress) - 1fffd4f0 00000002 (.common:nPdInputSize) - 1fffd4f2 00000002 (.common:nPdOutputSize) - 1fffd4f4 00000002 (.common:nSdoInfoFragmentsLeft) - 1fffd4f6 00000002 (.common:nSdoInfoIndex) - 1fffd4f8 00000002 (.common:nSdoSegIndex) - 1fffd4fa 00000002 (.common:sCycleDiag) - 1fffd4fc 00000002 (.common:u16ALEventMask) - 1fffd4fe 00000002 (.common:u16EscAddrReceiveMbx) - 1fffd500 00000002 (.common:u16EscAddrSendMbx) - 1fffd502 00000002 (.common:u16LocalErrorCode) - 1fffd504 00000002 (.common:u16ReceiveMbxSize) - 1fffd506 00000002 (.common:u16SendMbxSize) - 1fffd508 00000002 (.common:u16SmSync0Counter) - 1fffd50a 00000002 (.common:u16SmSync0Value) - 1fffd50c 00000002 (.common:u16StoreIndex) - 1fffd50e 00000001 (.common:b32BitDc) - 1fffd50f 00000001 (.common:b3BufferMode) - 1fffd510 00000001 (.common:bApplEsmPending) - 1fffd511 00000001 (.common:bDcRunning) - 1fffd512 00000001 (.common:bDcSyncActive) - 1fffd513 00000001 (.common:bEcatFirstOutputsReceived) - 1fffd514 00000001 (.common:bEcatInputUpdateRunning) - 1fffd515 00000001 (.common:bEcatOutputUpdateRunning) - 1fffd516 00000001 (.common:bEcatWaitForAlControlRes) - 1fffd517 00000001 (.common:bEscIntEnabled) - 1fffd518 00000001 (.common:bEtherCATErrorLed) - 1fffd519 00000001 (.common:bEtherCATRunLed) - 1fffd51a 00000001 (.common:bExplicitDevIdRequested) - 1fffd51b 00000001 (.common:bLocalErrorFlag) - 1fffd51c 00000001 (.common:bMbxRepeatToggle) - 1fffd51d 00000001 (.common:bMbxRunning) - 1fffd51e 00000001 (.common:bMinCycleTimeMeasurementStarted) - 1fffd51f 00000001 (.common:bNoMbxMemoryAvailable) - 1fffd520 00000001 (.common:bReceiveMbxIsLocked) - 1fffd521 00000001 (.common:bRunApplication) - 1fffd522 00000001 (.common:bSdoSegAccess) - 1fffd523 00000001 (.common:bSdoSegFollows) - 1fffd524 00000001 (.common:bSdoSegLastToggle) - 1fffd525 00000001 (.common:bSendMbxIsFull) - 1fffd526 00000001 (.common:bSmSyncSequenceValid) - 1fffd527 00000001 (.common:bStoreCompleteAccess) - 1fffd528 00000001 (.common:bSyncSetByUser) - 1fffd529 00000001 (.common:bWdTrigger) - 1fffd52a 00000001 (.common:nAlStatus) - 1fffd52b 00000001 (.common:nMaxSyncMan) - 1fffd52c 00000001 (.common:nSdoSegService) - 1fffd52d 00000001 (.common:nSdoSegSubindex) - 1fffd52e 00000001 (.common:u8EcatErrorLed) - 1fffd52f 00000001 (.common:u8EcatRunLed) - 1fffd530 00000001 (.common:u8MailboxSendReqStored) - 1fffd531 00000001 (.common:u8MbxReadCounter) - 1fffd532 00000001 (.common:u8MbxWriteCounter) - 1fffd533 00000001 (.common:u8PendingSdo) - 1fffd534 00000001 (.common:u8StoreSubindex) - 1fffd535 00000001 (.common:u8dummy) +.bss 0 1fffd1a8 000003e7 UNINITIALIZED + 1fffd1a8 000001a0 (.common:LocalAxes) + 1fffd348 00000044 (.common:aPdInputData) + 1fffd38c 00000044 (.common:aPdOutputData) + 1fffd3d0 00000044 (.common:sSyncManInPar) + 1fffd414 00000044 (.common:sSyncManOutPar) + 1fffd458 00000034 (.common:sMbxReceiveQueue) + 1fffd48c 00000034 (.common:sMbxSendQueue) + 1fffd4c0 00000010 (.common:aSdoInfoHeader) + 1fffd4d0 00000008 (.common:SyncManInfo) + 1fffd4d8 00000004 (.common:pAPPL_CoeReadInd) + 1fffd4dc 00000004 (.common:pAPPL_CoeWriteInd) + 1fffd4e0 00000004 (.common:pAPPL_FoeError) + 1fffd4e4 00000004 (.common:pAPPL_FoeRead) + 1fffd4e8 00000004 (.common:pAPPL_FoeReadData) + 1fffd4ec 00000004 (.common:pAPPL_FoeWrite) + 1fffd4f0 00000004 (.common:pAPPL_FoeWriteData) + 1fffd4f4 00000004 (.common:pAPPL_MainLoop) + 1fffd4f8 00000004 (.common:pCoeSendStored) + 1fffd4fc 00000004 (.common:pFoeSendStored) + 1fffd500 00000004 (.common:pSdoInfoObjEntry) + 1fffd504 00000004 (.common:psReadMbx) + 1fffd508 00000004 (.common:psRepeatMbx) + 1fffd50c 00000004 (.common:psStoreMbx) + 1fffd510 00000004 (.common:psWriteMbx) + 1fffd514 00000004 (.common:u32CheckForDcOverrunCnt) + 1fffd518 00000004 (.common:u32CycleTimeStartValue) + 1fffd51c 00000004 (.common:u32FileOffset) + 1fffd520 00000004 (.common:u32LastDc32Value) + 1fffd524 00000004 (.common:u32LastFileOffset) + 1fffd528 00000004 (.common:u32MinCycleTimeStartValue) + 1fffd52c 00000004 (.common:u32MinCycleTimeValue) + 1fffd530 00000004 (.common:u32PacketNo) + 1fffd534 00000004 (.common:u32SystemTimeReadFailure) + 1fffd538 00000002 (.common:EcatWdValue) + 1fffd53a 00000002 (.common:EsmTimeoutCounter) + 1fffd53c 00000002 (.common:LatchInputSync0Counter) + 1fffd53e 00000002 (.common:LatchInputSync0Value) + 1fffd540 00000002 (.common:Sync0WdCounter) + 1fffd542 00000002 (.common:Sync0WdValue) + 1fffd544 00000002 (.common:Sync1WdCounter) + 1fffd546 00000002 (.common:Sync1WdValue) + 1fffd548 00000002 (.common:i16WaitForPllRunningCnt) + 1fffd54a 00000002 (.common:i16WaitForPllRunningTimeout) + 1fffd54c 00000002 (.common:nEcatStateTrans) + 1fffd54e 00000002 (.common:nEscAddrInputData) + 1fffd550 00000002 (.common:nEscAddrOutputData) + 1fffd552 00000002 (.common:nMaxEscAddress) + 1fffd554 00000002 (.common:nPdInputSize) + 1fffd556 00000002 (.common:nPdOutputSize) + 1fffd558 00000002 (.common:nSdoInfoIndex) + 1fffd55a 00000002 (.common:sCycleDiag) + 1fffd55c 00000002 (.common:u16ALEventMask) + 1fffd55e 00000002 (.common:u16EscAddrReceiveMbx) + 1fffd560 00000002 (.common:u16EscAddrSendMbx) + 1fffd562 00000002 (.common:u16FileAccessState) + 1fffd564 00000002 (.common:u16FoeMaxSendBlockSize) + 1fffd566 00000002 (.common:u16LocalErrorCode) + 1fffd568 00000002 (.common:u16ReceiveMbxSize) + 1fffd56a 00000002 (.common:u16SendMbxSize) + 1fffd56c 00000002 (.common:u16SmSync0Counter) + 1fffd56e 00000002 (.common:u16SmSync0Value) + 1fffd570 00000001 (.common:b32BitDc) + 1fffd571 00000001 (.common:b3BufferMode) + 1fffd572 00000001 (.common:bApplEsmPending) + 1fffd573 00000001 (.common:bDcRunning) + 1fffd574 00000001 (.common:bDcSyncActive) + 1fffd575 00000001 (.common:bEcatFirstOutputsReceived) + 1fffd576 00000001 (.common:bEcatInputUpdateRunning) + 1fffd577 00000001 (.common:bEcatOutputUpdateRunning) + 1fffd578 00000001 (.common:bEcatWaitForAlControlRes) + 1fffd579 00000001 (.common:bEscIntEnabled) + 1fffd57a 00000001 (.common:bEtherCATErrorLed) + 1fffd57b 00000001 (.common:bEtherCATRunLed) + 1fffd57c 00000001 (.common:bMbxRepeatToggle) + 1fffd57d 00000001 (.common:bMbxRunning) + 1fffd57e 00000001 (.common:bMinCycleTimeMeasurementStarted) + 1fffd57f 00000001 (.common:bNoMbxMemoryAvailable) + 1fffd580 00000001 (.common:bReceiveMbxIsLocked) + 1fffd581 00000001 (.common:bRunApplication) + 1fffd582 00000001 (.common:bSendMbxIsFull) + 1fffd583 00000001 (.common:bSmSyncSequenceValid) + 1fffd584 00000001 (.common:bSyncSetByUser) + 1fffd585 00000001 (.common:bWdTrigger) + 1fffd586 00000001 (.common:nAlStatus) + 1fffd587 00000001 (.common:nMaxSyncMan) + 1fffd588 00000001 (.common:u8EcatErrorLed) + 1fffd589 00000001 (.common:u8EcatRunLed) + 1fffd58a 00000001 (.common:u8LocalErrorState) + 1fffd58b 00000001 (.common:u8MailboxSendReqStored) + 1fffd58c 00000001 (.common:u8MbxReadCounter) + 1fffd58d 00000001 (.common:u8MbxWriteCounter) + 1fffd58e 00000001 (.common:u8dummy) __llvm_prf_cnts * 0 1fffc000 00000000 UNINITIALIZED -.text.1 0 1fffc8dc 00000004 - 1fffc8dc 00000004 cia402appl.obj (.text:APPL_GetDeviceID) +.text.1 0 1fffc934 00000004 + 1fffc934 00000004 F2838x CM EtherCAT Slave.obj (.text:APPL_StartMailboxHandler) -.text.2 0 1fffd738 000008c6 - 1fffd738 000004ac ecatslv.obj (.text:StartInputHandler) - 1fffdbe4 0000037a objdef.obj (.text:OBJ_Read) - 1fffdf5e 0000009c objdef.obj (.text:OBJ_GetObjectList) - 1fffdffa 00000004 cia402appl.obj (.text:APPL_StartMailboxHandler) +.text.2 0 1fffd790 0000086e + 1fffd790 000004ca ecatslv.obj (.text:StartInputHandler) + 1fffdc5a 000002ea objdef.obj (.text:OBJ_Read) + 1fffdf44 000000ba objdef.obj (.text:CheckSyncTypeValue) .text.3 0 1ffff000 00000ffe - 1ffff000 0000046e objdef.obj (.text:OBJ_Write) - 1ffff46e 0000043c sdoserv.obj (.text:SDOS_SdoInd) - 1ffff8aa 0000041e ecatslv.obj (.text:AL_ControlInd) - 1ffffcc8 000002c4 cia402appl.obj (.text:CiA402_Init) - 1fffff8c 00000070 driverlib_cm.lib : sysctl.obj (.text:SysCtl_resetPeripheral) - 1ffffffc 00000002 cia402appl.obj (.text:APPL_AckErrorInd) + 1ffff000 0000041e ecatslv.obj (.text:AL_ControlInd) + 1ffff41e 000003ac objdef.obj (.text:OBJ_Write) + 1ffff7ca 000002c4 cia402appl.obj (.text:CiA402_Init) + 1ffffa8e 00000236 ecatfoe.obj (.text:FOE_ServiceInd) + 1ffffcc4 00000232 cia402appl.obj (.text:APPL_GenerateMapping) + 1ffffef6 00000002 F2838x CM EtherCAT Slave.obj (.text:APPL_AckErrorInd) + 1ffffef8 00000100 rtsv7M4_T_le_eabi.lib : memory.c.obj (.text:aligned_alloc) + 1ffffff8 00000004 cia402appl.obj (.text:APPL_StartOutputHandler) + 1ffffffc 00000002 coeappl.obj (.text:COE_Main) .text.4 0 20000808 000003f8 - 20000808 00000298 sdoserv.obj (.text:SDOS_SdoInfoInd) - 20000aa0 00000140 ecatappl.obj (.text:PDI_Isr) - 20000be0 00000020 cia402appl.obj (.text:APPL_Application) + 20000808 00000232 sdoserv.obj (.text:SDOS_SdoInfoInd) + 20000a3a 000001c0 ecatappl.obj (.text:ECAT_SetLedIndication) + 20000bfa 00000004 cia402appl.obj (.text:APPL_StopInputHandler) + 20000bfe 00000002 ethercat_slave_cm_hal.obj (.text:ESC_releaseHW) -.text.5 0 20000d40 00003f5e - 20000d40 00000232 cia402appl.obj (.text:APPL_GenerateMapping) - 20000f72 00000228 sdoserv.obj (.text:SdoDownloadSegmentInd) - 2000119a 00000208 ecatslv.obj (.text:CheckSmSettings) - 200013a2 000001fc cia402appl.obj (.text:CiA402_StateMachine) - 2000159e 000001d2 ecatslv.obj (.text:AL_ControlRes) - 20001770 000001c0 ecatappl.obj (.text:ECAT_SetLedIndication) - 20001930 000001b6 rtsv7M4_T_le_eabi.lib : fd_add_t2.asm.obj (.text) - 20001ae6 00000170 cia402appl.obj (.text:Write0xF030) - 20001c56 0000013a ecatslv.obj (.text:ECAT_Init) - 20001d90 0000011a ecatappl.obj (.text:Sync0_Isr) - 20001eaa 0000010c ecatslv.obj (.text:ECAT_Main) - 20001fb6 00000002 ethercat_slave_cm_hal.obj (.text:ESC_releaseHW) - 20001fb8 00000100 rtsv7M4_T_le_eabi.lib : memory.c.obj (.text:aligned_alloc) - 200020b8 000000fe ecatslv.obj (.text:StopInputHandler) - 200021b6 000000fc cia402appl.obj (.text:CiA402_Application) - 200022b2 000000fc cia402appl.obj (.text:CiA402_DummyMotionControl) - 200023ae 000000fc mailbox.obj (.text:MBX_CheckAndCopyMailbox) - 200024aa 000000fc rtsv7M4_T_le_eabi.lib : fd_mul_t2.asm.obj (.text) - 200025a6 000000f8 coeappl.obj (.text:COE_ObjInit) - 2000269e 000000f8 objdef.obj (.text:OBJ_GetEntryOffset) - 20002796 000000f6 ecatslv.obj (.text:DC_CheckWatchdog) - 2000288c 000000f6 mailbox.obj (.text:MBX_StopMailboxHandler) - 20002982 000000f2 ethercat_slave_cm_hal.obj (.text:ESC_initHW) - 20002a74 000000f0 sdoserv.obj (.text:SdoUploadSegmentInd) - 20002b64 000000ea sdoserv.obj (.text:SDOS_SdoRes) - 20002c4e 00000002 rtsv7M4_T_le_eabi.lib : _lock.c.obj (.text:_nop) - 20002c50 000000e4 : memory.c.obj (.text:free) - 20002d34 000000e2 ecatappl.obj (.text:MainLoop) - 20002e16 000000d8 mailbox.obj (.text:MBX_Init) - 20002eee 000000ca cia402appl.obj (.text:APPL_StartInputHandler) - 20002fb8 000000bc objdef.obj (.text:OBJ_GetDesc) - 20003074 000000ba objdef.obj (.text:CheckSyncTypeValue) - 2000312e 000000ba objdef.obj (.text:OBJ_GetObjectLength) - 200031e8 000000b8 sdoserv.obj (.text:SODS_ClearPendingResponse) - 200032a0 000000b6 coeappl.obj (.text:COE_Main) - 20003356 000000b6 sdoserv.obj (.text:SdoRes) - 2000340c 000000aa mailbox.obj (.text:MBX_CopyToSendMailbox) - 200034b6 000000a2 mailbox.obj (.text:MBX_StartMailboxHandler) - 20003558 000000a2 ecatappl.obj (.text:PDO_OutputMapping) - 200035fa 000000a2 ecatslv.obj (.text:SetALStatus) - 2000369c 0000009c rtsv7M4_T_le_eabi.lib : memcpy_t2.asm.obj (.text) - 20003738 00000096 cia402appl.obj (.text:APPL_OutputMapping) - 200037ce 0000008e cia402appl.obj (.text:APPL_InputMapping) - 2000385c 0000008e ecatappl.obj (.text:ECAT_CheckTimer) - 200038ea 00000086 mailbox.obj (.text:MBX_MailboxReadInd) - 20003970 00000086 ecatappl.obj (.text:PDO_InputMapping) - 200039f6 00000084 mailbox.obj (.text:MBX_MailboxSendReq) - 20003a7a 00000002 startup_cm.obj (.text:defaultISR) - 20003a7c 00000080 driverlib_cm.lib : interrupt.obj (.text:Interrupt_enable) - 20003afc 0000007e ecatappl.obj (.text:MainInit) - 20003b7a 0000007a ecatslv.obj (.text:CheckIfEcatError) - 20003bf4 0000007a rtsv7M4_T_le_eabi.lib : fs_mul_t2.asm.obj (.text) - 20003c6e 0000007a : memset_t2.asm.obj (.text) - 20003ce8 00000076 cm.obj (.text:CM_enableAllPeripherals) - 20003d5e 00000076 coeappl.obj (.text:COE_SyncTimeStamp) - 20003dd4 00000070 rtsv7M4_T_le_eabi.lib : memory.c.obj (.text:split) - 20003e44 00000068 : copy_decompress_lzss.c.obj (.text:decompress:lzss:__TI_decompress_lzss) - 20003eac 00000064 coeappl.obj (.text:COE_AddObjectToDic) - 20003f10 00000062 mailbox.obj (.text:MBX_MailboxRepeatReq) - 20003f72 00000060 ecatslv.obj (.text:StartOutputHandler) - 20003fd2 00000060 rtsv7M4_T_le_eabi.lib : fs_cmp_t2.asm.obj (.text:__aeabi_cfcmple) - 20004032 0000005e objdef.obj (.text:OBJ_GetNoOfObjects) - 20004090 0000005c cia402appl.obj (.text:CiA402_DeallocateAxis) - 200040ec 0000005c driverlib_cm.lib : escss.obj (.text:ESCSS_configureSync0Connections) - 20004148 0000005c : escss.obj (.text:ESCSS_configureSync1Connections) - 200041a4 0000005c : interrupt.obj (.text:Interrupt_registerHandler) - 20004200 0000005c mailbox.obj (.text:MBX_MailboxWriteInd) - 2000425c 00000050 ecatappl.obj (.text:HandleCycleTimeMeasurement) - 200042ac 0000004e coeappl.obj (.text:Read0x10F8) - 200042fa 00000048 mailbox.obj (.text:MBX_Main) - 20004342 00000002 startup_cm.obj (.text:faultISR) - 20004344 00000048 driverlib_cm.lib : sysctl.obj (.text:SysCtl_enablePeripheral) - 2000438c 00000048 rtsv7M4_T_le_eabi.lib : fd_toi_t2.asm.obj (.text) - 200043d4 00000046 coeappl.obj (.text:COE_UpdateSyncErrorStatus) - 2000441a 00000044 ecatappl.obj (.text:Sync1_Isr) - 2000445e 00000002 startup_cm.obj (.text:nmiISR) - 20004460 00000044 rtsv7M4_T_le_eabi.lib : autoinit.c.obj (.text:__TI_auto_init_nobinit_nopinit:__TI_auto_init_nobinit_nopinit) - 200044a4 00000044 cia402appl.obj (.text:main) - 200044e8 00000042 ecatcoe.obj (.text:COE_ContinueInd) - 2000452a 0000003e ecatappl.obj (.text:ECAT_Application) - 20004568 0000003c coeappl.obj (.text:COE_RemoveDicEntry) - 200045a4 0000003a driverlib_cm.lib : escss.obj (.text:ESCSS_configureEEPROMSize) - 200045de 0000003a objdef.obj (.text:OBJ_CopyNumberToString) - 20004618 0000003a objdef.obj (.text:OBJ_GetEntryDesc) - 20004652 00000038 rtsv7M4_T_le_eabi.lib : fs_tod_t2.asm.obj (.text) - 2000468a 00000038 : fs_toi_t2.asm.obj (.text) - 200046c2 00000036 : strncpy.c.obj (.text:strncpy) - 200046f8 00000034 ecatappl.obj (.text:GetSystemTimeDelay) - 2000472c 00000032 ethercat_slave_cm_hal.obj (.text:ESC_setLed) - 2000475e 0000002e ecatslv.obj (.text:DisableSyncManChannel) - 2000478c 0000002e ecatslv.obj (.text:EnableSyncManChannel) - 200047ba 0000002e rtsv7M4_T_le_eabi.lib : i_tofd_t2.asm.obj (.text) - 200047e8 0000002c coeappl.obj (.text:COE_ObjDictionaryInit) - 20004814 0000002c mailbox.obj (.text:PutInMbxQueue) - 20004840 00000028 cm.obj (.text:CM_init) - 20004868 00000028 ecatcoe.obj (.text:COE_ServiceInd) - 20004890 00000028 ethercat_slave_cm_hal.obj (.text:ESC_loadedCheckEEPROM) - 200048b8 00000028 rtsv7M4_T_le_eabi.lib : memory.c.obj (.text:free_list_insert) - 200048e0 00000026 mailbox.obj (.text:GetOutOfMbxQueue) - 20004906 00000026 ecatslv.obj (.text:UpdateEEPROMLoadedState) - 2000492c 00000024 coeappl.obj (.text:AddObjectsToObjDictionary) - 20004950 00000024 cia402appl.obj (.text:CiA402_LocalError) - 20004974 00000024 driverlib_cm.lib : escss.obj (.text:ESCSS_isConfigurationLockEnabled) - 20004998 00000024 rtsv7M4_T_le_eabi.lib : boot_cortex_m.c.obj (.text:_c_int00_noargs:_c_int00_noargs) - 200049bc 00000024 : u_tofs_t2.asm.obj (.text) - 200049e0 00000020 coeappl.obj (.text:COE_ClearObjDictionary) - 20004a00 0000001e ethercat_slave_cm_hal.obj (.text:ESC_clearTimer) - 20004a1e 0000001c ecatslv.obj (.text:GetSyncMan) - 20004a3a 0000001c ecatslv.obj (.text:ResetALEventMask) - 20004a56 0000001c ecatslv.obj (.text:SetALEventMask) - 20004a72 0000001c rtsv7M4_T_le_eabi.lib : copy_zero_init.c.obj (.text:decompress:ZI:__TI_zero_init_nomemset:__TI_zero_init_nomemset) - 20004a8e 00000002 --HOLE-- [fill = 0] - 20004a90 0000001c : memory.c.obj (.text:free_list_remove) - 20004aac 0000001a ethercat_slave_cm_hal.obj (.text:ESC_applicationLayerHandler) - 20004ac6 0000001a ethercat_slave_cm_hal.obj (.text:ESC_applicationSync0Handler) - 20004ae0 0000001a ethercat_slave_cm_hal.obj (.text:ESC_applicationSync1Handler) - 20004afa 0000001a objdef.obj (.text:OBJ_GetObjectHandle) - 20004b14 00000018 ecatcoe.obj (.text:COE_Init) - 20004b2c 00000018 ecatslv.obj (.text:StopOutputHandler) - 20004b44 00000014 rtsv7M4_T_le_eabi.lib : strlen.c.obj (.text:strlen) - 20004b58 00000012 mailbox.obj (.text:MailboxServiceInd) - 20004b6a 00000010 ethercat_slave_cm_hal.obj (.text:ESC_writeBlockISR) - 20004b7a 0000000e ecatslv.obj (.text:BackToInitTransition) - 20004b88 0000000e ethercat_slave_cm_hal.obj (.text:ESC_getTimer) - 20004b96 0000000e rtsv7M4_T_le_eabi.lib : copy_decompress_none.c.obj (.text:decompress:none:__TI_decompress_none) - 20004ba4 0000000c coeappl.obj (.text:COE_GetObjectDictionary) - 20004bb0 0000000c cia402appl.obj (.text:CiA402_TransitionAction) - 20004bbc 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readBlock) - 20004bc8 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readBlockISR) - 20004bd4 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readByte) - 20004be0 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readDWord) - 20004bec 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readWord) - 20004bf8 0000000c ethercat_slave_cm_hal.obj (.text:ESC_writeBlock) - 20004c04 0000000c ethercat_slave_cm_hal.obj (.text:ESC_writeByte) - 20004c10 0000000c ethercat_slave_cm_hal.obj (.text:ESC_writeDWord) - 20004c1c 0000000c ethercat_slave_cm_hal.obj (.text:ESC_writeWord) - 20004c28 0000000a ethercat_slave_cm_hal.obj (.text:ESC_readByteISR) - 20004c32 0000000a ethercat_slave_cm_hal.obj (.text:ESC_readDWordISR) - 20004c3c 0000000a ethercat_slave_cm_hal.obj (.text:ESC_readWordISR) - 20004c46 0000000a ethercat_slave_cm_hal.obj (.text:ESC_timerIncPerMilliSec) - 20004c50 0000000a ethercat_slave_cm_hal.obj (.text:ESC_writeByteISR) - 20004c5a 0000000a ethercat_slave_cm_hal.obj (.text:ESC_writeDWordISR) - 20004c64 0000000a ethercat_slave_cm_hal.obj (.text:ESC_writeWordISR) - 20004c6e 00000008 ethercat_slave_cm_hal.obj (.text:ESC_resetESC) - 20004c76 00000008 rtsv7M4_T_le_eabi.lib : memory.c.obj (.text:malloc) - 20004c7e 00000004 cia402appl.obj (.text:APPL_StartOutputHandler) - 20004c82 00000004 cia402appl.obj (.text:APPL_StopInputHandler) - 20004c86 00000004 cia402appl.obj (.text:APPL_StopMailboxHandler) - 20004c8a 00000004 cia402appl.obj (.text:APPL_StopOutputHandler) - 20004c8e 00000004 f2838x_cm_system.obj (.text:F2838XCM_strcpy) - 20004c92 00000004 objdef.obj (.text:OBJ_GetObjDesc) - 20004c96 00000004 rtsv7M4_T_le_eabi.lib : pre_init.c.obj (.text:_system_pre_init) - 20004c9a 00000004 : exit.c.obj (.text:abort:abort) +.text.5 0 20000d40 00003954 + 20000d40 00000208 ecatslv.obj (.text:CheckSmSettings) + 20000f48 00000204 ecatslv.obj (.text:AL_ControlRes) + 2000114c 000001fc cia402appl.obj (.text:CiA402_StateMachine) + 20001348 000001b6 rtsv7M4_T_le_eabi.lib : fd_add_t2.asm.obj (.text) + 200014fe 0000017a ecatappl.obj (.text:PDI_Isr) + 20001678 0000015c sdoserv.obj (.text:SDOS_SdoInd) + 200017d4 00000152 cia402appl.obj (.text:Write0xF030) + 20001926 00000130 ecatslv.obj (.text:ECAT_Init) + 20001a56 00000130 ecatappl.obj (.text:Sync0_Isr) + 20001b86 00000118 ecatslv.obj (.text:ECAT_Main) + 20001c9e 0000010e objdef.obj (.text:OBJ_GetEntryOffset) + 20001dac 000000fe ecatslv.obj (.text:StopInputHandler) + 20001eaa 000000fc cia402appl.obj (.text:CiA402_Application) + 20001fa6 000000fc cia402appl.obj (.text:CiA402_DummyMotionControl) + 200020a2 000000fc mailbox.obj (.text:MBX_CheckAndCopyMailbox) + 2000219e 000000fc rtsv7M4_T_le_eabi.lib : fd_mul_t2.asm.obj (.text) + 2000229a 000000f6 ecatslv.obj (.text:DC_CheckWatchdog) + 20002390 000000f6 mailbox.obj (.text:MBX_StopMailboxHandler) + 20002486 000000f2 ethercat_slave_cm_hal.obj (.text:ESC_initHW) + 20002578 000000f2 mailbox.obj (.text:MBX_CopyToSendMailbox) + 2000266a 000000f0 ecatappl.obj (.text:MainLoop) + 2000275a 00000002 rtsv7M4_T_le_eabi.lib : _lock.c.obj (.text:_nop) + 2000275c 000000e4 : memory.c.obj (.text:free) + 20002840 000000d8 mailbox.obj (.text:MBX_Init) + 20002918 000000ca cia402appl.obj (.text:APPL_StartInputHandler) + 200029e2 000000c4 ecatappl.obj (.text:MainInit) + 20002aa6 000000bc objdef.obj (.text:OBJ_GetDesc) + 20002b62 000000ae mailbox.obj (.text:MBX_StartMailboxHandler) + 20002c10 000000ae sdoserv.obj (.text:SdoRes) + 20002cbe 000000a6 coeappl.obj (.text:COE_ObjInit) + 20002d64 000000a4 mailbox.obj (.text:MBX_MailboxReadInd) + 20002e08 000000a2 ecatappl.obj (.text:PDO_OutputMapping) + 20002eaa 0000009c objdef.obj (.text:OBJ_GetObjectList) + 20002f46 0000009c rtsv7M4_T_le_eabi.lib : memcpy_t2.asm.obj (.text) + 20002fe2 00000096 cia402appl.obj (.text:APPL_OutputMapping) + 20003078 0000008e cia402appl.obj (.text:APPL_InputMapping) + 20003106 0000008e ecatappl.obj (.text:ECAT_CheckTimer) + 20003194 00000086 ecatappl.obj (.text:PDO_InputMapping) + 2000321a 00000084 mailbox.obj (.text:MBX_MailboxSendReq) + 2000329e 00000002 startup_cm.obj (.text:defaultISR) + 200032a0 00000080 driverlib_cm.lib : interrupt.obj (.text:Interrupt_enable) + 20003320 0000007a ecatslv.obj (.text:CheckIfEcatError) + 2000339a 0000007a rtsv7M4_T_le_eabi.lib : fs_mul_t2.asm.obj (.text) + 20003414 0000007a : memset_t2.asm.obj (.text) + 2000348e 00000076 cm.obj (.text:CM_enableAllPeripherals) + 20003504 00000076 coeappl.obj (.text:COE_SyncTimeStamp) + 2000357a 00000072 ecatslv.obj (.text:StartOutputHandler) + 200035ec 00000070 driverlib_cm.lib : sysctl.obj (.text:SysCtl_resetPeripheral) + 2000365c 00000070 rtsv7M4_T_le_eabi.lib : memory.c.obj (.text:split) + 200036cc 0000006e ecatslv.obj (.text:SetALStatus) + 2000373a 00000068 rtsv7M4_T_le_eabi.lib : copy_decompress_lzss.c.obj (.text:decompress:lzss:__TI_decompress_lzss) + 200037a2 00000064 coeappl.obj (.text:COE_AddObjectToDic) + 20003806 00000062 mailbox.obj (.text:MBX_MailboxRepeatReq) + 20003868 00000060 rtsv7M4_T_le_eabi.lib : fs_cmp_t2.asm.obj (.text:__aeabi_cfcmple) + 200038c8 0000005e objdef.obj (.text:OBJ_GetNoOfObjects) + 20003926 0000005c cia402appl.obj (.text:CiA402_DeallocateAxis) + 20003982 00000002 startup_cm.obj (.text:faultISR) + 20003984 0000005c driverlib_cm.lib : escss.obj (.text:ESCSS_configureSync0Connections) + 200039e0 0000005c : escss.obj (.text:ESCSS_configureSync1Connections) + 20003a3c 0000005c : interrupt.obj (.text:Interrupt_registerHandler) + 20003a98 0000005c mailbox.obj (.text:MBX_MailboxWriteInd) + 20003af4 00000058 objdef.obj (.text:OBJ_GetObjectLength) + 20003b4c 00000052 ecatappl.obj (.text:Sync1_Isr) + 20003b9e 00000050 ecatappl.obj (.text:HandleCycleTimeMeasurement) + 20003bee 00000050 cia402appl.obj (.text:main) + 20003c3e 0000004e coeappl.obj (.text:Read0x10F8) + 20003c8c 00000048 mailbox.obj (.text:MBX_Main) + 20003cd4 00000048 driverlib_cm.lib : sysctl.obj (.text:SysCtl_enablePeripheral) + 20003d1c 00000048 rtsv7M4_T_le_eabi.lib : fd_toi_t2.asm.obj (.text) + 20003d64 00000046 coeappl.obj (.text:COE_UpdateSyncErrorStatus) + 20003daa 00000044 ecatcoe.obj (.text:COE_ContinueInd) + 20003dee 00000002 startup_cm.obj (.text:nmiISR) + 20003df0 00000044 rtsv7M4_T_le_eabi.lib : autoinit.c.obj (.text:__TI_auto_init_nobinit_nopinit:__TI_auto_init_nobinit_nopinit) + 20003e34 0000003e foeappl.obj (.text:FOE_Data) + 20003e72 0000003c coeappl.obj (.text:COE_RemoveDicEntry) + 20003eae 0000003a driverlib_cm.lib : escss.obj (.text:ESCSS_configureEEPROMSize) + 20003ee8 0000003a objdef.obj (.text:OBJ_CopyNumberToString) + 20003f22 0000003a objdef.obj (.text:OBJ_GetEntryDesc) + 20003f5c 00000038 rtsv7M4_T_le_eabi.lib : fs_tod_t2.asm.obj (.text) + 20003f94 00000038 : fs_toi_t2.asm.obj (.text) + 20003fcc 00000036 : strncpy.c.obj (.text:strncpy) + 20004002 00000034 ecatappl.obj (.text:GetSystemTimeDelay) + 20004036 00000032 ecatappl.obj (.text:ECAT_Application) + 20004068 00000032 ethercat_slave_cm_hal.obj (.text:ESC_setLed) + 2000409a 0000002e ecatslv.obj (.text:DisableSyncManChannel) + 200040c8 0000002e ecatslv.obj (.text:EnableSyncManChannel) + 200040f6 0000002e rtsv7M4_T_le_eabi.lib : i_tofd_t2.asm.obj (.text) + 20004124 0000002c coeappl.obj (.text:COE_ObjDictionaryInit) + 20004150 0000002c mailbox.obj (.text:PutInMbxQueue) + 2000417c 00000028 cm.obj (.text:CM_init) + 200041a4 00000028 ecatcoe.obj (.text:COE_ServiceInd) + 200041cc 00000028 ethercat_slave_cm_hal.obj (.text:ESC_loadedCheckEEPROM) + 200041f4 00000028 foeappl.obj (.text:FOE_Ack) + 2000421c 00000028 foeappl.obj (.text:FOE_Read) + 20004244 00000028 rtsv7M4_T_le_eabi.lib : memory.c.obj (.text:free_list_insert) + 2000426c 00000026 mailbox.obj (.text:GetOutOfMbxQueue) + 20004292 00000026 ecatslv.obj (.text:UpdateEEPROMLoadedState) + 200042b8 00000024 coeappl.obj (.text:AddObjectsToObjDictionary) + 200042dc 00000024 driverlib_cm.lib : escss.obj (.text:ESCSS_isConfigurationLockEnabled) + 20004300 00000024 rtsv7M4_T_le_eabi.lib : boot_cortex_m.c.obj (.text:_c_int00_noargs:_c_int00_noargs) + 20004324 00000024 : u_tofs_t2.asm.obj (.text) + 20004348 00000022 ecatfoe.obj (.text:FOE_Init) + 2000436a 00000020 cia402appl.obj (.text:APPL_Application) + 2000438a 00000020 coeappl.obj (.text:COE_ClearObjDictionary) + 200043aa 0000001e ethercat_slave_cm_hal.obj (.text:ESC_clearTimer) + 200043c8 0000001e foeappl.obj (.text:FOE_Write) + 200043e6 0000001c ecatfoe.obj (.text:FOE_ContinueInd) + 20004402 0000001c ecatslv.obj (.text:GetSyncMan) + 2000441e 0000001c mailbox.obj (.text:MailboxServiceInd) + 2000443a 0000001c ecatslv.obj (.text:ResetALEventMask) + 20004456 0000001c ecatslv.obj (.text:SetALEventMask) + 20004472 0000001c rtsv7M4_T_le_eabi.lib : copy_zero_init.c.obj (.text:decompress:ZI:__TI_zero_init_nomemset:__TI_zero_init_nomemset) + 2000448e 00000002 --HOLE-- [fill = 0] + 20004490 0000001c : memory.c.obj (.text:free_list_remove) + 200044ac 0000001a ethercat_slave_cm_hal.obj (.text:ESC_applicationLayerHandler) + 200044c6 0000001a ethercat_slave_cm_hal.obj (.text:ESC_applicationSync0Handler) + 200044e0 0000001a ethercat_slave_cm_hal.obj (.text:ESC_applicationSync1Handler) + 200044fa 0000001a objdef.obj (.text:OBJ_GetObjectHandle) + 20004514 00000018 ecatslv.obj (.text:StopOutputHandler) + 2000452c 00000014 rtsv7M4_T_le_eabi.lib : strlen.c.obj (.text:strlen) + 20004540 00000012 foeappl.obj (.text:FOE_Error) + 20004552 00000010 ethercat_slave_cm_hal.obj (.text:ESC_writeBlockISR) + 20004562 0000000e ecatslv.obj (.text:BackToInitTransition) + 20004570 0000000e ecatcoe.obj (.text:COE_Init) + 2000457e 0000000e ethercat_slave_cm_hal.obj (.text:ESC_getTimer) + 2000458c 0000000e rtsv7M4_T_le_eabi.lib : copy_decompress_none.c.obj (.text:decompress:none:__TI_decompress_none) + 2000459a 0000000c coeappl.obj (.text:COE_GetObjectDictionary) + 200045a6 0000000c cia402appl.obj (.text:CiA402_TransitionAction) + 200045b2 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readBlock) + 200045be 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readBlockISR) + 200045ca 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readByte) + 200045d6 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readDWord) + 200045e2 0000000c ethercat_slave_cm_hal.obj (.text:ESC_readWord) + 200045ee 0000000c ethercat_slave_cm_hal.obj (.text:ESC_writeBlock) + 200045fa 0000000c ethercat_slave_cm_hal.obj (.text:ESC_writeByte) + 20004606 0000000c ethercat_slave_cm_hal.obj (.text:ESC_writeDWord) + 20004612 0000000c ethercat_slave_cm_hal.obj (.text:ESC_writeWord) + 2000461e 0000000a ethercat_slave_cm_hal.obj (.text:ESC_readByteISR) + 20004628 0000000a ethercat_slave_cm_hal.obj (.text:ESC_readDWordISR) + 20004632 0000000a ethercat_slave_cm_hal.obj (.text:ESC_readWordISR) + 2000463c 0000000a ethercat_slave_cm_hal.obj (.text:ESC_timerIncPerMilliSec) + 20004646 0000000a ethercat_slave_cm_hal.obj (.text:ESC_writeByteISR) + 20004650 0000000a ethercat_slave_cm_hal.obj (.text:ESC_writeDWordISR) + 2000465a 0000000a ethercat_slave_cm_hal.obj (.text:ESC_writeWordISR) + 20004664 00000008 ethercat_slave_cm_hal.obj (.text:ESC_resetESC) + 2000466c 00000008 foeappl.obj (.text:FOE_Busy) + 20004674 00000008 rtsv7M4_T_le_eabi.lib : memory.c.obj (.text:malloc) + 2000467c 00000004 F2838x CM EtherCAT Slave.obj (.text:APPL_StopMailboxHandler) + 20004680 00000004 cia402appl.obj (.text:APPL_StopOutputHandler) + 20004684 00000004 f2838x_cm_system.obj (.text:F2838XCM_strcpy) + 20004688 00000004 objdef.obj (.text:OBJ_GetObjDesc) + 2000468c 00000004 rtsv7M4_T_le_eabi.lib : pre_init.c.obj (.text:_system_pre_init) + 20004690 00000004 : exit.c.obj (.text:abort:abort) MODULE SUMMARY - Module code ro data rw data - ------ ---- ------- ------- + Module code ro data rw data + ------ ---- ------- ------- .\ - cia402appl.obj 3410 1075 1926 - ecatslv.obj 4950 0 69 - objdef.obj 3228 32 164 - sdoserv.obj 3140 120 69 - coeappl.obj 980 1035 599 - ecatappl.obj 2102 0 170 - mailbox.obj 1674 0 136 - ethercat_slave_cm_hal.obj 658 0 0 - startup_cm.obj 12 320 0 - ecatcoe.obj 130 0 4 - f2838x_cm_system.obj 4 0 0 - +--+----------------------------+-------+---------+---------+ - Total: 20288 2582 3137 - + cia402appl.obj 3342 1104 1926 + ecatslv.obj 4998 0 68 + objdef.obj 2814 32 164 + ecatappl.obj 2268 0 198 + coeappl.obj 718 1091 599 + mailbox.obj 1798 0 136 + sdoserv.obj 1084 120 22 + ethercat_slave_cm_hal.obj 658 0 0 + ecatfoe.obj 628 0 20 + startup_cm.obj 12 320 0 + foeappl.obj 198 0 0 + ecatcoe.obj 122 0 4 + F2838x CM EtherCAT Slave.obj 10 0 0 + f2838x_cm_system.obj 4 0 0 + +--+------------------------------+-------+---------+---------+ + Total: 18654 2667 3137 + .\device\ - cm.obj 158 0 0 - +--+----------------------------+-------+---------+---------+ - Total: 158 0 0 - + cm.obj 158 0 0 + +--+------------------------------+-------+---------+---------+ + Total: 158 0 0 + C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ccs/Debug/driverlib_cm.lib - escss.obj 278 0 0 - interrupt.obj 220 0 0 - sysctl.obj 184 0 0 - +--+----------------------------+-------+---------+---------+ - Total: 682 0 0 - + escss.obj 278 0 0 + interrupt.obj 220 0 0 + sysctl.obj 184 0 0 + +--+------------------------------+-------+---------+---------+ + Total: 682 0 0 + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\rtsv7M4_T_le_eabi.lib - memory.c.obj 672 0 8 - fd_add_t2.asm.obj 438 0 0 - fd_mul_t2.asm.obj 252 0 0 - memcpy_t2.asm.obj 156 0 0 - fs_mul_t2.asm.obj 122 0 0 - memset_t2.asm.obj 122 0 0 - copy_decompress_lzss.c.obj 104 0 0 - fs_cmp_t2.asm.obj 96 0 0 - fd_toi_t2.asm.obj 72 0 0 - autoinit.c.obj 68 0 0 - fs_tod_t2.asm.obj 56 0 0 - fs_toi_t2.asm.obj 56 0 0 - strncpy.c.obj 54 0 0 - i_tofd_t2.asm.obj 46 0 0 - boot_cortex_m.c.obj 36 0 0 - u_tofs_t2.asm.obj 36 0 0 - copy_zero_init.c.obj 28 0 0 - strlen.c.obj 20 0 0 - copy_decompress_none.c.obj 14 0 0 - _lock.c.obj 2 0 8 - exit.c.obj 4 0 0 - pre_init.c.obj 4 0 0 - +--+----------------------------+-------+---------+---------+ - Total: 2458 0 16 - - Heap: 0 0 4096 - Stack: 0 0 512 - Linker Generated: 0 868 0 - +--+----------------------------+-------+---------+---------+ - Grand Total: 23586 3450 7761 + memory.c.obj 672 0 8 + fd_add_t2.asm.obj 438 0 0 + fd_mul_t2.asm.obj 252 0 0 + memcpy_t2.asm.obj 156 0 0 + fs_mul_t2.asm.obj 122 0 0 + memset_t2.asm.obj 122 0 0 + copy_decompress_lzss.c.obj 104 0 0 + fs_cmp_t2.asm.obj 96 0 0 + fd_toi_t2.asm.obj 72 0 0 + autoinit.c.obj 68 0 0 + fs_tod_t2.asm.obj 56 0 0 + fs_toi_t2.asm.obj 56 0 0 + strncpy.c.obj 54 0 0 + i_tofd_t2.asm.obj 46 0 0 + boot_cortex_m.c.obj 36 0 0 + u_tofs_t2.asm.obj 36 0 0 + copy_zero_init.c.obj 28 0 0 + strlen.c.obj 20 0 0 + copy_decompress_none.c.obj 14 0 0 + _lock.c.obj 2 0 8 + exit.c.obj 4 0 0 + pre_init.c.obj 4 0 0 + +--+------------------------------+-------+---------+---------+ + Total: 2458 0 16 + + Heap: 0 0 4096 + Stack: 0 0 512 + Linker Generated: 0 875 0 + +--+------------------------------+-------+---------+---------+ + Grand Total: 21952 3542 7761 LINKER GENERATED COPY TABLES -__TI_cinit_table @ 20004ff8 records: 2, size/record: 8, table size: 16 - .data: load addr=20004ca0, load size=00000340 bytes, run addr=1fffc8e0, run size=0000086e bytes, compression=lzss - .bss: load addr=20004ff0, load size=00000008 bytes, run addr=1fffd150, run size=000003e6 bytes, compression=zero_init +__TI_cinit_table @ 200049f8 records: 2, size/record: 8, table size: 16 + .data: load addr=20004698, load size=00000347 bytes, run addr=1fffc938, run size=0000086e bytes, compression=lzss + .bss: load addr=200049f0, load size=00000008 bytes, run addr=1fffd1a8, run size=000003e7 bytes, compression=zero_init LINKER GENERATED HANDLER TABLE -__TI_handler_table @ 20004fe0 records: 3, size/record: 4, table size: 12 +__TI_handler_table @ 200049e0 records: 3, size/record: 4, table size: 12 index: 0, handler: __TI_decompress_lzss index: 1, handler: __TI_decompress_none index: 2, handler: __TI_zero_init @@ -574,404 +579,402 @@ GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name address name ------- ---- -1ffff8ab AL_ControlInd -2000159f AL_ControlRes -1ffffffd APPL_AckErrorInd -20000be1 APPL_Application -20000d41 APPL_GenerateMapping -1fffc8dd APPL_GetDeviceID -200037cf APPL_InputMapping -20003739 APPL_OutputMapping -20002eef APPL_StartInputHandler -1fffdffb APPL_StartMailboxHandler -20004c7f APPL_StartOutputHandler -20004c83 APPL_StopInputHandler -20004c87 APPL_StopMailboxHandler -20004c8b APPL_StopOutputHandler -2000492d AddObjectsToObjDictionary -1fffcea8 ApplicationObjDic -20004b7b BackToInitTransition -20004c9b C$$EXIT -20003ce9 CM_enableAllPeripherals -20004841 CM_init -20003ead COE_AddObjectToDic -200049e1 COE_ClearObjDictionary -200044e9 COE_ContinueInd -20004ba5 COE_GetObjectDictionary -20004b15 COE_Init -200032a1 COE_Main -200047e9 COE_ObjDictionaryInit -200025a7 COE_ObjInit -20004569 COE_RemoveDicEntry -20004869 COE_ServiceInd -20003d5f COE_SyncTimeStamp -200043d5 COE_UpdateSyncErrorStatus -20003b7b CheckIfEcatError -2000119b CheckSmSettings -20003075 CheckSyncTypeValue -200021b7 CiA402_Application -20004091 CiA402_DeallocateAxis -200022b3 CiA402_DummyMotionControl -1ffffcc9 CiA402_Init -20004951 CiA402_LocalError -200013a3 CiA402_StateMachine -20004bb1 CiA402_TransitionAction -20002797 DC_CheckWatchdog -1fffc8e0 DefCiA402AxisObjDic -1fffcfc0 DefCiA402ObjectValues -2000475f DisableSyncManChannel -2000452b ECAT_Application -2000385d ECAT_CheckTimer -20001c57 ECAT_Init -20001eab ECAT_Main -20001771 ECAT_SetLedIndication -200045a5 ESCSS_configureEEPROMSize -200040ed ESCSS_configureSync0Connections -20004149 ESCSS_configureSync1Connections -20004aad ESC_applicationLayerHandler -20004ac7 ESC_applicationSync0Handler -20004ae1 ESC_applicationSync1Handler -20004a01 ESC_clearTimer -20004b89 ESC_getTimer -20002983 ESC_initHW -20004891 ESC_loadedCheckEEPROM -20004bbd ESC_readBlock -20004bc9 ESC_readBlockISR -20004bd5 ESC_readByte -20004c29 ESC_readByteISR -20004be1 ESC_readDWord -20004c33 ESC_readDWordISR -20004bed ESC_readWord -20004c3d ESC_readWordISR -20001fb7 ESC_releaseHW -20004c6f ESC_resetESC -2000472d ESC_setLed -20004c47 ESC_timerIncPerMilliSec -20004bf9 ESC_writeBlock -20004b6b ESC_writeBlockISR -20004c05 ESC_writeByte -20004c51 ESC_writeByteISR -20004c11 ESC_writeDWord -20004c5b ESC_writeDWordISR -20004c1d ESC_writeWord -20004c65 ESC_writeWordISR -1fffd4d4 EcatWdValue -1fffd0ee EepromLoaded -2000478d EnableSyncManChannel -1fffd4d6 EsmTimeoutCounter -20004c8f F2838XCM_strcpy -1fffccc8 GenObjDic -200048e1 GetOutOfMbxQueue -20004a1f GetSyncMan -200046f9 GetSystemTimeDelay -2000425d HandleCycleTimeMeasurement -20003a7d Interrupt_enable -200041a5 Interrupt_registerHandler -1fffd4d8 LatchInputSync0Counter -1fffd4da LatchInputSync0Value -1fffd150 LocalAxes -200023af MBX_CheckAndCopyMailbox -2000340d MBX_CopyToSendMailbox -20002e17 MBX_Init -200038eb MBX_MailboxReadInd -20003f11 MBX_MailboxRepeatReq -200039f7 MBX_MailboxSendReq -20004201 MBX_MailboxWriteInd -200042fb MBX_Main -200034b7 MBX_StartMailboxHandler -2000288d MBX_StopMailboxHandler -20004b59 MailboxServiceInd -20003afd MainInit -20002d35 MainLoop -200045df OBJ_CopyNumberToString -20002fb9 OBJ_GetDesc -20004619 OBJ_GetEntryDesc -2000269f OBJ_GetEntryOffset -20004033 OBJ_GetNoOfObjects -20004c93 OBJ_GetObjDesc -20004afb OBJ_GetObjectHandle -2000312f OBJ_GetObjectLength -1fffdf5f OBJ_GetObjectList -1fffdbe5 OBJ_Read -1ffff001 OBJ_Write -1fffd0c8 ObjDicList -20000aa1 PDI_Isr -20003971 PDO_InputMapping -20003559 PDO_OutputMapping -20004815 PutInMbxQueue -200042ad Read0x10F8 -20004a3b ResetALEventMask -1ffff46f SDOS_SdoInd +1ffff001 AL_ControlInd +20000f49 AL_ControlRes +1ffffef7 APPL_AckErrorInd +2000436b APPL_Application +1ffffcc5 APPL_GenerateMapping +20003079 APPL_InputMapping +20002fe3 APPL_OutputMapping +20002919 APPL_StartInputHandler +1fffc935 APPL_StartMailboxHandler +1ffffff9 APPL_StartOutputHandler +20000bfb APPL_StopInputHandler +2000467d APPL_StopMailboxHandler +20004681 APPL_StopOutputHandler +200042b9 AddObjectsToObjDictionary +1fffcf00 ApplicationObjDic +20004563 BackToInitTransition +20004691 C$$EXIT +2000348f CM_enableAllPeripherals +2000417d CM_init +200037a3 COE_AddObjectToDic +2000438b COE_ClearObjDictionary +20003dab COE_ContinueInd +2000459b COE_GetObjectDictionary +20004571 COE_Init +1ffffffd COE_Main +20004125 COE_ObjDictionaryInit +20002cbf COE_ObjInit +20003e73 COE_RemoveDicEntry +200041a5 COE_ServiceInd +20003505 COE_SyncTimeStamp +20003d65 COE_UpdateSyncErrorStatus +20003321 CheckIfEcatError +20000d41 CheckSmSettings +1fffdf45 CheckSyncTypeValue +20001eab CiA402_Application +20003927 CiA402_DeallocateAxis +20001fa7 CiA402_DummyMotionControl +1ffff7cb CiA402_Init +2000114d CiA402_StateMachine +200045a7 CiA402_TransitionAction +2000229b DC_CheckWatchdog +UNDEFED DebugP_log +1fffc938 DefCiA402AxisObjDic +1fffd018 DefCiA402ObjectValues +2000409b DisableSyncManChannel +20004037 ECAT_Application +20003107 ECAT_CheckTimer +20001927 ECAT_Init +20001b87 ECAT_Main +20000a3b ECAT_SetLedIndication +20003eaf ESCSS_configureEEPROMSize +20003985 ESCSS_configureSync0Connections +200039e1 ESCSS_configureSync1Connections +200044ad ESC_applicationLayerHandler +200044c7 ESC_applicationSync0Handler +200044e1 ESC_applicationSync1Handler +200043ab ESC_clearTimer +2000457f ESC_getTimer +20002487 ESC_initHW +200041cd ESC_loadedCheckEEPROM +200045b3 ESC_readBlock +200045bf ESC_readBlockISR +200045cb ESC_readByte +2000461f ESC_readByteISR +200045d7 ESC_readDWord +20004629 ESC_readDWordISR +200045e3 ESC_readWord +20004633 ESC_readWordISR +20000bff ESC_releaseHW +20004665 ESC_resetESC +20004069 ESC_setLed +2000463d ESC_timerIncPerMilliSec +200045ef ESC_writeBlock +20004553 ESC_writeBlockISR +200045fb ESC_writeByte +20004647 ESC_writeByteISR +20004607 ESC_writeDWord +20004651 ESC_writeDWordISR +20004613 ESC_writeWord +2000465b ESC_writeWordISR +1fffd538 EcatWdValue +1fffd146 EepromLoaded +200040c9 EnableSyncManChannel +1fffd53a EsmTimeoutCounter +20004685 F2838XCM_strcpy +200041f5 FOE_Ack +2000466d FOE_Busy +200043e7 FOE_ContinueInd +20003e35 FOE_Data +20004541 FOE_Error +20004349 FOE_Init +2000421d FOE_Read +1ffffa8f FOE_ServiceInd +200043c9 FOE_Write +1fffcd20 GenObjDic +2000426d GetOutOfMbxQueue +20004403 GetSyncMan +20004003 GetSystemTimeDelay +20003b9f HandleCycleTimeMeasurement +200032a1 Interrupt_enable +20003a3d Interrupt_registerHandler +1fffd53c LatchInputSync0Counter +1fffd53e LatchInputSync0Value +1fffd1a8 LocalAxes +200020a3 MBX_CheckAndCopyMailbox +20002579 MBX_CopyToSendMailbox +20002841 MBX_Init +20002d65 MBX_MailboxReadInd +20003807 MBX_MailboxRepeatReq +2000321b MBX_MailboxSendReq +20003a99 MBX_MailboxWriteInd +20003c8d MBX_Main +20002b63 MBX_StartMailboxHandler +20002391 MBX_StopMailboxHandler +2000441f MailboxServiceInd +200029e3 MainInit +2000266b MainLoop +20003ee9 OBJ_CopyNumberToString +20002aa7 OBJ_GetDesc +20003f23 OBJ_GetEntryDesc +20001c9f OBJ_GetEntryOffset +200038c9 OBJ_GetNoOfObjects +20004689 OBJ_GetObjDesc +200044fb OBJ_GetObjectHandle +20003af5 OBJ_GetObjectLength +20002eab OBJ_GetObjectList +1fffdc5b OBJ_Read +1ffff41f OBJ_Write +1fffd120 ObjDicList +200014ff PDI_Isr +20003195 PDO_InputMapping +20002e09 PDO_OutputMapping +20004151 PutInMbxQueue +20003c3f Read0x10F8 +2000443b ResetALEventMask +20001679 SDOS_SdoInd 20000809 SDOS_SdoInfoInd -20002b65 SDOS_SdoRes -1fffd0ed SMActivate -200031e9 SODS_ClearPendingResponse -20003357 SdoRes -20004a57 SetALEventMask -200035fb SetALStatus -1fffd739 StartInputHandler -20003f73 StartOutputHandler -200020b9 StopInputHandler -20004b2d StopOutputHandler -1fffd4dc Sync0WdCounter -1fffd4de Sync0WdValue -20001d91 Sync0_Isr -1fffd4e0 Sync1WdCounter -1fffd4e2 Sync1WdValue -2000441b Sync1_Isr -1fffd478 SyncManInfo -20004345 SysCtl_enablePeripheral -1fffff8d SysCtl_resetPeripheral -20004907 UpdateEEPROMLoadedState -20001ae7 Write0xF030 -1fffd738 __STACK_END +1fffd145 SMActivate +20002c11 SdoRes +20004457 SetALEventMask +200036cd SetALStatus +1fffd791 StartInputHandler +2000357b StartOutputHandler +20001dad StopInputHandler +20004515 StopOutputHandler +1fffd540 Sync0WdCounter +1fffd542 Sync0WdValue +20001a57 Sync0_Isr +1fffd544 Sync1WdCounter +1fffd546 Sync1WdValue +20003b4d Sync1_Isr +1fffd4d0 SyncManInfo +20003cd5 SysCtl_enablePeripheral +200035ed SysCtl_resetPeripheral +20004293 UpdateEEPROMLoadedState +200017d5 Write0xF030 +1fffd790 __STACK_END 00000200 __STACK_SIZE 00001000 __SYSMEM_SIZE -20004ff8 __TI_CINIT_Base -20005008 __TI_CINIT_Limit -20004fe0 __TI_Handler_Table_Base -20004fec __TI_Handler_Table_Limit -20004461 __TI_auto_init_nobinit_nopinit -20003e45 __TI_decompress_lzss -20004b97 __TI_decompress_none +200049f8 __TI_CINIT_Base +20004a08 __TI_CINIT_Limit +200049e0 __TI_Handler_Table_Base +200049ec __TI_Handler_Table_Limit +20003df1 __TI_auto_init_nobinit_nopinit +2000373b __TI_decompress_lzss +2000458d __TI_decompress_none ffffffff __TI_pprof_out_hndl ffffffff __TI_prof_data_size ffffffff __TI_prof_data_start -20004ca0 __TI_static_base__ -20004a73 __TI_zero_init_nomemset -20003fd3 __aeabi_cfcmpeq -20003fd3 __aeabi_cfcmple -2000438d __aeabi_d2iz -2000193b __aeabi_dadd -200024ab __aeabi_dmul -20001931 __aeabi_dsub -20004653 __aeabi_f2d -2000468b __aeabi_f2iz -20003bf5 __aeabi_fmul -200047bb __aeabi_i2d -20003c6f __aeabi_memclr -20003c6f __aeabi_memclr4 -20003c6f __aeabi_memclr8 -2000369d __aeabi_memcpy -2000369d __aeabi_memcpy4 -2000369d __aeabi_memcpy8 -20003c71 __aeabi_memset -20003c71 __aeabi_memset4 -20003c71 __aeabi_memset8 -200049bd __aeabi_ui2f +20004698 __TI_static_base__ +20004473 __TI_zero_init_nomemset +20003869 __aeabi_cfcmpeq +20003869 __aeabi_cfcmple +20003d1d __aeabi_d2iz +20001353 __aeabi_dadd +2000219f __aeabi_dmul +20001349 __aeabi_dsub +20003f5d __aeabi_f2d +20003f95 __aeabi_f2iz +2000339b __aeabi_fmul +200040f7 __aeabi_i2d +20003415 __aeabi_memclr +20003415 __aeabi_memclr4 +20003415 __aeabi_memclr8 +20002f47 __aeabi_memcpy +20002f47 __aeabi_memcpy4 +20002f47 __aeabi_memcpy8 +20003417 __aeabi_memset +20003417 __aeabi_memset4 +20003417 __aeabi_memset8 +20004325 __aeabi_ui2f ffffffff __binit__ ffffffff __c_args__ UNDEFED __mpu_init -1fffd538 __stack +1fffd590 __stack 1fffc000 __start___llvm_prf_cnts 1fffc000 __stop___llvm_prf_cnts -20004999 _c_int00_noargs -1fffd12c _lock -20002c4f _nop +20004301 _c_int00_noargs +1fffd184 _lock +2000275b _nop 1fffe000 _sys_memory UNDEFED _system_post_cinit -20004c97 _system_pre_init -1fffd130 _unlock -1fffc7de aName0x1000 -1fffc7a8 aName0x1001 -1fffc7ea aName0x1008 -1fffc746 aName0x1009 -1fffc757 aName0x100A -1fffc447 aName0x1018 -1fffc408 aName0x10F1 -1fffc690 aName0x10F8 -1fffc768 aName0x1600 -1fffc7f6 aName0x1601 -1fffc802 aName0x1602 -1fffc778 aName0x1A00 -1fffc80e aName0x1A01 -1fffc81a aName0x1A02 -1fffc6b6 aName0x1C00 -1fffc7b7 aName0x1C12 -1fffc7c4 aName0x1C13 +2000468d _system_pre_init +1fffd188 _unlock +1fffc832 aName0x1000 +1fffc7fc aName0x1001 +1fffc83e aName0x1008 +1fffc516 aName0x1009 +1fffc534 aName0x100A +1fffc3a5 aName0x1018 +1fffc46e aName0x10F1 +1fffc705 aName0x10F8 +1fffc7bc aName0x1600 +1fffc84a aName0x1601 +1fffc856 aName0x1602 +1fffc7cc aName0x1A00 +1fffc862 aName0x1A01 +1fffc86e aName0x1A02 +1fffc72b aName0x1C00 +1fffc80b aName0x1C12 +1fffc818 aName0x1C13 1fffc000 aName0x1C32 -1fffc100 aName0x1C33 -1fffc84a aName0x603F -1fffc7d1 aName0x6040 -1fffc826 aName0x6041 -1fffc5bc aName0x605A -1fffc62a aName0x605B -1fffc4e8 aName0x605C -1fffc654 aName0x605E -1fffc6a3 aName0x6060 -1fffc541 aName0x6061 -1fffc5d2 aName0x6064 -1fffc5e8 aName0x606C -1fffc668 aName0x6077 -1fffc788 aName0x607A -1fffc3c8 aName0x607D -1fffc5fe aName0x6085 -1fffc340 aName0x60C2 -1fffc798 aName0x60FF -1fffc614 aName0x6502 -1fffc386 aName0xF000 -1fffc67c aName0xF010 -1fffc524 aName0xF030 -1fffc63f aName0xF050 -1fffd2f0 aPdInputData -1fffd334 aPdOutputData -1fffd468 aSdoInfoHeader -1fffd0e0 aSubindexDesc -20004c9b abort -1fffd070 acDevicename -1fffd089 acHardwareversion -1fffd09d acSoftwareversion -20001fb9 aligned_alloc -1fffc506 asEntryDesc0x1018 -1fffc6c8 asEntryDesc0x10F1 -1fffc480 asEntryDesc0x1600 -1fffc55c asEntryDesc0x1601 -1fffc574 asEntryDesc0x1602 -1fffc4a4 asEntryDesc0x1A00 -1fffc58c asEntryDesc0x1A01 -1fffc5a4 asEntryDesc0x1A02 -1fffc832 asEntryDesc0x1C00 -1fffc200 asEntryDesc0x1C3x -1fffc6da asEntryDesc0x607D -1fffc6ec asEntryDesc0x60C2 -1fffc6fe asEntryDesc0xF000 -1fffc710 asEntryDesc0xF010 -1fffc722 asEntryDesc0xF030 -1fffc734 asEntryDesc0xF050 -1fffc83e asPDOAssignEntryDesc -1fffd50e b32BitDc -1fffd50f b3BufferMode -1fffd510 bApplEsmPending -1fffd511 bDcRunning -1fffd512 bDcSyncActive -1fffd513 bEcatFirstOutputsReceived -1fffd514 bEcatInputUpdateRunning -1fffd515 bEcatOutputUpdateRunning -1fffd516 bEcatWaitForAlControlRes -1fffd517 bEscIntEnabled -1fffd518 bEtherCATErrorLed -1fffd519 bEtherCATRunLed -1fffd51a bExplicitDevIdRequested -1fffd120 bInitFinished -1fffd51b bLocalErrorFlag -1fffd51c bMbxRepeatToggle -1fffd51d bMbxRunning -1fffd51e bMinCycleTimeMeasurementStarted -1fffd51f bNoMbxMemoryAvailable -1fffd520 bReceiveMbxIsLocked -1fffd521 bRunApplication -1fffd0b1 bSdoInWork -1fffd522 bSdoSegAccess -1fffd523 bSdoSegFollows -1fffd524 bSdoSegLastToggle -1fffd525 bSendMbxIsFull -1fffd526 bSmSyncSequenceValid -1fffd527 bStoreCompleteAccess -1fffd528 bSyncSetByUser -1fffd529 bWdTrigger +1fffc108 aName0x1C33 +1fffc89e aName0x603F +1fffc825 aName0x6040 +1fffc87a aName0x6041 +1fffc65a aName0x605A +1fffc6b3 aName0x605B +1fffc552 aName0x605C +1fffc5ab aName0x605E +1fffc718 aName0x6060 +1fffc5c6 aName0x6061 +1fffc671 aName0x6064 +1fffc687 aName0x606C +1fffc6dd aName0x6077 +1fffc7dc aName0x607A +1fffc42e aName0x607D +1fffc5e1 aName0x6085 +1fffc350 aName0x60C2 +1fffc7ec aName0x60FF +1fffc69d aName0x6502 +1fffc3ec aName0xF000 +1fffc6f1 aName0xF010 +1fffc58e aName0xF030 +1fffc6c8 aName0xF050 +1fffd348 aPdInputData +1fffd38c aPdOutputData +1fffd4c0 aSdoInfoHeader +1fffd138 aSubindexDesc +20004691 abort +1fffd0c8 acDevicename +1fffd0e1 acHardwareversion +1fffd0f5 acSoftwareversion +1ffffef9 aligned_alloc +1fffc570 asEntryDesc0x1018 +1fffc73e asEntryDesc0x10F1 +1fffc4ae asEntryDesc0x1600 +1fffc5fa asEntryDesc0x1601 +1fffc612 asEntryDesc0x1602 +1fffc4d2 asEntryDesc0x1A00 +1fffc62a asEntryDesc0x1A01 +1fffc642 asEntryDesc0x1A02 +1fffc886 asEntryDesc0x1C00 +1fffc210 asEntryDesc0x1C3x +1fffc750 asEntryDesc0x607D +1fffc762 asEntryDesc0x60C2 +1fffc774 asEntryDesc0xF000 +1fffc786 asEntryDesc0xF010 +1fffc798 asEntryDesc0xF030 +1fffc7aa asEntryDesc0xF050 +1fffc892 asPDOAssignEntryDesc +1fffd570 b32BitDc +1fffd571 b3BufferMode +1fffd572 bApplEsmPending +1fffd573 bDcRunning +1fffd574 bDcSyncActive +1fffd575 bEcatFirstOutputsReceived +1fffd576 bEcatInputUpdateRunning +1fffd577 bEcatOutputUpdateRunning +1fffd578 bEcatWaitForAlControlRes +1fffd579 bEscIntEnabled +1fffd57a bEtherCATErrorLed +1fffd57b bEtherCATRunLed +1fffd178 bInitFinished +1fffd57c bMbxRepeatToggle +1fffd57d bMbxRunning +1fffd57e bMinCycleTimeMeasurementStarted +1fffd57f bNoMbxMemoryAvailable +1fffd580 bReceiveMbxIsLocked +1fffd581 bRunApplication +1fffd582 bSendMbxIsFull +1fffd583 bSmSyncSequenceValid +1fffd584 bSyncSetByUser +1fffd585 bWdTrigger ffffffff binit -1fffc2c8 cAbortCode -1fffc4c8 cBitMask -20002c51 free -1fffd4e4 i16WaitForPllRunningCnt -1fffd4e6 i16WaitForPllRunningTimeout -200044a5 main -20004c77 malloc -20001fb9 memalign -2000369d memcpy -20003c77 memset -1fffd52a nAlStatus -1fffd4e8 nEcatStateTrans -1fffd4ea nEscAddrInputData -1fffd4ec nEscAddrOutputData -1fffd4ee nMaxEscAddress -1fffd52b nMaxSyncMan -1fffd4f0 nPdInputSize -1fffd4f2 nPdOutputSize -1fffd4f4 nSdoInfoFragmentsLeft -1fffd4f6 nSdoInfoIndex -1fffd480 nSdoSegBytesToHandle -1fffd484 nSdoSegCompleteSize -1fffd4f8 nSdoSegIndex -1fffd52c nSdoSegService -1fffd52d nSdoSegSubindex -1fffd488 pAPPL_MainLoop -1fffd48c pCoeSendStored -1fffd490 pSdoInfoObjEntry -1fffd494 pSdoPendFunc -1fffd498 pSdoResStored -1fffd49c pSdoSegData -1fffd4a0 pSdoSegObjEntry -1fffd4a4 pStoreData -1fffd4a8 psReadMbx -1fffd4ac psRepeatMbx -1fffd4b0 psStoreMbx -1fffd4b4 psWriteMbx -1fffd0f0 sConfiguredModuleIdentList -1fffd4fa sCycleDiag -1fffd0fc sDetectedModuleIdentList -1fffc856 sEntryDesc0x1000 -1fffc85c sEntryDesc0x1001 -1fffc862 sEntryDesc0x1008 -1fffc868 sEntryDesc0x1009 -1fffc86e sEntryDesc0x100A -1fffc874 sEntryDesc0x10F8 -1fffc87a sEntryDesc0x603F -1fffc880 sEntryDesc0x6040 -1fffc886 sEntryDesc0x6041 -1fffc88c sEntryDesc0x605A -1fffc892 sEntryDesc0x605B -1fffc898 sEntryDesc0x605C -1fffc89e sEntryDesc0x605E -1fffc8a4 sEntryDesc0x6060 -1fffc8aa sEntryDesc0x6061 -1fffc8b0 sEntryDesc0x6064 -1fffc8b6 sEntryDesc0x606C -1fffc8bc sEntryDesc0x6077 -1fffc8c2 sEntryDesc0x607A -1fffc8c8 sEntryDesc0x6085 -1fffc8ce sEntryDesc0x60FF -1fffc8d4 sEntryDesc0x6502 -1fffd108 sErrorSettings -1fffd0cc sIdentity -1fffd400 sMbxReceiveQueue -1fffd434 sMbxSendQueue -1fffd0b2 sModulardeviceprofile -1fffd114 sModuleProfileInfo -1fffd13c sRxPDOassign -1fffd378 sSyncManInPar -1fffd3bc sSyncManOutPar -1fffd142 sSyncmanagertype -1fffd148 sTxPDOassign -20004b45 strlen -200046c3 strncpy -1fffd4fc u16ALEventMask -1fffd0c4 u16ErrorRegister -1fffd4fe u16EscAddrReceiveMbx -1fffd500 u16EscAddrSendMbx -1fffd502 u16LocalErrorCode -1fffd504 u16ReceiveMbxSize -1fffd506 u16SendMbxSize -1fffd508 u16SmSync0Counter -1fffd50a u16SmSync0Value -1fffd50c u16StoreIndex -1fffd4b8 u32CheckForDcOverrunCnt -1fffd4bc u32CycleTimeStartValue -1fffd0c0 u32Devicetype -1fffd4c0 u32LastDc32Value -1fffd4c4 u32MinCycleTimeStartValue -1fffd4c8 u32MinCycleTimeValue -1fffd4cc u32StoreDataSize -1fffd4d0 u32SystemTimeReadFailure -1fffd0b8 u64Timestamp -1fffd52e u8EcatErrorLed -1fffd52f u8EcatRunLed -1fffd530 u8MailboxSendReqStored -1fffd531 u8MbxReadCounter -1fffd532 u8MbxWriteCounter -1fffd533 u8PendingSdo -1fffd534 u8StoreSubindex -1fffd535 u8dummy +1fffc2d8 cAbortCode +1fffc4f6 cBitMask +2000275d free +1fffd548 i16WaitForPllRunningCnt +1fffd54a i16WaitForPllRunningTimeout +20003bef main +20004675 malloc +1ffffef9 memalign +20002f47 memcpy +2000341d memset +1fffd586 nAlStatus +1fffd54c nEcatStateTrans +1fffd54e nEscAddrInputData +1fffd550 nEscAddrOutputData +1fffd552 nMaxEscAddress +1fffd587 nMaxSyncMan +1fffd554 nPdInputSize +1fffd556 nPdOutputSize +1fffd558 nSdoInfoIndex +1fffd4d8 pAPPL_CoeReadInd +1fffd4dc pAPPL_CoeWriteInd +1fffd4e0 pAPPL_FoeError +1fffd4e4 pAPPL_FoeRead +1fffd4e8 pAPPL_FoeReadData +1fffd4ec pAPPL_FoeWrite +1fffd4f0 pAPPL_FoeWriteData +1fffd4f4 pAPPL_MainLoop +1fffd4f8 pCoeSendStored +1fffd4fc pFoeSendStored +1fffd500 pSdoInfoObjEntry +1fffd504 psReadMbx +1fffd508 psRepeatMbx +1fffd50c psStoreMbx +1fffd510 psWriteMbx +1fffd148 sConfiguredModuleIdentList +1fffd55a sCycleDiag +1fffd154 sDetectedModuleIdentList +1fffc8aa sEntryDesc0x1000 +1fffc8b0 sEntryDesc0x1001 +1fffc8b6 sEntryDesc0x1008 +1fffc8bc sEntryDesc0x1009 +1fffc8c2 sEntryDesc0x100A +1fffc8c8 sEntryDesc0x10F8 +1fffc8ce sEntryDesc0x603F +1fffc8d4 sEntryDesc0x6040 +1fffc8da sEntryDesc0x6041 +1fffc8e0 sEntryDesc0x605A +1fffc8e6 sEntryDesc0x605B +1fffc8ec sEntryDesc0x605C +1fffc8f2 sEntryDesc0x605E +1fffc8f8 sEntryDesc0x6060 +1fffc8fe sEntryDesc0x6061 +1fffc904 sEntryDesc0x6064 +1fffc90a sEntryDesc0x606C +1fffc910 sEntryDesc0x6077 +1fffc916 sEntryDesc0x607A +1fffc91c sEntryDesc0x6085 +1fffc922 sEntryDesc0x60FF +1fffc928 sEntryDesc0x6502 +1fffd160 sErrorSettings +1fffd124 sIdentity +1fffd458 sMbxReceiveQueue +1fffd48c sMbxSendQueue +1fffd10a sModulardeviceprofile +1fffd16c sModuleProfileInfo +1fffd194 sRxPDOassign +1fffd3d0 sSyncManInPar +1fffd414 sSyncManOutPar +1fffd19a sSyncmanagertype +1fffd1a0 sTxPDOassign +2000452d strlen +20003fcd strncpy +1fffd55c u16ALEventMask +1fffd11c u16ErrorRegister +1fffd55e u16EscAddrReceiveMbx +1fffd560 u16EscAddrSendMbx +1fffd562 u16FileAccessState +1fffd564 u16FoeMaxSendBlockSize +1fffd566 u16LocalErrorCode +1fffd568 u16ReceiveMbxSize +1fffd56a u16SendMbxSize +1fffd56c u16SmSync0Counter +1fffd56e u16SmSync0Value +1fffd514 u32CheckForDcOverrunCnt +1fffd518 u32CycleTimeStartValue +1fffd118 u32Devicetype +1fffd51c u32FileOffset +1fffd520 u32LastDc32Value +1fffd524 u32LastFileOffset +1fffd528 u32MinCycleTimeStartValue +1fffd52c u32MinCycleTimeValue +1fffd530 u32PacketNo +1fffd534 u32SystemTimeReadFailure +1fffd110 u64Timestamp +1fffd588 u8EcatErrorLed +1fffd589 u8EcatRunLed +1fffd58a u8LocalErrorState +1fffd58b u8MailboxSendReqStored +1fffd58c u8MbxReadCounter +1fffd58d u8MbxWriteCounter +1fffd58e u8dummy 20000c00 vectorTableRAM @@ -984,399 +987,397 @@ address name 1fffc000 __start___llvm_prf_cnts 1fffc000 __stop___llvm_prf_cnts 1fffc000 aName0x1C32 -1fffc100 aName0x1C33 -1fffc200 asEntryDesc0x1C3x -1fffc2c8 cAbortCode -1fffc340 aName0x60C2 -1fffc386 aName0xF000 -1fffc3c8 aName0x607D -1fffc408 aName0x10F1 -1fffc447 aName0x1018 -1fffc480 asEntryDesc0x1600 -1fffc4a4 asEntryDesc0x1A00 -1fffc4c8 cBitMask -1fffc4e8 aName0x605C -1fffc506 asEntryDesc0x1018 -1fffc524 aName0xF030 -1fffc541 aName0x6061 -1fffc55c asEntryDesc0x1601 -1fffc574 asEntryDesc0x1602 -1fffc58c asEntryDesc0x1A01 -1fffc5a4 asEntryDesc0x1A02 -1fffc5bc aName0x605A -1fffc5d2 aName0x6064 -1fffc5e8 aName0x606C -1fffc5fe aName0x6085 -1fffc614 aName0x6502 -1fffc62a aName0x605B -1fffc63f aName0xF050 -1fffc654 aName0x605E -1fffc668 aName0x6077 -1fffc67c aName0xF010 -1fffc690 aName0x10F8 -1fffc6a3 aName0x6060 -1fffc6b6 aName0x1C00 -1fffc6c8 asEntryDesc0x10F1 -1fffc6da asEntryDesc0x607D -1fffc6ec asEntryDesc0x60C2 -1fffc6fe asEntryDesc0xF000 -1fffc710 asEntryDesc0xF010 -1fffc722 asEntryDesc0xF030 -1fffc734 asEntryDesc0xF050 -1fffc746 aName0x1009 -1fffc757 aName0x100A -1fffc768 aName0x1600 -1fffc778 aName0x1A00 -1fffc788 aName0x607A -1fffc798 aName0x60FF -1fffc7a8 aName0x1001 -1fffc7b7 aName0x1C12 -1fffc7c4 aName0x1C13 -1fffc7d1 aName0x6040 -1fffc7de aName0x1000 -1fffc7ea aName0x1008 -1fffc7f6 aName0x1601 -1fffc802 aName0x1602 -1fffc80e aName0x1A01 -1fffc81a aName0x1A02 -1fffc826 aName0x6041 -1fffc832 asEntryDesc0x1C00 -1fffc83e asPDOAssignEntryDesc -1fffc84a aName0x603F -1fffc856 sEntryDesc0x1000 -1fffc85c sEntryDesc0x1001 -1fffc862 sEntryDesc0x1008 -1fffc868 sEntryDesc0x1009 -1fffc86e sEntryDesc0x100A -1fffc874 sEntryDesc0x10F8 -1fffc87a sEntryDesc0x603F -1fffc880 sEntryDesc0x6040 -1fffc886 sEntryDesc0x6041 -1fffc88c sEntryDesc0x605A -1fffc892 sEntryDesc0x605B -1fffc898 sEntryDesc0x605C -1fffc89e sEntryDesc0x605E -1fffc8a4 sEntryDesc0x6060 -1fffc8aa sEntryDesc0x6061 -1fffc8b0 sEntryDesc0x6064 -1fffc8b6 sEntryDesc0x606C -1fffc8bc sEntryDesc0x6077 -1fffc8c2 sEntryDesc0x607A -1fffc8c8 sEntryDesc0x6085 -1fffc8ce sEntryDesc0x60FF -1fffc8d4 sEntryDesc0x6502 -1fffc8dd APPL_GetDeviceID -1fffc8e0 DefCiA402AxisObjDic -1fffccc8 GenObjDic -1fffcea8 ApplicationObjDic -1fffcfc0 DefCiA402ObjectValues -1fffd070 acDevicename -1fffd089 acHardwareversion -1fffd09d acSoftwareversion -1fffd0b1 bSdoInWork -1fffd0b2 sModulardeviceprofile -1fffd0b8 u64Timestamp -1fffd0c0 u32Devicetype -1fffd0c4 u16ErrorRegister -1fffd0c8 ObjDicList -1fffd0cc sIdentity -1fffd0e0 aSubindexDesc -1fffd0ed SMActivate -1fffd0ee EepromLoaded -1fffd0f0 sConfiguredModuleIdentList -1fffd0fc sDetectedModuleIdentList -1fffd108 sErrorSettings -1fffd114 sModuleProfileInfo -1fffd120 bInitFinished -1fffd12c _lock -1fffd130 _unlock -1fffd13c sRxPDOassign -1fffd142 sSyncmanagertype -1fffd148 sTxPDOassign -1fffd150 LocalAxes -1fffd2f0 aPdInputData -1fffd334 aPdOutputData -1fffd378 sSyncManInPar -1fffd3bc sSyncManOutPar -1fffd400 sMbxReceiveQueue -1fffd434 sMbxSendQueue -1fffd468 aSdoInfoHeader -1fffd478 SyncManInfo -1fffd480 nSdoSegBytesToHandle -1fffd484 nSdoSegCompleteSize -1fffd488 pAPPL_MainLoop -1fffd48c pCoeSendStored -1fffd490 pSdoInfoObjEntry -1fffd494 pSdoPendFunc -1fffd498 pSdoResStored -1fffd49c pSdoSegData -1fffd4a0 pSdoSegObjEntry -1fffd4a4 pStoreData -1fffd4a8 psReadMbx -1fffd4ac psRepeatMbx -1fffd4b0 psStoreMbx -1fffd4b4 psWriteMbx -1fffd4b8 u32CheckForDcOverrunCnt -1fffd4bc u32CycleTimeStartValue -1fffd4c0 u32LastDc32Value -1fffd4c4 u32MinCycleTimeStartValue -1fffd4c8 u32MinCycleTimeValue -1fffd4cc u32StoreDataSize -1fffd4d0 u32SystemTimeReadFailure -1fffd4d4 EcatWdValue -1fffd4d6 EsmTimeoutCounter -1fffd4d8 LatchInputSync0Counter -1fffd4da LatchInputSync0Value -1fffd4dc Sync0WdCounter -1fffd4de Sync0WdValue -1fffd4e0 Sync1WdCounter -1fffd4e2 Sync1WdValue -1fffd4e4 i16WaitForPllRunningCnt -1fffd4e6 i16WaitForPllRunningTimeout -1fffd4e8 nEcatStateTrans -1fffd4ea nEscAddrInputData -1fffd4ec nEscAddrOutputData -1fffd4ee nMaxEscAddress -1fffd4f0 nPdInputSize -1fffd4f2 nPdOutputSize -1fffd4f4 nSdoInfoFragmentsLeft -1fffd4f6 nSdoInfoIndex -1fffd4f8 nSdoSegIndex -1fffd4fa sCycleDiag -1fffd4fc u16ALEventMask -1fffd4fe u16EscAddrReceiveMbx -1fffd500 u16EscAddrSendMbx -1fffd502 u16LocalErrorCode -1fffd504 u16ReceiveMbxSize -1fffd506 u16SendMbxSize -1fffd508 u16SmSync0Counter -1fffd50a u16SmSync0Value -1fffd50c u16StoreIndex -1fffd50e b32BitDc -1fffd50f b3BufferMode -1fffd510 bApplEsmPending -1fffd511 bDcRunning -1fffd512 bDcSyncActive -1fffd513 bEcatFirstOutputsReceived -1fffd514 bEcatInputUpdateRunning -1fffd515 bEcatOutputUpdateRunning -1fffd516 bEcatWaitForAlControlRes -1fffd517 bEscIntEnabled -1fffd518 bEtherCATErrorLed -1fffd519 bEtherCATRunLed -1fffd51a bExplicitDevIdRequested -1fffd51b bLocalErrorFlag -1fffd51c bMbxRepeatToggle -1fffd51d bMbxRunning -1fffd51e bMinCycleTimeMeasurementStarted -1fffd51f bNoMbxMemoryAvailable -1fffd520 bReceiveMbxIsLocked -1fffd521 bRunApplication -1fffd522 bSdoSegAccess -1fffd523 bSdoSegFollows -1fffd524 bSdoSegLastToggle -1fffd525 bSendMbxIsFull -1fffd526 bSmSyncSequenceValid -1fffd527 bStoreCompleteAccess -1fffd528 bSyncSetByUser -1fffd529 bWdTrigger -1fffd52a nAlStatus -1fffd52b nMaxSyncMan -1fffd52c nSdoSegService -1fffd52d nSdoSegSubindex -1fffd52e u8EcatErrorLed -1fffd52f u8EcatRunLed -1fffd530 u8MailboxSendReqStored -1fffd531 u8MbxReadCounter -1fffd532 u8MbxWriteCounter -1fffd533 u8PendingSdo -1fffd534 u8StoreSubindex -1fffd535 u8dummy -1fffd538 __stack -1fffd738 __STACK_END -1fffd739 StartInputHandler -1fffdbe5 OBJ_Read -1fffdf5f OBJ_GetObjectList -1fffdffb APPL_StartMailboxHandler +1fffc108 aName0x1C33 +1fffc210 asEntryDesc0x1C3x +1fffc2d8 cAbortCode +1fffc350 aName0x60C2 +1fffc3a5 aName0x1018 +1fffc3ec aName0xF000 +1fffc42e aName0x607D +1fffc46e aName0x10F1 +1fffc4ae asEntryDesc0x1600 +1fffc4d2 asEntryDesc0x1A00 +1fffc4f6 cBitMask +1fffc516 aName0x1009 +1fffc534 aName0x100A +1fffc552 aName0x605C +1fffc570 asEntryDesc0x1018 +1fffc58e aName0xF030 +1fffc5ab aName0x605E +1fffc5c6 aName0x6061 +1fffc5e1 aName0x6085 +1fffc5fa asEntryDesc0x1601 +1fffc612 asEntryDesc0x1602 +1fffc62a asEntryDesc0x1A01 +1fffc642 asEntryDesc0x1A02 +1fffc65a aName0x605A +1fffc671 aName0x6064 +1fffc687 aName0x606C +1fffc69d aName0x6502 +1fffc6b3 aName0x605B +1fffc6c8 aName0xF050 +1fffc6dd aName0x6077 +1fffc6f1 aName0xF010 +1fffc705 aName0x10F8 +1fffc718 aName0x6060 +1fffc72b aName0x1C00 +1fffc73e asEntryDesc0x10F1 +1fffc750 asEntryDesc0x607D +1fffc762 asEntryDesc0x60C2 +1fffc774 asEntryDesc0xF000 +1fffc786 asEntryDesc0xF010 +1fffc798 asEntryDesc0xF030 +1fffc7aa asEntryDesc0xF050 +1fffc7bc aName0x1600 +1fffc7cc aName0x1A00 +1fffc7dc aName0x607A +1fffc7ec aName0x60FF +1fffc7fc aName0x1001 +1fffc80b aName0x1C12 +1fffc818 aName0x1C13 +1fffc825 aName0x6040 +1fffc832 aName0x1000 +1fffc83e aName0x1008 +1fffc84a aName0x1601 +1fffc856 aName0x1602 +1fffc862 aName0x1A01 +1fffc86e aName0x1A02 +1fffc87a aName0x6041 +1fffc886 asEntryDesc0x1C00 +1fffc892 asPDOAssignEntryDesc +1fffc89e aName0x603F +1fffc8aa sEntryDesc0x1000 +1fffc8b0 sEntryDesc0x1001 +1fffc8b6 sEntryDesc0x1008 +1fffc8bc sEntryDesc0x1009 +1fffc8c2 sEntryDesc0x100A +1fffc8c8 sEntryDesc0x10F8 +1fffc8ce sEntryDesc0x603F +1fffc8d4 sEntryDesc0x6040 +1fffc8da sEntryDesc0x6041 +1fffc8e0 sEntryDesc0x605A +1fffc8e6 sEntryDesc0x605B +1fffc8ec sEntryDesc0x605C +1fffc8f2 sEntryDesc0x605E +1fffc8f8 sEntryDesc0x6060 +1fffc8fe sEntryDesc0x6061 +1fffc904 sEntryDesc0x6064 +1fffc90a sEntryDesc0x606C +1fffc910 sEntryDesc0x6077 +1fffc916 sEntryDesc0x607A +1fffc91c sEntryDesc0x6085 +1fffc922 sEntryDesc0x60FF +1fffc928 sEntryDesc0x6502 +1fffc935 APPL_StartMailboxHandler +1fffc938 DefCiA402AxisObjDic +1fffcd20 GenObjDic +1fffcf00 ApplicationObjDic +1fffd018 DefCiA402ObjectValues +1fffd0c8 acDevicename +1fffd0e1 acHardwareversion +1fffd0f5 acSoftwareversion +1fffd10a sModulardeviceprofile +1fffd110 u64Timestamp +1fffd118 u32Devicetype +1fffd11c u16ErrorRegister +1fffd120 ObjDicList +1fffd124 sIdentity +1fffd138 aSubindexDesc +1fffd145 SMActivate +1fffd146 EepromLoaded +1fffd148 sConfiguredModuleIdentList +1fffd154 sDetectedModuleIdentList +1fffd160 sErrorSettings +1fffd16c sModuleProfileInfo +1fffd178 bInitFinished +1fffd184 _lock +1fffd188 _unlock +1fffd194 sRxPDOassign +1fffd19a sSyncmanagertype +1fffd1a0 sTxPDOassign +1fffd1a8 LocalAxes +1fffd348 aPdInputData +1fffd38c aPdOutputData +1fffd3d0 sSyncManInPar +1fffd414 sSyncManOutPar +1fffd458 sMbxReceiveQueue +1fffd48c sMbxSendQueue +1fffd4c0 aSdoInfoHeader +1fffd4d0 SyncManInfo +1fffd4d8 pAPPL_CoeReadInd +1fffd4dc pAPPL_CoeWriteInd +1fffd4e0 pAPPL_FoeError +1fffd4e4 pAPPL_FoeRead +1fffd4e8 pAPPL_FoeReadData +1fffd4ec pAPPL_FoeWrite +1fffd4f0 pAPPL_FoeWriteData +1fffd4f4 pAPPL_MainLoop +1fffd4f8 pCoeSendStored +1fffd4fc pFoeSendStored +1fffd500 pSdoInfoObjEntry +1fffd504 psReadMbx +1fffd508 psRepeatMbx +1fffd50c psStoreMbx +1fffd510 psWriteMbx +1fffd514 u32CheckForDcOverrunCnt +1fffd518 u32CycleTimeStartValue +1fffd51c u32FileOffset +1fffd520 u32LastDc32Value +1fffd524 u32LastFileOffset +1fffd528 u32MinCycleTimeStartValue +1fffd52c u32MinCycleTimeValue +1fffd530 u32PacketNo +1fffd534 u32SystemTimeReadFailure +1fffd538 EcatWdValue +1fffd53a EsmTimeoutCounter +1fffd53c LatchInputSync0Counter +1fffd53e LatchInputSync0Value +1fffd540 Sync0WdCounter +1fffd542 Sync0WdValue +1fffd544 Sync1WdCounter +1fffd546 Sync1WdValue +1fffd548 i16WaitForPllRunningCnt +1fffd54a i16WaitForPllRunningTimeout +1fffd54c nEcatStateTrans +1fffd54e nEscAddrInputData +1fffd550 nEscAddrOutputData +1fffd552 nMaxEscAddress +1fffd554 nPdInputSize +1fffd556 nPdOutputSize +1fffd558 nSdoInfoIndex +1fffd55a sCycleDiag +1fffd55c u16ALEventMask +1fffd55e u16EscAddrReceiveMbx +1fffd560 u16EscAddrSendMbx +1fffd562 u16FileAccessState +1fffd564 u16FoeMaxSendBlockSize +1fffd566 u16LocalErrorCode +1fffd568 u16ReceiveMbxSize +1fffd56a u16SendMbxSize +1fffd56c u16SmSync0Counter +1fffd56e u16SmSync0Value +1fffd570 b32BitDc +1fffd571 b3BufferMode +1fffd572 bApplEsmPending +1fffd573 bDcRunning +1fffd574 bDcSyncActive +1fffd575 bEcatFirstOutputsReceived +1fffd576 bEcatInputUpdateRunning +1fffd577 bEcatOutputUpdateRunning +1fffd578 bEcatWaitForAlControlRes +1fffd579 bEscIntEnabled +1fffd57a bEtherCATErrorLed +1fffd57b bEtherCATRunLed +1fffd57c bMbxRepeatToggle +1fffd57d bMbxRunning +1fffd57e bMinCycleTimeMeasurementStarted +1fffd57f bNoMbxMemoryAvailable +1fffd580 bReceiveMbxIsLocked +1fffd581 bRunApplication +1fffd582 bSendMbxIsFull +1fffd583 bSmSyncSequenceValid +1fffd584 bSyncSetByUser +1fffd585 bWdTrigger +1fffd586 nAlStatus +1fffd587 nMaxSyncMan +1fffd588 u8EcatErrorLed +1fffd589 u8EcatRunLed +1fffd58a u8LocalErrorState +1fffd58b u8MailboxSendReqStored +1fffd58c u8MbxReadCounter +1fffd58d u8MbxWriteCounter +1fffd58e u8dummy +1fffd590 __stack +1fffd790 __STACK_END +1fffd791 StartInputHandler +1fffdc5b OBJ_Read +1fffdf45 CheckSyncTypeValue 1fffe000 _sys_memory -1ffff001 OBJ_Write -1ffff46f SDOS_SdoInd -1ffff8ab AL_ControlInd -1ffffcc9 CiA402_Init -1fffff8d SysCtl_resetPeripheral -1ffffffd APPL_AckErrorInd +1ffff001 AL_ControlInd +1ffff41f OBJ_Write +1ffff7cb CiA402_Init +1ffffa8f FOE_ServiceInd +1ffffcc5 APPL_GenerateMapping +1ffffef7 APPL_AckErrorInd +1ffffef9 aligned_alloc +1ffffef9 memalign +1ffffff9 APPL_StartOutputHandler +1ffffffd COE_Main 20000809 SDOS_SdoInfoInd -20000aa1 PDI_Isr -20000be1 APPL_Application +20000a3b ECAT_SetLedIndication +20000bfb APPL_StopInputHandler +20000bff ESC_releaseHW 20000c00 vectorTableRAM -20000d41 APPL_GenerateMapping -2000119b CheckSmSettings -200013a3 CiA402_StateMachine -2000159f AL_ControlRes -20001771 ECAT_SetLedIndication -20001931 __aeabi_dsub -2000193b __aeabi_dadd -20001ae7 Write0xF030 -20001c57 ECAT_Init -20001d91 Sync0_Isr -20001eab ECAT_Main -20001fb7 ESC_releaseHW -20001fb9 aligned_alloc -20001fb9 memalign -200020b9 StopInputHandler -200021b7 CiA402_Application -200022b3 CiA402_DummyMotionControl -200023af MBX_CheckAndCopyMailbox -200024ab __aeabi_dmul -200025a7 COE_ObjInit -2000269f OBJ_GetEntryOffset -20002797 DC_CheckWatchdog -2000288d MBX_StopMailboxHandler -20002983 ESC_initHW -20002b65 SDOS_SdoRes -20002c4f _nop -20002c51 free -20002d35 MainLoop -20002e17 MBX_Init -20002eef APPL_StartInputHandler -20002fb9 OBJ_GetDesc -20003075 CheckSyncTypeValue -2000312f OBJ_GetObjectLength -200031e9 SODS_ClearPendingResponse -200032a1 COE_Main -20003357 SdoRes -2000340d MBX_CopyToSendMailbox -200034b7 MBX_StartMailboxHandler -20003559 PDO_OutputMapping -200035fb SetALStatus -2000369d __aeabi_memcpy -2000369d __aeabi_memcpy4 -2000369d __aeabi_memcpy8 -2000369d memcpy -20003739 APPL_OutputMapping -200037cf APPL_InputMapping -2000385d ECAT_CheckTimer -200038eb MBX_MailboxReadInd -20003971 PDO_InputMapping -200039f7 MBX_MailboxSendReq -20003a7d Interrupt_enable -20003afd MainInit -20003b7b CheckIfEcatError -20003bf5 __aeabi_fmul -20003c6f __aeabi_memclr -20003c6f __aeabi_memclr4 -20003c6f __aeabi_memclr8 -20003c71 __aeabi_memset -20003c71 __aeabi_memset4 -20003c71 __aeabi_memset8 -20003c77 memset -20003ce9 CM_enableAllPeripherals -20003d5f COE_SyncTimeStamp -20003e45 __TI_decompress_lzss -20003ead COE_AddObjectToDic -20003f11 MBX_MailboxRepeatReq -20003f73 StartOutputHandler -20003fd3 __aeabi_cfcmpeq -20003fd3 __aeabi_cfcmple -20004033 OBJ_GetNoOfObjects -20004091 CiA402_DeallocateAxis -200040ed ESCSS_configureSync0Connections -20004149 ESCSS_configureSync1Connections -200041a5 Interrupt_registerHandler -20004201 MBX_MailboxWriteInd -2000425d HandleCycleTimeMeasurement -200042ad Read0x10F8 -200042fb MBX_Main -20004345 SysCtl_enablePeripheral -2000438d __aeabi_d2iz -200043d5 COE_UpdateSyncErrorStatus -2000441b Sync1_Isr -20004461 __TI_auto_init_nobinit_nopinit -200044a5 main -200044e9 COE_ContinueInd -2000452b ECAT_Application -20004569 COE_RemoveDicEntry -200045a5 ESCSS_configureEEPROMSize -200045df OBJ_CopyNumberToString -20004619 OBJ_GetEntryDesc -20004653 __aeabi_f2d -2000468b __aeabi_f2iz -200046c3 strncpy -200046f9 GetSystemTimeDelay -2000472d ESC_setLed -2000475f DisableSyncManChannel -2000478d EnableSyncManChannel -200047bb __aeabi_i2d -200047e9 COE_ObjDictionaryInit -20004815 PutInMbxQueue -20004841 CM_init -20004869 COE_ServiceInd -20004891 ESC_loadedCheckEEPROM -200048e1 GetOutOfMbxQueue -20004907 UpdateEEPROMLoadedState -2000492d AddObjectsToObjDictionary -20004951 CiA402_LocalError -20004999 _c_int00_noargs -200049bd __aeabi_ui2f -200049e1 COE_ClearObjDictionary -20004a01 ESC_clearTimer -20004a1f GetSyncMan -20004a3b ResetALEventMask -20004a57 SetALEventMask -20004a73 __TI_zero_init_nomemset -20004aad ESC_applicationLayerHandler -20004ac7 ESC_applicationSync0Handler -20004ae1 ESC_applicationSync1Handler -20004afb OBJ_GetObjectHandle -20004b15 COE_Init -20004b2d StopOutputHandler -20004b45 strlen -20004b59 MailboxServiceInd -20004b6b ESC_writeBlockISR -20004b7b BackToInitTransition -20004b89 ESC_getTimer -20004b97 __TI_decompress_none -20004ba5 COE_GetObjectDictionary -20004bb1 CiA402_TransitionAction -20004bbd ESC_readBlock -20004bc9 ESC_readBlockISR -20004bd5 ESC_readByte -20004be1 ESC_readDWord -20004bed ESC_readWord -20004bf9 ESC_writeBlock -20004c05 ESC_writeByte -20004c11 ESC_writeDWord -20004c1d ESC_writeWord -20004c29 ESC_readByteISR -20004c33 ESC_readDWordISR -20004c3d ESC_readWordISR -20004c47 ESC_timerIncPerMilliSec -20004c51 ESC_writeByteISR -20004c5b ESC_writeDWordISR -20004c65 ESC_writeWordISR -20004c6f ESC_resetESC -20004c77 malloc -20004c7f APPL_StartOutputHandler -20004c83 APPL_StopInputHandler -20004c87 APPL_StopMailboxHandler -20004c8b APPL_StopOutputHandler -20004c8f F2838XCM_strcpy -20004c93 OBJ_GetObjDesc -20004c97 _system_pre_init -20004c9b C$$EXIT -20004c9b abort -20004ca0 __TI_static_base__ -20004fe0 __TI_Handler_Table_Base -20004fec __TI_Handler_Table_Limit -20004ff8 __TI_CINIT_Base -20005008 __TI_CINIT_Limit +20000d41 CheckSmSettings +20000f49 AL_ControlRes +2000114d CiA402_StateMachine +20001349 __aeabi_dsub +20001353 __aeabi_dadd +200014ff PDI_Isr +20001679 SDOS_SdoInd +200017d5 Write0xF030 +20001927 ECAT_Init +20001a57 Sync0_Isr +20001b87 ECAT_Main +20001c9f OBJ_GetEntryOffset +20001dad StopInputHandler +20001eab CiA402_Application +20001fa7 CiA402_DummyMotionControl +200020a3 MBX_CheckAndCopyMailbox +2000219f __aeabi_dmul +2000229b DC_CheckWatchdog +20002391 MBX_StopMailboxHandler +20002487 ESC_initHW +20002579 MBX_CopyToSendMailbox +2000266b MainLoop +2000275b _nop +2000275d free +20002841 MBX_Init +20002919 APPL_StartInputHandler +200029e3 MainInit +20002aa7 OBJ_GetDesc +20002b63 MBX_StartMailboxHandler +20002c11 SdoRes +20002cbf COE_ObjInit +20002d65 MBX_MailboxReadInd +20002e09 PDO_OutputMapping +20002eab OBJ_GetObjectList +20002f47 __aeabi_memcpy +20002f47 __aeabi_memcpy4 +20002f47 __aeabi_memcpy8 +20002f47 memcpy +20002fe3 APPL_OutputMapping +20003079 APPL_InputMapping +20003107 ECAT_CheckTimer +20003195 PDO_InputMapping +2000321b MBX_MailboxSendReq +200032a1 Interrupt_enable +20003321 CheckIfEcatError +2000339b __aeabi_fmul +20003415 __aeabi_memclr +20003415 __aeabi_memclr4 +20003415 __aeabi_memclr8 +20003417 __aeabi_memset +20003417 __aeabi_memset4 +20003417 __aeabi_memset8 +2000341d memset +2000348f CM_enableAllPeripherals +20003505 COE_SyncTimeStamp +2000357b StartOutputHandler +200035ed SysCtl_resetPeripheral +200036cd SetALStatus +2000373b __TI_decompress_lzss +200037a3 COE_AddObjectToDic +20003807 MBX_MailboxRepeatReq +20003869 __aeabi_cfcmpeq +20003869 __aeabi_cfcmple +200038c9 OBJ_GetNoOfObjects +20003927 CiA402_DeallocateAxis +20003985 ESCSS_configureSync0Connections +200039e1 ESCSS_configureSync1Connections +20003a3d Interrupt_registerHandler +20003a99 MBX_MailboxWriteInd +20003af5 OBJ_GetObjectLength +20003b4d Sync1_Isr +20003b9f HandleCycleTimeMeasurement +20003bef main +20003c3f Read0x10F8 +20003c8d MBX_Main +20003cd5 SysCtl_enablePeripheral +20003d1d __aeabi_d2iz +20003d65 COE_UpdateSyncErrorStatus +20003dab COE_ContinueInd +20003df1 __TI_auto_init_nobinit_nopinit +20003e35 FOE_Data +20003e73 COE_RemoveDicEntry +20003eaf ESCSS_configureEEPROMSize +20003ee9 OBJ_CopyNumberToString +20003f23 OBJ_GetEntryDesc +20003f5d __aeabi_f2d +20003f95 __aeabi_f2iz +20003fcd strncpy +20004003 GetSystemTimeDelay +20004037 ECAT_Application +20004069 ESC_setLed +2000409b DisableSyncManChannel +200040c9 EnableSyncManChannel +200040f7 __aeabi_i2d +20004125 COE_ObjDictionaryInit +20004151 PutInMbxQueue +2000417d CM_init +200041a5 COE_ServiceInd +200041cd ESC_loadedCheckEEPROM +200041f5 FOE_Ack +2000421d FOE_Read +2000426d GetOutOfMbxQueue +20004293 UpdateEEPROMLoadedState +200042b9 AddObjectsToObjDictionary +20004301 _c_int00_noargs +20004325 __aeabi_ui2f +20004349 FOE_Init +2000436b APPL_Application +2000438b COE_ClearObjDictionary +200043ab ESC_clearTimer +200043c9 FOE_Write +200043e7 FOE_ContinueInd +20004403 GetSyncMan +2000441f MailboxServiceInd +2000443b ResetALEventMask +20004457 SetALEventMask +20004473 __TI_zero_init_nomemset +200044ad ESC_applicationLayerHandler +200044c7 ESC_applicationSync0Handler +200044e1 ESC_applicationSync1Handler +200044fb OBJ_GetObjectHandle +20004515 StopOutputHandler +2000452d strlen +20004541 FOE_Error +20004553 ESC_writeBlockISR +20004563 BackToInitTransition +20004571 COE_Init +2000457f ESC_getTimer +2000458d __TI_decompress_none +2000459b COE_GetObjectDictionary +200045a7 CiA402_TransitionAction +200045b3 ESC_readBlock +200045bf ESC_readBlockISR +200045cb ESC_readByte +200045d7 ESC_readDWord +200045e3 ESC_readWord +200045ef ESC_writeBlock +200045fb ESC_writeByte +20004607 ESC_writeDWord +20004613 ESC_writeWord +2000461f ESC_readByteISR +20004629 ESC_readDWordISR +20004633 ESC_readWordISR +2000463d ESC_timerIncPerMilliSec +20004647 ESC_writeByteISR +20004651 ESC_writeDWordISR +2000465b ESC_writeWordISR +20004665 ESC_resetESC +2000466d FOE_Busy +20004675 malloc +2000467d APPL_StopMailboxHandler +20004681 APPL_StopOutputHandler +20004685 F2838XCM_strcpy +20004689 OBJ_GetObjDesc +2000468d _system_pre_init +20004691 C$$EXIT +20004691 abort +20004698 __TI_static_base__ +200049e0 __TI_Handler_Table_Base +200049ec __TI_Handler_Table_Limit +200049f8 __TI_CINIT_Base +20004a08 __TI_CINIT_Limit ffffffff __TI_pprof_out_hndl ffffffff __TI_prof_data_size ffffffff __TI_prof_data_start ffffffff __binit__ ffffffff __c_args__ ffffffff binit +UNDEFED DebugP_log UNDEFED __mpu_init UNDEFED _system_post_cinit -[399 symbols] +[397 symbols] diff --git a/RAM/f2838x_cm_cia402_solution.out b/RAM/f2838x_cm_cia402_solution.out deleted file mode 100644 index 0aa6b1c9fe72d0dfea110239dd0527a35a9e6283..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 375332 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 MT{C}WLi8~DUnmf3(EtDd diff --git a/RAM/f2838x_cm_cia402_solution_linkInfo.xml b/RAM/f2838x_cm_cia402_solution_linkInfo.xml index c8764f0..5525dc5 100644 --- a/RAM/f2838x_cm_cia402_solution_linkInfo.xml +++ b/RAM/f2838x_cm_cia402_solution_linkInfo.xml @@ -2,254 +2,278 @@ TI ARM Linker PC v20.2.7.LTS Copyright (c) 1996-2018 Texas Instruments Incorporated - 0x65bb9d30 - 0x0 + 0x65bca52d + 0x1 f2838x_cm_cia402_solution.out _c_int00_noargs -

0x20004999
+
0x20004301
+ .\ + object + F2838x CM EtherCAT Slave.obj + F2838x CM EtherCAT Slave.obj + + .\ object cia402appl.obj cia402appl.obj - + .\ object coeappl.obj coeappl.obj - + .\ object ecatappl.obj ecatappl.obj - + .\ object ecatcoe.obj ecatcoe.obj - + + .\ + object + ecatfoe.obj + ecatfoe.obj + + .\ object ecatslv.obj ecatslv.obj - + .\ object ethercat_slave_cm_hal.obj ethercat_slave_cm_hal.obj - + .\ object f2838x_cm_hw.obj f2838x_cm_hw.obj - + .\ object f2838x_cm_system.obj f2838x_cm_system.obj - + + .\ + object + foeappl.obj + foeappl.obj + + .\ object mailbox.obj mailbox.obj - + .\ object objdef.obj objdef.obj - + .\ object sdoserv.obj sdoserv.obj - + .\ object startup_cm.obj startup_cm.obj - + + .\ + object + tiescfoe.obj + tiescfoe.obj + + .\device\ object cm.obj cm.obj - + object <internal> <internal> - + C:\ti\c2000\C2000Ware_5_01_00_00\driverlib\f2838x\driverlib_cm\ccs\Debug\ archive driverlib_cm.lib escss.obj - + C:\ti\c2000\C2000Ware_5_01_00_00\driverlib\f2838x\driverlib_cm\ccs\Debug\ archive driverlib_cm.lib interrupt.obj - + C:\ti\c2000\C2000Ware_5_01_00_00\driverlib\f2838x\driverlib_cm\ccs\Debug\ archive driverlib_cm.lib sysctl.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib fd_add_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib fd_mul_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib fd_toi_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib fs_cmp_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib fs_mul_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib fs_tod_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib fs_toi_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib i_tofd_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib memcpy_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib u_tofs_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib memset_t2.asm.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib copy_zero_init.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib copy_decompress_none.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib copy_decompress_lzss.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib memory.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib strlen.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib strncpy.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib boot_cortex_m.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib autoinit.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib pre_init.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib cpy_tbl.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib exit.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib _lock.c.obj - + C:\ti\ccs1240\ccs\tools\compiler\ti-cgt-arm_20.2.7.LTS\lib\ archive rtsv7M4_T_le_eabi.lib @@ -262,1199 +286,1220 @@ 0x20000800 0x20000800 0x6 - + .vtable:retain 0x20000c00 0x20000c00 0x140 - + - - .text:APPL_GetDeviceID - 0x1fffc8dc - 0x1fffc8dc - 0x4 - - - - .text:StartInputHandler - 0x1fffd738 - 0x1fffd738 - 0x4ac - - - - .text:OBJ_Read - 0x1fffdbe4 - 0x1fffdbe4 - 0x37a - - - - .text:OBJ_GetObjectList - 0x1fffdf5e - 0x1fffdf5e - 0x9c - - - + .text:APPL_StartMailboxHandler - 0x1fffdffa - 0x1fffdffa + 0x1fffc934 + 0x1fffc934 0x4 - - .text:OBJ_Write + + .text:StartInputHandler + 0x1fffd790 + 0x1fffd790 + 0x4ca + + + + .text:OBJ_Read + 0x1fffdc5a + 0x1fffdc5a + 0x2ea + + + + .text:CheckSyncTypeValue + 0x1fffdf44 + 0x1fffdf44 + 0xba + + + + .text:AL_ControlInd 0x1ffff000 0x1ffff000 - 0x46e - - - - .text:SDOS_SdoInd - 0x1ffff46e - 0x1ffff46e - 0x43c - - - - .text:AL_ControlInd - 0x1ffff8aa - 0x1ffff8aa 0x41e - + - + + .text:OBJ_Write + 0x1ffff41e + 0x1ffff41e + 0x3ac + + + .text:CiA402_Init - 0x1ffffcc8 - 0x1ffffcc8 + 0x1ffff7ca + 0x1ffff7ca 0x2c4 + + + + .text:FOE_ServiceInd + 0x1ffffa8e + 0x1ffffa8e + 0x236 + + + + .text:APPL_GenerateMapping + 0x1ffffcc4 + 0x1ffffcc4 + 0x232 + + + + .text:APPL_AckErrorInd + 0x1ffffef6 + 0x1ffffef6 + 0x2 - - .text:SysCtl_resetPeripheral - 0x1fffff8c - 0x1fffff8c - 0x70 - + + .text:aligned_alloc + 0x1ffffef8 + 0x1ffffef8 + 0x100 + - - .text:APPL_AckErrorInd + + .text:APPL_StartOutputHandler + 0x1ffffff8 + 0x1ffffff8 + 0x4 + + + + .text:COE_Main 0x1ffffffc 0x1ffffffc 0x2 - + - + .text:SDOS_SdoInfoInd 0x20000808 0x20000808 - 0x298 - + 0x232 + + + + .text:ECAT_SetLedIndication + 0x20000a3a + 0x20000a3a + 0x1c0 + + + + .text:APPL_StopInputHandler + 0x20000bfa + 0x20000bfa + 0x4 + + + + .text:ESC_releaseHW + 0x20000bfe + 0x20000bfe + 0x2 + + + + .text:CheckSmSettings + 0x20000d40 + 0x20000d40 + 0x208 + + + + .text:AL_ControlRes + 0x20000f48 + 0x20000f48 + 0x204 + + + + .text:CiA402_StateMachine + 0x2000114c + 0x2000114c + 0x1fc + + + + .text + 0x20001348 + 0x20001348 + 0x1b6 + .text:PDI_Isr - 0x20000aa0 - 0x20000aa0 - 0x140 - + 0x200014fe + 0x200014fe + 0x17a + - - .text:APPL_Application - 0x20000be0 - 0x20000be0 - 0x20 - + + .text:SDOS_SdoInd + 0x20001678 + 0x20001678 + 0x15c + - - .text:APPL_GenerateMapping - 0x20000d40 - 0x20000d40 - 0x232 - - - - .text:SdoDownloadSegmentInd - 0x20000f72 - 0x20000f72 - 0x228 - - - - .text:CheckSmSettings - 0x2000119a - 0x2000119a - 0x208 - - - - .text:CiA402_StateMachine - 0x200013a2 - 0x200013a2 - 0x1fc - - - - .text:AL_ControlRes - 0x2000159e - 0x2000159e - 0x1d2 - - - - .text:ECAT_SetLedIndication - 0x20001770 - 0x20001770 - 0x1c0 - - - - .text - 0x20001930 - 0x20001930 - 0x1b6 - - - + .text:Write0xF030 - 0x20001ae6 - 0x20001ae6 - 0x170 - + 0x200017d4 + 0x200017d4 + 0x152 + - + .text:ECAT_Init - 0x20001c56 - 0x20001c56 - 0x13a - + 0x20001926 + 0x20001926 + 0x130 + .text:Sync0_Isr - 0x20001d90 - 0x20001d90 - 0x11a - + 0x20001a56 + 0x20001a56 + 0x130 + - + .text:ECAT_Main + 0x20001b86 + 0x20001b86 + 0x118 + + + + .text:OBJ_GetEntryOffset + 0x20001c9e + 0x20001c9e + 0x10e + + + + .text:StopInputHandler + 0x20001dac + 0x20001dac + 0xfe + + + + .text:CiA402_Application 0x20001eaa 0x20001eaa - 0x10c - - - - .text:ESC_releaseHW - 0x20001fb6 - 0x20001fb6 - 0x2 - - - - .text:aligned_alloc - 0x20001fb8 - 0x20001fb8 - 0x100 - - - - .text:StopInputHandler - 0x200020b8 - 0x200020b8 - 0xfe - - - - .text:CiA402_Application - 0x200021b6 - 0x200021b6 0xfc - - - - .text:CiA402_DummyMotionControl - 0x200022b2 - 0x200022b2 - 0xfc - - - - .text:MBX_CheckAndCopyMailbox - 0x200023ae - 0x200023ae - 0xfc - - - - .text - 0x200024aa - 0x200024aa - 0xfc - - - - .text:COE_ObjInit - 0x200025a6 - 0x200025a6 - 0xf8 - - .text:OBJ_GetEntryOffset - 0x2000269e - 0x2000269e - 0xf8 - + + .text:CiA402_DummyMotionControl + 0x20001fa6 + 0x20001fa6 + 0xfc + - + + .text:MBX_CheckAndCopyMailbox + 0x200020a2 + 0x200020a2 + 0xfc + + + + .text + 0x2000219e + 0x2000219e + 0xfc + + + .text:DC_CheckWatchdog - 0x20002796 - 0x20002796 + 0x2000229a + 0x2000229a 0xf6 - + - + .text:MBX_StopMailboxHandler - 0x2000288c - 0x2000288c + 0x20002390 + 0x20002390 0xf6 - + .text:ESC_initHW - 0x20002982 - 0x20002982 + 0x20002486 + 0x20002486 0xf2 - + - - .text:SdoUploadSegmentInd - 0x20002a74 - 0x20002a74 - 0xf0 - + + .text:MBX_CopyToSendMailbox + 0x20002578 + 0x20002578 + 0xf2 + - - .text:SDOS_SdoRes - 0x20002b64 - 0x20002b64 - 0xea - - - - .text:_nop - 0x20002c4e - 0x20002c4e - 0x2 - - - - .text:free - 0x20002c50 - 0x20002c50 - 0xe4 - - - + .text:MainLoop - 0x20002d34 - 0x20002d34 - 0xe2 - + 0x2000266a + 0x2000266a + 0xf0 + - + + .text:_nop + 0x2000275a + 0x2000275a + 0x2 + + + + .text:free + 0x2000275c + 0x2000275c + 0xe4 + + + .text:MBX_Init - 0x20002e16 - 0x20002e16 + 0x20002840 + 0x20002840 0xd8 - + - + .text:APPL_StartInputHandler - 0x20002eee - 0x20002eee + 0x20002918 + 0x20002918 0xca - - - - .text:OBJ_GetDesc - 0x20002fb8 - 0x20002fb8 - 0xbc - - - - .text:CheckSyncTypeValue - 0x20003074 - 0x20003074 - 0xba - - - - .text:OBJ_GetObjectLength - 0x2000312e - 0x2000312e - 0xba - - - - .text:SODS_ClearPendingResponse - 0x200031e8 - 0x200031e8 - 0xb8 - - - - .text:COE_Main - 0x200032a0 - 0x200032a0 - 0xb6 - - .text:SdoRes - 0x20003356 - 0x20003356 - 0xb6 - + + .text:MainInit + 0x200029e2 + 0x200029e2 + 0xc4 + - - .text:MBX_CopyToSendMailbox - 0x2000340c - 0x2000340c - 0xaa - + + .text:OBJ_GetDesc + 0x20002aa6 + 0x20002aa6 + 0xbc + - + .text:MBX_StartMailboxHandler - 0x200034b6 - 0x200034b6 - 0xa2 - + 0x20002b62 + 0x20002b62 + 0xae + + + + .text:SdoRes + 0x20002c10 + 0x20002c10 + 0xae + + + + .text:COE_ObjInit + 0x20002cbe + 0x20002cbe + 0xa6 + + + + .text:MBX_MailboxReadInd + 0x20002d64 + 0x20002d64 + 0xa4 + .text:PDO_OutputMapping - 0x20003558 - 0x20003558 + 0x20002e08 + 0x20002e08 0xa2 - + - - .text:SetALStatus - 0x200035fa - 0x200035fa - 0xa2 - + + .text:OBJ_GetObjectList + 0x20002eaa + 0x20002eaa + 0x9c + .text - 0x2000369c - 0x2000369c + 0x20002f46 + 0x20002f46 0x9c - + - + .text:APPL_OutputMapping - 0x20003738 - 0x20003738 + 0x20002fe2 + 0x20002fe2 0x96 - + - + .text:APPL_InputMapping - 0x200037ce - 0x200037ce + 0x20003078 + 0x20003078 0x8e - + - + .text:ECAT_CheckTimer - 0x2000385c - 0x2000385c + 0x20003106 + 0x20003106 0x8e - + - - .text:MBX_MailboxReadInd - 0x200038ea - 0x200038ea - 0x86 - - - + .text:PDO_InputMapping - 0x20003970 - 0x20003970 + 0x20003194 + 0x20003194 0x86 - + - + .text:MBX_MailboxSendReq - 0x200039f6 - 0x200039f6 + 0x2000321a + 0x2000321a 0x84 - + .text:defaultISR - 0x20003a7a - 0x20003a7a + 0x2000329e + 0x2000329e 0x2 - + .text:Interrupt_enable - 0x20003a7c - 0x20003a7c + 0x200032a0 + 0x200032a0 0x80 - + - - .text:MainInit - 0x20003afc - 0x20003afc - 0x7e - - - + .text:CheckIfEcatError - 0x20003b7a - 0x20003b7a + 0x20003320 + 0x20003320 0x7a - + - + .text - 0x20003bf4 - 0x20003bf4 + 0x2000339a + 0x2000339a 0x7a - + .text - 0x20003c6e - 0x20003c6e + 0x20003414 + 0x20003414 0x7a - - - - .text:CM_enableAllPeripherals - 0x20003ce8 - 0x20003ce8 - 0x76 - - - - .text:COE_SyncTimeStamp - 0x20003d5e - 0x20003d5e - 0x76 - - - - .text:split - 0x20003dd4 - 0x20003dd4 - 0x70 + + .text:CM_enableAllPeripherals + 0x2000348e + 0x2000348e + 0x76 + + + + .text:COE_SyncTimeStamp + 0x20003504 + 0x20003504 + 0x76 + + + + .text:StartOutputHandler + 0x2000357a + 0x2000357a + 0x72 + + + + .text:SysCtl_resetPeripheral + 0x200035ec + 0x200035ec + 0x70 + + + + .text:split + 0x2000365c + 0x2000365c + 0x70 + + + + .text:SetALStatus + 0x200036cc + 0x200036cc + 0x6e + + .text:decompress:lzss:__TI_decompress_lzss - 0x20003e44 - 0x20003e44 + 0x2000373a + 0x2000373a 0x68 - + - + .text:COE_AddObjectToDic - 0x20003eac - 0x20003eac + 0x200037a2 + 0x200037a2 0x64 - - - - .text:MBX_MailboxRepeatReq - 0x20003f10 - 0x20003f10 - 0x62 - - - - .text:StartOutputHandler - 0x20003f72 - 0x20003f72 - 0x60 - - - - .text:__aeabi_cfcmple - 0x20003fd2 - 0x20003fd2 - 0x60 - - - - .text:OBJ_GetNoOfObjects - 0x20004032 - 0x20004032 - 0x5e - - - - .text:CiA402_DeallocateAxis - 0x20004090 - 0x20004090 - 0x5c - - - - .text:ESCSS_configureSync0Connections - 0x200040ec - 0x200040ec - 0x5c - - - - .text:ESCSS_configureSync1Connections - 0x20004148 - 0x20004148 - 0x5c - - - - .text:Interrupt_registerHandler - 0x200041a4 - 0x200041a4 - 0x5c - - - - .text:MBX_MailboxWriteInd - 0x20004200 - 0x20004200 - 0x5c - - - - .text:HandleCycleTimeMeasurement - 0x2000425c - 0x2000425c - 0x50 - - .text:Read0x10F8 - 0x200042ac - 0x200042ac - 0x4e - + + .text:MBX_MailboxRepeatReq + 0x20003806 + 0x20003806 + 0x62 + - - .text:MBX_Main - 0x200042fa - 0x200042fa - 0x48 - + + .text:__aeabi_cfcmple + 0x20003868 + 0x20003868 + 0x60 + + + + .text:OBJ_GetNoOfObjects + 0x200038c8 + 0x200038c8 + 0x5e + + + + .text:CiA402_DeallocateAxis + 0x20003926 + 0x20003926 + 0x5c + .text:faultISR - 0x20004342 - 0x20004342 + 0x20003982 + 0x20003982 0x2 + + + + .text:ESCSS_configureSync0Connections + 0x20003984 + 0x20003984 + 0x5c + + + + .text:ESCSS_configureSync1Connections + 0x200039e0 + 0x200039e0 + 0x5c + + + + .text:Interrupt_registerHandler + 0x20003a3c + 0x20003a3c + 0x5c + + + + .text:MBX_MailboxWriteInd + 0x20003a98 + 0x20003a98 + 0x5c - - .text:SysCtl_enablePeripheral - 0x20004344 - 0x20004344 - 0x48 - - - - .text - 0x2000438c - 0x2000438c - 0x48 - - - - .text:COE_UpdateSyncErrorStatus - 0x200043d4 - 0x200043d4 - 0x46 - + + .text:OBJ_GetObjectLength + 0x20003af4 + 0x20003af4 + 0x58 + .text:Sync1_Isr - 0x2000441a - 0x2000441a - 0x44 - + 0x20003b4c + 0x20003b4c + 0x52 + - - .text:nmiISR - 0x2000445e - 0x2000445e - 0x2 - - - - .text:__TI_auto_init_nobinit_nopinit:__TI_auto_init_nobinit_nopinit - 0x20004460 - 0x20004460 - 0x44 - + + .text:HandleCycleTimeMeasurement + 0x20003b9e + 0x20003b9e + 0x50 + .text:main - 0x200044a4 - 0x200044a4 - 0x44 - + 0x20003bee + 0x20003bee + 0x50 + - + + .text:Read0x10F8 + 0x20003c3e + 0x20003c3e + 0x4e + + + + .text:MBX_Main + 0x20003c8c + 0x20003c8c + 0x48 + + + + .text:SysCtl_enablePeripheral + 0x20003cd4 + 0x20003cd4 + 0x48 + + + + .text + 0x20003d1c + 0x20003d1c + 0x48 + + + + .text:COE_UpdateSyncErrorStatus + 0x20003d64 + 0x20003d64 + 0x46 + + + .text:COE_ContinueInd - 0x200044e8 - 0x200044e8 - 0x42 + 0x20003daa + 0x20003daa + 0x44 + + + + .text:nmiISR + 0x20003dee + 0x20003dee + 0x2 + + + + .text:__TI_auto_init_nobinit_nopinit:__TI_auto_init_nobinit_nopinit + 0x20003df0 + 0x20003df0 + 0x44 + + + + .text:FOE_Data + 0x20003e34 + 0x20003e34 + 0x3e + + + + .text:COE_RemoveDicEntry + 0x20003e72 + 0x20003e72 + 0x3c + + + + .text:ESCSS_configureEEPROMSize + 0x20003eae + 0x20003eae + 0x3a + + + + .text:OBJ_CopyNumberToString + 0x20003ee8 + 0x20003ee8 + 0x3a + + + + .text:OBJ_GetEntryDesc + 0x20003f22 + 0x20003f22 + 0x3a + + + + .text + 0x20003f5c + 0x20003f5c + 0x38 + + + + .text + 0x20003f94 + 0x20003f94 + 0x38 + + + + .text:strncpy + 0x20003fcc + 0x20003fcc + 0x36 + + + + .text:GetSystemTimeDelay + 0x20004002 + 0x20004002 + 0x34 .text:ECAT_Application - 0x2000452a - 0x2000452a - 0x3e - - - - .text:COE_RemoveDicEntry - 0x20004568 - 0x20004568 - 0x3c - - - - .text:ESCSS_configureEEPROMSize - 0x200045a4 - 0x200045a4 - 0x3a - - - - .text:OBJ_CopyNumberToString - 0x200045de - 0x200045de - 0x3a - - - - .text:OBJ_GetEntryDesc - 0x20004618 - 0x20004618 - 0x3a - - - - .text - 0x20004652 - 0x20004652 - 0x38 - - - - .text - 0x2000468a - 0x2000468a - 0x38 - - - - .text:strncpy - 0x200046c2 - 0x200046c2 - 0x36 - - - - .text:GetSystemTimeDelay - 0x200046f8 - 0x200046f8 - 0x34 - - - - .text:ESC_setLed - 0x2000472c - 0x2000472c + 0x20004036 + 0x20004036 0x32 - + - + + .text:ESC_setLed + 0x20004068 + 0x20004068 + 0x32 + + + .text:DisableSyncManChannel - 0x2000475e - 0x2000475e + 0x2000409a + 0x2000409a 0x2e - + - + .text:EnableSyncManChannel - 0x2000478c - 0x2000478c + 0x200040c8 + 0x200040c8 0x2e - + - + .text - 0x200047ba - 0x200047ba + 0x200040f6 + 0x200040f6 0x2e - + - + .text:COE_ObjDictionaryInit - 0x200047e8 - 0x200047e8 + 0x20004124 + 0x20004124 0x2c - + - + .text:PutInMbxQueue - 0x20004814 - 0x20004814 + 0x20004150 + 0x20004150 0x2c - + .text:CM_init - 0x20004840 - 0x20004840 + 0x2000417c + 0x2000417c 0x28 - + - + .text:COE_ServiceInd - 0x20004868 - 0x20004868 + 0x200041a4 + 0x200041a4 0x28 - + .text:ESC_loadedCheckEEPROM - 0x20004890 - 0x20004890 + 0x200041cc + 0x200041cc 0x28 - + - + + .text:FOE_Ack + 0x200041f4 + 0x200041f4 + 0x28 + + + + .text:FOE_Read + 0x2000421c + 0x2000421c + 0x28 + + + .text:free_list_insert - 0x200048b8 - 0x200048b8 + 0x20004244 + 0x20004244 0x28 - + - + .text:GetOutOfMbxQueue - 0x200048e0 - 0x200048e0 + 0x2000426c + 0x2000426c 0x26 - + - + .text:UpdateEEPROMLoadedState - 0x20004906 - 0x20004906 + 0x20004292 + 0x20004292 0x26 - + - + .text:AddObjectsToObjDictionary - 0x2000492c - 0x2000492c + 0x200042b8 + 0x200042b8 0x24 - + - - .text:CiA402_LocalError - 0x20004950 - 0x20004950 - 0x24 - - - + .text:ESCSS_isConfigurationLockEnabled - 0x20004974 - 0x20004974 + 0x200042dc + 0x200042dc 0x24 - + .text:_c_int00_noargs:_c_int00_noargs - 0x20004998 - 0x20004998 + 0x20004300 + 0x20004300 0x24 - + - + .text - 0x200049bc - 0x200049bc + 0x20004324 + 0x20004324 0x24 - + - - .text:COE_ClearObjDictionary - 0x200049e0 - 0x200049e0 + + .text:FOE_Init + 0x20004348 + 0x20004348 + 0x22 + + + + .text:APPL_Application + 0x2000436a + 0x2000436a 0x20 - + + .text:COE_ClearObjDictionary + 0x2000438a + 0x2000438a + 0x20 + + + .text:ESC_clearTimer - 0x20004a00 - 0x20004a00 + 0x200043aa + 0x200043aa 0x1e + + + + .text:FOE_Write + 0x200043c8 + 0x200043c8 + 0x1e + + + + .text:FOE_ContinueInd + 0x200043e6 + 0x200043e6 + 0x1c - + .text:GetSyncMan - 0x20004a1e - 0x20004a1e + 0x20004402 + 0x20004402 0x1c - + - + + .text:MailboxServiceInd + 0x2000441e + 0x2000441e + 0x1c + + + .text:ResetALEventMask - 0x20004a3a - 0x20004a3a + 0x2000443a + 0x2000443a 0x1c - + - + .text:SetALEventMask - 0x20004a56 - 0x20004a56 + 0x20004456 + 0x20004456 0x1c - + .text:decompress:ZI:__TI_zero_init_nomemset:__TI_zero_init_nomemset - 0x20004a72 - 0x20004a72 + 0x20004472 + 0x20004472 0x1c - + - + .text:free_list_remove - 0x20004a90 - 0x20004a90 + 0x20004490 + 0x20004490 0x1c - + .text:ESC_applicationLayerHandler - 0x20004aac - 0x20004aac + 0x200044ac + 0x200044ac 0x1a - + .text:ESC_applicationSync0Handler - 0x20004ac6 - 0x20004ac6 + 0x200044c6 + 0x200044c6 0x1a - + .text:ESC_applicationSync1Handler - 0x20004ae0 - 0x20004ae0 + 0x200044e0 + 0x200044e0 0x1a - + - + .text:OBJ_GetObjectHandle - 0x20004afa - 0x20004afa + 0x200044fa + 0x200044fa 0x1a - + - - .text:COE_Init - 0x20004b14 - 0x20004b14 - 0x18 - - - + .text:StopOutputHandler - 0x20004b2c - 0x20004b2c + 0x20004514 + 0x20004514 0x18 - + - + .text:strlen - 0x20004b44 - 0x20004b44 + 0x2000452c + 0x2000452c 0x14 - + - - .text:MailboxServiceInd - 0x20004b58 - 0x20004b58 + + .text:FOE_Error + 0x20004540 + 0x20004540 0x12 - + - + .text:ESC_writeBlockISR - 0x20004b6a - 0x20004b6a + 0x20004552 + 0x20004552 0x10 - + - + .text:BackToInitTransition - 0x20004b7a - 0x20004b7a + 0x20004562 + 0x20004562 + 0xe + + + + .text:COE_Init + 0x20004570 + 0x20004570 0xe - + .text:ESC_getTimer - 0x20004b88 - 0x20004b88 + 0x2000457e + 0x2000457e 0xe - + .text:decompress:none:__TI_decompress_none - 0x20004b96 - 0x20004b96 + 0x2000458c + 0x2000458c 0xe - + - + .text:COE_GetObjectDictionary - 0x20004ba4 - 0x20004ba4 + 0x2000459a + 0x2000459a + 0xc + + + + .text:CiA402_TransitionAction + 0x200045a6 + 0x200045a6 0xc - - .text:CiA402_TransitionAction - 0x20004bb0 - 0x20004bb0 - 0xc - - - + .text:ESC_readBlock - 0x20004bbc - 0x20004bbc + 0x200045b2 + 0x200045b2 0xc - + - + .text:ESC_readBlockISR - 0x20004bc8 - 0x20004bc8 + 0x200045be + 0x200045be 0xc - + - + .text:ESC_readByte - 0x20004bd4 - 0x20004bd4 + 0x200045ca + 0x200045ca 0xc - + - + .text:ESC_readDWord - 0x20004be0 - 0x20004be0 + 0x200045d6 + 0x200045d6 0xc - + - + .text:ESC_readWord - 0x20004bec - 0x20004bec + 0x200045e2 + 0x200045e2 0xc - + - + .text:ESC_writeBlock - 0x20004bf8 - 0x20004bf8 + 0x200045ee + 0x200045ee 0xc - + - + .text:ESC_writeByte - 0x20004c04 - 0x20004c04 + 0x200045fa + 0x200045fa 0xc - + .text:ESC_writeDWord - 0x20004c10 - 0x20004c10 + 0x20004606 + 0x20004606 0xc - + - + .text:ESC_writeWord - 0x20004c1c - 0x20004c1c + 0x20004612 + 0x20004612 0xc - + .text:ESC_readByteISR - 0x20004c28 - 0x20004c28 + 0x2000461e + 0x2000461e 0xa - + - + .text:ESC_readDWordISR - 0x20004c32 - 0x20004c32 + 0x20004628 + 0x20004628 0xa - + .text:ESC_readWordISR - 0x20004c3c - 0x20004c3c + 0x20004632 + 0x20004632 0xa - + - + .text:ESC_timerIncPerMilliSec - 0x20004c46 - 0x20004c46 + 0x2000463c + 0x2000463c 0xa - + - + .text:ESC_writeByteISR - 0x20004c50 - 0x20004c50 + 0x20004646 + 0x20004646 0xa - + - + .text:ESC_writeDWordISR - 0x20004c5a - 0x20004c5a + 0x20004650 + 0x20004650 0xa - + - + .text:ESC_writeWordISR - 0x20004c64 - 0x20004c64 + 0x2000465a + 0x2000465a 0xa - + .text:ESC_resetESC - 0x20004c6e - 0x20004c6e + 0x20004664 + 0x20004664 0x8 - - - - .text:malloc - 0x20004c76 - 0x20004c76 - 0x8 - - - - .text:APPL_StartOutputHandler - 0x20004c7e - 0x20004c7e - 0x4 - - - - .text:APPL_StopInputHandler - 0x20004c82 - 0x20004c82 - 0x4 - - - - .text:APPL_StopMailboxHandler - 0x20004c86 - 0x20004c86 - 0x4 - - - - .text:APPL_StopOutputHandler - 0x20004c8a - 0x20004c8a - 0x4 - - - - .text:F2838XCM_strcpy - 0x20004c8e - 0x20004c8e - 0x4 - - .text:OBJ_GetObjDesc - 0x20004c92 - 0x20004c92 + + .text:FOE_Busy + 0x2000466c + 0x2000466c + 0x8 + + + + .text:malloc + 0x20004674 + 0x20004674 + 0x8 + + + + .text:APPL_StopMailboxHandler + 0x2000467c + 0x2000467c + 0x4 + + + + .text:APPL_StopOutputHandler + 0x20004680 + 0x20004680 + 0x4 + + + + .text:F2838XCM_strcpy + 0x20004684 + 0x20004684 0x4 + + .text:OBJ_GetObjDesc + 0x20004688 + 0x20004688 + 0x4 + + .text:_system_pre_init - 0x20004c96 - 0x20004c96 + 0x2000468c + 0x2000468c 0x4 - + - + .text:abort:abort - 0x20004c9a - 0x20004c9a + 0x20004690 + 0x20004690 0x4 - + - + .cinit..data.load - 0x20004ca0 - 0x20004ca0 - 0x340 + 0x20004698 + 0x20004698 + 0x347 - + __TI_handler_table - 0x20004fe0 - 0x20004fe0 + 0x200049e0 + 0x200049e0 0xc - + .cinit..bss.load - 0x20004ff0 - 0x20004ff0 + 0x200049f0 + 0x200049f0 0x8 - + __TI_cinit_table - 0x20004ff8 - 0x20004ff8 + 0x200049f8 + 0x200049f8 0x10 @@ -1462,9 +1507,9 @@ true 0x1fffe000 0x10 - + - + .sysmem true 0x1fffe000 @@ -1473,12998 +1518,13166 @@ .stack true - 0x1fffd538 + 0x1fffd590 0x4 - + - + .stack true - 0x1fffd538 + 0x1fffd590 0x0 - + .data:sRxPDOassign - 0x1fffd13c - 0x1fffd13c + 0x1fffd194 + 0x1fffd194 0x6 - + - + .data:sTxPDOassign + 0x1fffd1a0 + 0x1fffd1a0 + 0x6 + + + + .data:sModulardeviceprofile + 0x1fffd10a + 0x1fffd10a + 0x6 + + + + .data:sModuleProfileInfo + 0x1fffd16c + 0x1fffd16c + 0xc + + + + .data:sConfiguredModuleIdentList 0x1fffd148 0x1fffd148 - 0x6 - - - - .data:sModulardeviceprofile - 0x1fffd0b2 - 0x1fffd0b2 - 0x6 - - - - .data:sModuleProfileInfo - 0x1fffd114 - 0x1fffd114 0xc - + - - .data:sConfiguredModuleIdentList - 0x1fffd0f0 - 0x1fffd0f0 - 0xc - - - + .data:sDetectedModuleIdentList - 0x1fffd0fc - 0x1fffd0fc + 0x1fffd154 + 0x1fffd154 0xc - + - + .data:DefCiA402ObjectValues - 0x1fffcfc0 - 0x1fffcfc0 + 0x1fffd018 + 0x1fffd018 0xb0 - + - + .data:ApplicationObjDic - 0x1fffcea8 - 0x1fffcea8 + 0x1fffcf00 + 0x1fffcf00 0x118 - + - + .data:DefCiA402AxisObjDic - 0x1fffc8e0 - 0x1fffc8e0 + 0x1fffc938 + 0x1fffc938 0x3e8 - + - + .data - 0x1fffd0b8 - 0x1fffd0b8 + 0x1fffd110 + 0x1fffd110 0x14 - - - - .data:acDevicename - 0x1fffd070 - 0x1fffd070 - 0x19 - - - - .data:acHardwareversion - 0x1fffd089 - 0x1fffd089 - 0x14 - - - - .data:acSoftwareversion - 0x1fffd09d - 0x1fffd09d - 0x14 - - - - .data:sIdentity - 0x1fffd0cc - 0x1fffd0cc - 0x14 - - - - .data:sSyncmanagertype - 0x1fffd142 - 0x1fffd142 - 0x6 - - - - .data:GenObjDic - 0x1fffccc8 - 0x1fffccc8 - 0x1e0 - - - - .data - 0x1fffd120 - 0x1fffd120 - 0xa - + + .data:acDevicename + 0x1fffd0c8 + 0x1fffd0c8 + 0x19 + + + + .data:acHardwareversion + 0x1fffd0e1 + 0x1fffd0e1 + 0x14 + + + + .data:acSoftwareversion + 0x1fffd0f5 + 0x1fffd0f5 + 0x14 + + + + .data:sIdentity + 0x1fffd124 + 0x1fffd124 + 0x14 + + + + .data:sSyncmanagertype + 0x1fffd19a + 0x1fffd19a + 0x6 + + + + .data:GenObjDic + 0x1fffcd20 + 0x1fffcd20 + 0x1e0 + + + .data - 0x1fffd0ed - 0x1fffd0ed + 0x1fffd178 + 0x1fffd178 + 0xa + + + + .data + 0x1fffd145 + 0x1fffd145 0x2 - + .data:sErrorSettings - 0x1fffd108 - 0x1fffd108 + 0x1fffd160 + 0x1fffd160 0xc - + - + .data:aSubindexDesc - 0x1fffd0e0 - 0x1fffd0e0 + 0x1fffd138 + 0x1fffd138 0xd - + - - .data - 0x1fffd0b1 - 0x1fffd0b1 - 0x1 - - - + .data:$O1$$ - 0x1fffd134 - 0x1fffd134 + 0x1fffd18c + 0x1fffd18c 0x8 - + - + .data:$O1$$ - 0x1fffd12c - 0x1fffd12c + 0x1fffd184 + 0x1fffd184 0x8 - + - + .common:LocalAxes true - 0x1fffd150 + 0x1fffd1a8 0x1a0 - + .common:u32LastDc32Value true - 0x1fffd4c0 + 0x1fffd520 0x4 - + .common:u32CheckForDcOverrunCnt true - 0x1fffd4b8 + 0x1fffd514 0x4 - + .common:bEtherCATRunLed true - 0x1fffd519 + 0x1fffd57b 0x1 - + .common:bEtherCATErrorLed true - 0x1fffd518 + 0x1fffd57a 0x1 - + .common:bRunApplication true - 0x1fffd521 + 0x1fffd581 0x1 - - .common:pAPPL_MainLoop + + .common:pAPPL_FoeRead true - 0x1fffd488 + 0x1fffd4e4 + 0x4 + + + .common:pAPPL_FoeReadData + true + 0x1fffd4e8 + 0x4 + + + .common:pAPPL_FoeError + true + 0x1fffd4e0 + 0x4 + + + .common:pAPPL_FoeWrite + true + 0x1fffd4ec 0x4 + .common:pAPPL_FoeWriteData + true + 0x1fffd4f0 + 0x4 + + + .common:pAPPL_CoeReadInd + true + 0x1fffd4d8 + 0x4 + + + .common:pAPPL_CoeWriteInd + true + 0x1fffd4dc + 0x4 + + + .common:pAPPL_MainLoop + true + 0x1fffd4f4 + 0x4 + + .common:u32CycleTimeStartValue true - 0x1fffd4bc + 0x1fffd518 0x4 - + .common:u32MinCycleTimeStartValue true - 0x1fffd4c4 + 0x1fffd528 0x4 - + .common:u32SystemTimeReadFailure true - 0x1fffd4d0 + 0x1fffd534 0x4 - + .common:bMinCycleTimeMeasurementStarted true - 0x1fffd51e + 0x1fffd57e 0x1 - + .common:u32MinCycleTimeValue true - 0x1fffd4c8 + 0x1fffd52c 0x4 - + .common:aPdOutputData true - 0x1fffd334 + 0x1fffd38c 0x44 - + .common:aPdInputData true - 0x1fffd2f0 + 0x1fffd348 0x44 - + .common:pCoeSendStored true - 0x1fffd48c + 0x1fffd4f8 0x4 + + .common:u32PacketNo + true + 0x1fffd530 + 0x4 + + + .common:u32FileOffset + true + 0x1fffd51c + 0x4 + + + .common:u32LastFileOffset + true + 0x1fffd524 + 0x4 + + + .common:u16FileAccessState + true + 0x1fffd562 + 0x2 + + + .common:pFoeSendStored + true + 0x1fffd4fc + 0x4 + + + .common:u16FoeMaxSendBlockSize + true + 0x1fffd564 + 0x2 + .common:bEcatOutputUpdateRunning true - 0x1fffd515 + 0x1fffd577 0x1 .common:bEcatInputUpdateRunning true - 0x1fffd514 + 0x1fffd576 0x1 .common:bEcatFirstOutputsReceived true - 0x1fffd513 + 0x1fffd575 0x1 - + .common:bWdTrigger true - 0x1fffd529 + 0x1fffd585 0x1 - + .common:bDcSyncActive true - 0x1fffd512 + 0x1fffd574 0x1 - + .common:EsmTimeoutCounter true - 0x1fffd4d6 + 0x1fffd53a 0x2 .common:bDcRunning true - 0x1fffd511 + 0x1fffd573 0x1 - + .common:u16SmSync0Counter true - 0x1fffd508 + 0x1fffd56c + 0x2 + + + .common:u16SmSync0Value + true + 0x1fffd56e + 0x2 + + + .common:bSmSyncSequenceValid + true + 0x1fffd583 + 0x1 + + + .common:i16WaitForPllRunningTimeout + true + 0x1fffd54a + 0x2 + + + .common:i16WaitForPllRunningCnt + true + 0x1fffd548 0x2 - .common:u16SmSync0Value - true - 0x1fffd50a - 0x2 - - - .common:bSmSyncSequenceValid - true - 0x1fffd526 - 0x1 - - - .common:i16WaitForPllRunningTimeout - true - 0x1fffd4e6 - 0x2 - - - .common:i16WaitForPllRunningCnt - true - 0x1fffd4e4 - 0x2 - - .common:Sync0WdCounter true - 0x1fffd4dc + 0x1fffd540 0x2 - + .common:Sync0WdValue true - 0x1fffd4de + 0x1fffd542 0x2 .common:Sync1WdCounter true - 0x1fffd4e0 + 0x1fffd544 0x2 - + .common:Sync1WdValue true - 0x1fffd4e2 + 0x1fffd546 0x2 - + .common:LatchInputSync0Value true - 0x1fffd4da + 0x1fffd53e 0x2 - + .common:LatchInputSync0Counter true - 0x1fffd4d8 + 0x1fffd53c 0x2 - + .common:b32BitDc true - 0x1fffd50e + 0x1fffd570 0x1 .common:bEscIntEnabled true - 0x1fffd517 + 0x1fffd579 0x1 - + .common:b3BufferMode true - 0x1fffd50f + 0x1fffd571 0x1 - - .common:bLocalErrorFlag - true - 0x1fffd51b - 0x1 - - + .common:u16LocalErrorCode true - 0x1fffd502 + 0x1fffd566 0x2 - + + .common:u8LocalErrorState + true + 0x1fffd58a + 0x1 + + .common:bApplEsmPending true - 0x1fffd510 + 0x1fffd572 0x1 - - .common:bEcatWaitForAlControlRes - true - 0x1fffd516 - 0x1 - - - .common:nEcatStateTrans - true - 0x1fffd4e8 - 0x2 - + .common:bEcatWaitForAlControlRes + true + 0x1fffd578 + 0x1 + + + .common:nEcatStateTrans + true + 0x1fffd54c + 0x2 + + .common:u8EcatErrorLed true - 0x1fffd52e + 0x1fffd588 0x1 - + .common:u8EcatRunLed true - 0x1fffd52f + 0x1fffd589 0x1 - + .common:nPdInputSize true - 0x1fffd4f0 + 0x1fffd554 0x2 - + .common:nPdOutputSize true - 0x1fffd4f2 + 0x1fffd556 0x2 - + .common:nMaxSyncMan true - 0x1fffd52b + 0x1fffd587 0x1 - + .common:nMaxEscAddress true - 0x1fffd4ee + 0x1fffd552 0x2 - + .common:nAlStatus true - 0x1fffd52a + 0x1fffd586 0x1 - - .common:bExplicitDevIdRequested - true - 0x1fffd51a - 0x1 - - + .common:EcatWdValue true - 0x1fffd4d4 + 0x1fffd538 0x2 .common:nEscAddrOutputData true - 0x1fffd4ec + 0x1fffd550 0x2 - + .common:nEscAddrInputData true - 0x1fffd4ea + 0x1fffd54e 0x2 - + .common:u16ALEventMask true - 0x1fffd4fc + 0x1fffd55c 0x2 .common:u8dummy true - 0x1fffd535 + 0x1fffd58e 0x1 - + .common:SyncManInfo true - 0x1fffd478 + 0x1fffd4d0 0x8 - + .common:bReceiveMbxIsLocked true - 0x1fffd520 + 0x1fffd580 + 0x1 + + + .common:bSendMbxIsFull + true + 0x1fffd582 + 0x1 + + + .common:bMbxRunning + true + 0x1fffd57d + 0x1 + + + .common:bMbxRepeatToggle + true + 0x1fffd57c + 0x1 + + + .common:u16SendMbxSize + true + 0x1fffd56a + 0x2 + + + .common:u16ReceiveMbxSize + true + 0x1fffd568 + 0x2 + + + .common:u16EscAddrReceiveMbx + true + 0x1fffd55e + 0x2 + + + .common:u16EscAddrSendMbx + true + 0x1fffd560 + 0x2 + + + .common:u8MbxWriteCounter + true + 0x1fffd58d 0x1 - .common:bSendMbxIsFull - true - 0x1fffd525 - 0x1 - - - .common:bMbxRunning - true - 0x1fffd51d - 0x1 - - - .common:bMbxRepeatToggle - true - 0x1fffd51c - 0x1 - - - .common:u16SendMbxSize - true - 0x1fffd506 - 0x2 - - - .common:u16ReceiveMbxSize - true - 0x1fffd504 - 0x2 - - - .common:u16EscAddrReceiveMbx - true - 0x1fffd4fe - 0x2 - - - .common:u16EscAddrSendMbx - true - 0x1fffd500 - 0x2 - - - .common:u8MbxWriteCounter - true - 0x1fffd532 - 0x1 - - .common:u8MbxReadCounter true - 0x1fffd531 + 0x1fffd58c 0x1 - + .common:u8MailboxSendReqStored true - 0x1fffd530 + 0x1fffd58b 0x1 - + .common:psWriteMbx true - 0x1fffd4b4 - 0x4 - - - .common:psReadMbx - true - 0x1fffd4a8 + 0x1fffd510 0x4 - .common:psRepeatMbx + .common:psReadMbx true - 0x1fffd4ac + 0x1fffd504 0x4 - - .common:psStoreMbx + + .common:psRepeatMbx true - 0x1fffd4b0 + 0x1fffd508 0x4 + .common:psStoreMbx + true + 0x1fffd50c + 0x4 + + .common:sMbxSendQueue true - 0x1fffd434 + 0x1fffd48c 0x34 - + .common:sMbxReceiveQueue true - 0x1fffd400 + 0x1fffd458 0x34 - + .common:bNoMbxMemoryAvailable true - 0x1fffd51f + 0x1fffd57f 0x1 - + .common:bSyncSetByUser true - 0x1fffd528 + 0x1fffd584 0x1 - + .common:sCycleDiag true - 0x1fffd4fa + 0x1fffd55a 0x2 .common:sSyncManOutPar true - 0x1fffd3bc + 0x1fffd414 0x44 - + .common:sSyncManInPar true - 0x1fffd378 + 0x1fffd3d0 0x44 - - .common:u8PendingSdo - true - 0x1fffd533 - 0x1 - - - .common:bStoreCompleteAccess - true - 0x1fffd527 - 0x1 - - - .common:u8StoreSubindex - true - 0x1fffd534 - 0x1 - - - .common:u16StoreIndex - true - 0x1fffd50c - 0x2 - - - .common:u32StoreDataSize - true - 0x1fffd4cc - 0x4 - - - .common:pStoreData - true - 0x1fffd4a4 - 0x4 - - - .common:pSdoPendFunc - true - 0x1fffd494 - 0x4 - - + .common:aSdoInfoHeader true - 0x1fffd468 + 0x1fffd4c0 0x10 - - .common:pSdoSegData - true - 0x1fffd49c - 0x4 - - - .common:nSdoInfoFragmentsLeft - true - 0x1fffd4f4 - 0x2 - - + .common:nSdoInfoIndex true - 0x1fffd4f6 + 0x1fffd558 0x2 - + .common:pSdoInfoObjEntry true - 0x1fffd490 + 0x1fffd500 0x4 - - .common:pSdoResStored - true - 0x1fffd498 - 0x4 - - - .common:nSdoSegService - true - 0x1fffd52c - 0x1 - - - .common:bSdoSegFollows - true - 0x1fffd523 - 0x1 - - - .common:bSdoSegAccess - true - 0x1fffd522 - 0x1 - - - .common:nSdoSegIndex - true - 0x1fffd4f8 - 0x2 - - - .common:nSdoSegSubindex - true - 0x1fffd52d - 0x1 - - - .common:nSdoSegBytesToHandle - true - 0x1fffd480 - 0x4 - - - .common:bSdoSegLastToggle - true - 0x1fffd524 - 0x1 - - - .common:nSdoSegCompleteSize - true - 0x1fffd484 - 0x4 - - - .common:pSdoSegObjEntry - true - 0x1fffd4a0 - 0x4 - - + .const:.string:aName0x1C32 0x1fffc000 0x1fffc000 - 0x100 - + 0x108 + - + .const:.string:aName0x1C33 - 0x1fffc100 - 0x1fffc100 - 0xff - - - - .const:asEntryDesc0x1C3x - 0x1fffc200 - 0x1fffc200 - 0xc6 - - - - .const:cAbortCode - 0x1fffc2c8 - 0x1fffc2c8 - 0x78 - - - - .const:.string:aName0x60C2 - 0x1fffc340 - 0x1fffc340 - 0x46 - - - - .const:.string:aName0xF000 - 0x1fffc386 - 0x1fffc386 - 0x42 - - - - .const:.string:aName0x607D - 0x1fffc3c8 - 0x1fffc3c8 - 0x40 - - - - .const:.string:aName0x10F1 - 0x1fffc408 - 0x1fffc408 - 0x3f - - - - .const:.string:aName0x1018 - 0x1fffc447 - 0x1fffc447 - 0x39 - - - - .const:asEntryDesc0x1600 - 0x1fffc480 - 0x1fffc480 - 0x24 - - - - .const:asEntryDesc0x1A00 - 0x1fffc4a4 - 0x1fffc4a4 - 0x24 - - - - .const:cBitMask - 0x1fffc4c8 - 0x1fffc4c8 - 0x20 - - - - .const:.string:aName0x605C - 0x1fffc4e8 - 0x1fffc4e8 - 0x1e - - - - .const:asEntryDesc0x1018 - 0x1fffc506 - 0x1fffc506 - 0x1e - - - - .const:.string:aName0xF030 - 0x1fffc524 - 0x1fffc524 - 0x1d - - - - .const:.string:aName0x6061 - 0x1fffc541 - 0x1fffc541 - 0x1b - - - - .const:asEntryDesc0x1601 - 0x1fffc55c - 0x1fffc55c - 0x18 - - - - .const:asEntryDesc0x1602 - 0x1fffc574 - 0x1fffc574 - 0x18 - - - - .const:asEntryDesc0x1A01 - 0x1fffc58c - 0x1fffc58c - 0x18 - - - - .const:asEntryDesc0x1A02 - 0x1fffc5a4 - 0x1fffc5a4 - 0x18 - - - - .const:.string:aName0x605A - 0x1fffc5bc - 0x1fffc5bc - 0x16 - - - - .const:.string:aName0x6064 - 0x1fffc5d2 - 0x1fffc5d2 - 0x16 - - - - .const:.string:aName0x606C - 0x1fffc5e8 - 0x1fffc5e8 - 0x16 - - - - .const:.string:aName0x6085 - 0x1fffc5fe - 0x1fffc5fe - 0x16 - - - - .const:.string:aName0x6502 - 0x1fffc614 - 0x1fffc614 - 0x16 - - - - .const:.string:aName0x605B - 0x1fffc62a - 0x1fffc62a - 0x15 - - - - .const:.string:aName0xF050 - 0x1fffc63f - 0x1fffc63f - 0x15 - - - - .const:.string:aName0x605E - 0x1fffc654 - 0x1fffc654 - 0x14 - - - - .const:.string:aName0x6077 - 0x1fffc668 - 0x1fffc668 - 0x14 - - - - .const:.string:aName0xF010 - 0x1fffc67c - 0x1fffc67c - 0x14 - - - - .const:.string:aName0x10F8 - 0x1fffc690 - 0x1fffc690 - 0x13 - - - - .const:.string:aName0x6060 - 0x1fffc6a3 - 0x1fffc6a3 - 0x13 - - - - .const:.string:aName0x1C00 - 0x1fffc6b6 - 0x1fffc6b6 - 0x12 - + 0x1fffc108 + 0x1fffc108 + 0x107 + - .const:asEntryDesc0x10F1 - 0x1fffc6c8 - 0x1fffc6c8 - 0x12 - + .const:asEntryDesc0x1C3x + 0x1fffc210 + 0x1fffc210 + 0xc6 + - - .const:asEntryDesc0x607D - 0x1fffc6da - 0x1fffc6da - 0x12 - + + .const:cAbortCode + 0x1fffc2d8 + 0x1fffc2d8 + 0x78 + - - .const:asEntryDesc0x60C2 - 0x1fffc6ec - 0x1fffc6ec - 0x12 - - - - .const:asEntryDesc0xF000 - 0x1fffc6fe - 0x1fffc6fe - 0x12 - - - - .const:asEntryDesc0xF010 - 0x1fffc710 - 0x1fffc710 - 0x12 - - - - .const:asEntryDesc0xF030 - 0x1fffc722 - 0x1fffc722 - 0x12 - - - - .const:asEntryDesc0xF050 - 0x1fffc734 - 0x1fffc734 - 0x12 - - - - .const:.string:aName0x1009 - 0x1fffc746 - 0x1fffc746 - 0x11 - - - - .const:.string:aName0x100A - 0x1fffc757 - 0x1fffc757 - 0x11 - - - - .const:.string:aName0x1600 - 0x1fffc768 - 0x1fffc768 - 0x10 - - - - .const:.string:aName0x1A00 - 0x1fffc778 - 0x1fffc778 - 0x10 - - - - .const:.string:aName0x607A - 0x1fffc788 - 0x1fffc788 - 0x10 - - - - .const:.string:aName0x60FF - 0x1fffc798 - 0x1fffc798 - 0x10 - - - - .const:.string:aName0x1001 - 0x1fffc7a8 - 0x1fffc7a8 - 0xf - - - - .const:.string:aName0x1C12 - 0x1fffc7b7 - 0x1fffc7b7 - 0xd - - - - .const:.string:aName0x1C13 - 0x1fffc7c4 - 0x1fffc7c4 - 0xd - - - - .const:.string:aName0x6040 - 0x1fffc7d1 - 0x1fffc7d1 - 0xd - - - - .const:.string:aName0x1000 - 0x1fffc7de - 0x1fffc7de - 0xc + + .const:.string:aName0x60C2 + 0x1fffc350 + 0x1fffc350 + 0x55 - .const:.string:aName0x1008 - 0x1fffc7ea - 0x1fffc7ea - 0xc + .const:.string:aName0x1018 + 0x1fffc3a5 + 0x1fffc3a5 + 0x47 + + + + .const:.string:aName0xF000 + 0x1fffc3ec + 0x1fffc3ec + 0x42 - - .const:.string:aName0x1601 - 0x1fffc7f6 - 0x1fffc7f6 - 0xc - - - - .const:.string:aName0x1602 - 0x1fffc802 - 0x1fffc802 - 0xc - - - - .const:.string:aName0x1A01 - 0x1fffc80e - 0x1fffc80e - 0xc - - - - .const:.string:aName0x1A02 - 0x1fffc81a - 0x1fffc81a - 0xc - - - - .const:.string:aName0x6041 - 0x1fffc826 - 0x1fffc826 - 0xc - - - - .const:asEntryDesc0x1C00 - 0x1fffc832 - 0x1fffc832 - 0xc + + .const:.string:aName0x607D + 0x1fffc42e + 0x1fffc42e + 0x40 - - .const:asPDOAssignEntryDesc - 0x1fffc83e - 0x1fffc83e - 0xc - + + .const:.string:aName0x10F1 + 0x1fffc46e + 0x1fffc46e + 0x3f + - - .const:.string:aName0x603F - 0x1fffc84a - 0x1fffc84a - 0xb - - - - .const:sEntryDesc0x1000 - 0x1fffc856 - 0x1fffc856 - 0x6 + + .const:asEntryDesc0x1600 + 0x1fffc4ae + 0x1fffc4ae + 0x24 + + .const:asEntryDesc0x1A00 + 0x1fffc4d2 + 0x1fffc4d2 + 0x24 + + + + .const:cBitMask + 0x1fffc4f6 + 0x1fffc4f6 + 0x20 + + + + .const:.string:aName0x1009 + 0x1fffc516 + 0x1fffc516 + 0x1e + + - .const:sEntryDesc0x1001 - 0x1fffc85c - 0x1fffc85c - 0x6 + .const:.string:aName0x100A + 0x1fffc534 + 0x1fffc534 + 0x1e + + + + .const:.string:aName0x605C + 0x1fffc552 + 0x1fffc552 + 0x1e - .const:sEntryDesc0x1008 - 0x1fffc862 - 0x1fffc862 - 0x6 + .const:asEntryDesc0x1018 + 0x1fffc570 + 0x1fffc570 + 0x1e + + + + .const:.string:aName0xF030 + 0x1fffc58e + 0x1fffc58e + 0x1d - - .const:sEntryDesc0x1009 - 0x1fffc868 - 0x1fffc868 - 0x6 + + .const:.string:aName0x605E + 0x1fffc5ab + 0x1fffc5ab + 0x1b + + + + .const:.string:aName0x6061 + 0x1fffc5c6 + 0x1fffc5c6 + 0x1b + + + + .const:.string:aName0x6085 + 0x1fffc5e1 + 0x1fffc5e1 + 0x18 + + + + .const:asEntryDesc0x1601 + 0x1fffc5fa + 0x1fffc5fa + 0x18 + + + + .const:asEntryDesc0x1602 + 0x1fffc612 + 0x1fffc612 + 0x18 + + + + .const:asEntryDesc0x1A01 + 0x1fffc62a + 0x1fffc62a + 0x18 + + + + .const:asEntryDesc0x1A02 + 0x1fffc642 + 0x1fffc642 + 0x18 + + + + .const:.string:aName0x605A + 0x1fffc65a + 0x1fffc65a + 0x17 + + + + .const:.string:aName0x6064 + 0x1fffc671 + 0x1fffc671 + 0x16 + + + + .const:.string:aName0x606C + 0x1fffc687 + 0x1fffc687 + 0x16 + + + + .const:.string:aName0x6502 + 0x1fffc69d + 0x1fffc69d + 0x16 + + + + .const:.string:aName0x605B + 0x1fffc6b3 + 0x1fffc6b3 + 0x15 + + + + .const:.string:aName0xF050 + 0x1fffc6c8 + 0x1fffc6c8 + 0x15 + + + + .const:.string:aName0x6077 + 0x1fffc6dd + 0x1fffc6dd + 0x14 + + + + .const:.string:aName0xF010 + 0x1fffc6f1 + 0x1fffc6f1 + 0x14 - .const:sEntryDesc0x100A + .const:.string:aName0x10F8 + 0x1fffc705 + 0x1fffc705 + 0x13 + + + + .const:.string:aName0x6060 + 0x1fffc718 + 0x1fffc718 + 0x13 + + + + .const:.string:aName0x1C00 + 0x1fffc72b + 0x1fffc72b + 0x12 + + + + .const:asEntryDesc0x10F1 + 0x1fffc73e + 0x1fffc73e + 0x12 + + + + .const:asEntryDesc0x607D + 0x1fffc750 + 0x1fffc750 + 0x12 + + + + .const:asEntryDesc0x60C2 + 0x1fffc762 + 0x1fffc762 + 0x12 + + + + .const:asEntryDesc0xF000 + 0x1fffc774 + 0x1fffc774 + 0x12 + + + + .const:asEntryDesc0xF010 + 0x1fffc786 + 0x1fffc786 + 0x12 + + + + .const:asEntryDesc0xF030 + 0x1fffc798 + 0x1fffc798 + 0x12 + + + + .const:asEntryDesc0xF050 + 0x1fffc7aa + 0x1fffc7aa + 0x12 + + + + .const:.string:aName0x1600 + 0x1fffc7bc + 0x1fffc7bc + 0x10 + + + + .const:.string:aName0x1A00 + 0x1fffc7cc + 0x1fffc7cc + 0x10 + + + + .const:.string:aName0x607A + 0x1fffc7dc + 0x1fffc7dc + 0x10 + + + + .const:.string:aName0x60FF + 0x1fffc7ec + 0x1fffc7ec + 0x10 + + + + .const:.string:aName0x1001 + 0x1fffc7fc + 0x1fffc7fc + 0xf + + + + .const:.string:aName0x1C12 + 0x1fffc80b + 0x1fffc80b + 0xd + + + + .const:.string:aName0x1C13 + 0x1fffc818 + 0x1fffc818 + 0xd + + + + .const:.string:aName0x6040 + 0x1fffc825 + 0x1fffc825 + 0xd + + + + .const:.string:aName0x1000 + 0x1fffc832 + 0x1fffc832 + 0xc + + + + .const:.string:aName0x1008 + 0x1fffc83e + 0x1fffc83e + 0xc + + + + .const:.string:aName0x1601 + 0x1fffc84a + 0x1fffc84a + 0xc + + + + .const:.string:aName0x1602 + 0x1fffc856 + 0x1fffc856 + 0xc + + + + .const:.string:aName0x1A01 + 0x1fffc862 + 0x1fffc862 + 0xc + + + + .const:.string:aName0x1A02 0x1fffc86e 0x1fffc86e - 0x6 + 0xc - - .const:sEntryDesc0x10F8 - 0x1fffc874 - 0x1fffc874 - 0x6 - - - - .const:sEntryDesc0x603F + + .const:.string:aName0x6041 0x1fffc87a 0x1fffc87a - 0x6 - + 0xc + - - .const:sEntryDesc0x6040 - 0x1fffc880 - 0x1fffc880 - 0x6 - - - - .const:sEntryDesc0x6041 + + .const:asEntryDesc0x1C00 0x1fffc886 0x1fffc886 - 0x6 - + 0xc + - - .const:sEntryDesc0x605A - 0x1fffc88c - 0x1fffc88c - 0x6 - - - - .const:sEntryDesc0x605B + + .const:asPDOAssignEntryDesc 0x1fffc892 0x1fffc892 - 0x6 - + 0xc + - - .const:sEntryDesc0x605C - 0x1fffc898 - 0x1fffc898 - 0x6 - - - - .const:sEntryDesc0x605E + + .const:.string:aName0x603F 0x1fffc89e 0x1fffc89e - 0x6 - + 0xb + - - .const:sEntryDesc0x6060 - 0x1fffc8a4 - 0x1fffc8a4 - 0x6 - - - - .const:sEntryDesc0x6061 + + .const:sEntryDesc0x1000 0x1fffc8aa 0x1fffc8aa 0x6 - + - - .const:sEntryDesc0x6064 + + .const:sEntryDesc0x1001 0x1fffc8b0 0x1fffc8b0 0x6 - + - - .const:sEntryDesc0x606C + + .const:sEntryDesc0x1008 0x1fffc8b6 0x1fffc8b6 0x6 - + - - .const:sEntryDesc0x6077 + + .const:sEntryDesc0x1009 0x1fffc8bc 0x1fffc8bc 0x6 - + - - .const:sEntryDesc0x607A + + .const:sEntryDesc0x100A 0x1fffc8c2 0x1fffc8c2 0x6 - + - - .const:sEntryDesc0x6085 + + .const:sEntryDesc0x10F8 0x1fffc8c8 0x1fffc8c8 0x6 - + - - .const:sEntryDesc0x60FF + + .const:sEntryDesc0x603F 0x1fffc8ce 0x1fffc8ce 0x6 - + - - .const:sEntryDesc0x6502 + + .const:sEntryDesc0x6040 0x1fffc8d4 0x1fffc8d4 0x6 - + - + + .const:sEntryDesc0x6041 + 0x1fffc8da + 0x1fffc8da + 0x6 + + + + .const:sEntryDesc0x605A + 0x1fffc8e0 + 0x1fffc8e0 + 0x6 + + + + .const:sEntryDesc0x605B + 0x1fffc8e6 + 0x1fffc8e6 + 0x6 + + + + .const:sEntryDesc0x605C + 0x1fffc8ec + 0x1fffc8ec + 0x6 + + + + .const:sEntryDesc0x605E + 0x1fffc8f2 + 0x1fffc8f2 + 0x6 + + + + .const:sEntryDesc0x6060 + 0x1fffc8f8 + 0x1fffc8f8 + 0x6 + + + + .const:sEntryDesc0x6061 + 0x1fffc8fe + 0x1fffc8fe + 0x6 + + + + .const:sEntryDesc0x6064 + 0x1fffc904 + 0x1fffc904 + 0x6 + + + + .const:sEntryDesc0x606C + 0x1fffc90a + 0x1fffc90a + 0x6 + + + + .const:sEntryDesc0x6077 + 0x1fffc910 + 0x1fffc910 + 0x6 + + + + .const:sEntryDesc0x607A + 0x1fffc916 + 0x1fffc916 + 0x6 + + + + .const:sEntryDesc0x6085 + 0x1fffc91c + 0x1fffc91c + 0x6 + + + + .const:sEntryDesc0x60FF + 0x1fffc922 + 0x1fffc922 + 0x6 + + + + .const:sEntryDesc0x6502 + 0x1fffc928 + 0x1fffc928 + 0x6 + + + + .const:.string + 0x1fffc930 + 0x1fffc930 + 0x4 + + + .debug_info 0x0 0x0 - 0x60c + 0x317 - + .debug_info - 0x60c - 0x60c - 0xed + 0x317 + 0x317 + 0x156 - + .debug_info - 0x6f9 - 0x6f9 - 0xdb + 0x46d + 0x46d + 0x158 - + .debug_info - 0x7d4 - 0x7d4 - 0xdb + 0x5c5 + 0x5c5 + 0x161 - + .debug_info - 0x8af - 0x8af - 0xe7 - - - - .debug_info - 0x996 - 0x996 - 0xdb - - - - .debug_info - 0xa71 - 0xa71 - 0xe7 - - - - .debug_info - 0xb58 - 0xb58 - 0xdb - - - - .debug_info - 0xc33 - 0xc33 - 0xe7 - - - - .debug_info - 0xd1a - 0xd1a - 0xdb - - - - .debug_info - 0xdf5 - 0xdf5 - 0xe7 - - - - .debug_info - 0xedc - 0xedc - 0xdb - - - - .debug_info - 0xfb7 - 0xfb7 - 0xe7 - - - - .debug_info - 0x109e - 0x109e - 0xdb - - - - .debug_info - 0x1179 - 0x1179 - 0xe7 - - - - .debug_info - 0x1260 - 0x1260 - 0xdb - - - - .debug_info - 0x133b - 0x133b - 0xe5 - - - - .debug_info - 0x1420 - 0x1420 - 0xdb - - - - .debug_info - 0x14fb - 0x14fb - 0xe5 - - - - .debug_info - 0x15e0 - 0x15e0 - 0xdb - - - - .debug_info - 0x16bb - 0x16bb - 0xe5 - - - - .debug_info - 0x17a0 - 0x17a0 - 0xdb - - - - .debug_info - 0x187b - 0x187b - 0xe5 - - - - .debug_info - 0x1960 - 0x1960 - 0xdb - - - - .debug_info - 0x1a3b - 0x1a3b - 0xe5 - - - - .debug_info - 0x1b20 - 0x1b20 - 0xdb - - - - .debug_info - 0x1bfb - 0x1bfb - 0xe5 - - - - .debug_info - 0x1ce0 - 0x1ce0 - 0xdb - - - - .debug_info - 0x1dbb - 0x1dbb - 0xe5 - - - - .debug_info - 0x1ea0 - 0x1ea0 - 0xdb - - - - .debug_info - 0x1f7b - 0x1f7b - 0xe5 - - - - .debug_info - 0x2060 - 0x2060 - 0xdb - - - - .debug_info - 0x213b - 0x213b - 0xe5 - - - - .debug_info - 0x2220 - 0x2220 - 0xdb - - - - .debug_info - 0x22fb - 0x22fb - 0xe5 - - - - .debug_info - 0x23e0 - 0x23e0 - 0xdb - - - - .debug_info - 0x24bb - 0x24bb - 0xe5 - - - - .debug_info - 0x25a0 - 0x25a0 - 0xdb - - - - .debug_info - 0x267b - 0x267b - 0xe5 - - - - .debug_info - 0x2760 - 0x2760 - 0xdb - - - - .debug_info - 0x283b - 0x283b - 0xe5 - - - - .debug_info - 0x2920 - 0x2920 - 0xdb - - - - .debug_info - 0x29fb - 0x29fb - 0xe7 - - - - .debug_info - 0x2ae2 - 0x2ae2 - 0xdb - - - - .debug_info - 0x2bbd - 0x2bbd - 0xe5 - - - - .debug_info - 0x2ca2 - 0x2ca2 - 0xdb - - - - .debug_info - 0x2d7d - 0x2d7d - 0xe7 - - - - .debug_info - 0x2e64 - 0x2e64 - 0xdb - - - - .debug_info - 0x2f3f - 0x2f3f - 0xe5 - - - - .debug_info - 0x3024 - 0x3024 - 0xdb - - - - .debug_info - 0x30ff - 0x30ff - 0xe5 - - - - .debug_info - 0x31e4 - 0x31e4 - 0xdb - - - - .debug_info - 0x32bf - 0x32bf - 0xe7 - - - - .debug_info - 0x33a6 - 0x33a6 - 0xdb - - - - .debug_info - 0x3481 - 0x3481 - 0xe7 - - - - .debug_info - 0x3568 - 0x3568 - 0xdb - - - - .debug_info - 0x3643 - 0x3643 - 0xe7 - - - - .debug_info - 0x372a - 0x372a - 0xdb - - - - .debug_info - 0x3805 - 0x3805 - 0xe7 - - - - .debug_info - 0x38ec - 0x38ec - 0xdb - - - - .debug_info - 0x39c7 - 0x39c7 - 0xdd - - - - .debug_info - 0x3aa4 - 0x3aa4 - 0xdd - - - - .debug_info - 0x3b81 - 0x3b81 - 0xef - - - - .debug_info - 0x3c70 - 0x3c70 - 0xe9 - - - - .debug_info - 0x3d59 - 0x3d59 - 0xf9 - - - - .debug_info - 0x3e52 - 0x3e52 - 0xf5 - - - - .debug_info - 0x3f47 - 0x3f47 - 0xef - - - - .debug_info - 0x4036 - 0x4036 - 0xe7 - - - - .debug_info - 0x411d - 0x411d - 0xeb - - - - .debug_info - 0x4208 - 0x4208 - 0x1bd - - - - .debug_info - 0x43c5 - 0x43c5 - 0x358 - - - - .debug_info - 0x471d - 0x471d - 0x160 - - - - .debug_info - 0x487d - 0x487d - 0x195 - - - - .debug_info - 0x4a12 - 0x4a12 - 0x247 - - - - .debug_info - 0x4c59 - 0x4c59 - 0x173 - - - - .debug_info - 0x4dcc - 0x4dcc - 0x18c - - - - .debug_info - 0x4f58 - 0x4f58 - 0x155 - - - - .debug_info - 0x50ad - 0x50ad - 0x25f - - - - .debug_info - 0x530c - 0x530c - 0x208 - - - - .debug_info - 0x5514 - 0x5514 - 0x12d - - - - .debug_info - 0x5641 - 0x5641 - 0x12f - - - - .debug_info - 0x5770 - 0x5770 - 0x12b - - - - .debug_info - 0x589b - 0x589b - 0x12f - - - - .debug_info - 0x59ca - 0x59ca - 0x131 - - - - .debug_info - 0x5afb - 0x5afb - 0x18e - - - - .debug_info - 0x5c89 - 0x5c89 - 0x173 - - - - .debug_info - 0x5dfc - 0x5dfc - 0x171 - - - - .debug_info - 0x5f6d - 0x5f6d - 0x121 - - - - .debug_info - 0x608e - 0x608e - 0x136 - - - - .debug_info - 0x61c4 - 0x61c4 - 0x13a - - - - .debug_info - 0x62fe - 0x62fe - 0x7c6 - - - - .debug_info - 0x6ac4 - 0x6ac4 - 0x981 - - - - .debug_info - 0x7445 - 0x7445 + 0x726 + 0x726 0x110 - + .debug_info - 0x7555 - 0x7555 + 0x836 + 0x836 0x72 - + .debug_info - 0x75c7 - 0x75c7 + 0x8a8 + 0x8a8 0x26b - + .debug_info - 0x7832 - 0x7832 + 0xb13 + 0xb13 0x119 - + .debug_info - 0x794b - 0x794b + 0xc2c + 0xc2c 0x80 - + .debug_info - 0x79cb - 0x79cb - 0x327 + 0xcac + 0xcac + 0x7ca - + .debug_info - 0x7cf2 - 0x7cf2 - 0xd9 + 0x1476 + 0x1476 + 0x327 .debug_info - 0x7dcb - 0x7dcb + 0x179d + 0x179d 0x84 - + .debug_info - 0x7e4f - 0x7e4f + 0x1821 + 0x1821 0x2a4 .debug_info - 0x80f3 - 0x80f3 + 0x1ac5 + 0x1ac5 0xbb - + .debug_info - 0x81ae - 0x81ae + 0x1b80 + 0x1b80 0x35 - + .debug_info - 0x81e3 - 0x81e3 - 0x6ca + 0x1bb5 + 0x1bb5 + 0x649 - + .debug_info - 0x88ad - 0x88ad - 0x15b + 0x21fe + 0x21fe + 0xed - + .debug_info - 0x8a08 - 0x8a08 - 0xe1 - - - - .debug_info - 0x8ae9 - 0x8ae9 - 0xd7 - - - - .debug_info - 0x8bc0 - 0x8bc0 - 0xe1 - - - - .debug_info - 0x8ca1 - 0x8ca1 - 0xd7 - - - - .debug_info - 0x8d78 - 0x8d78 - 0xd9 - - - - .debug_info - 0x8e51 - 0x8e51 - 0xe1 - - - - .debug_info - 0x8f32 - 0x8f32 - 0xd7 - - - - .debug_info - 0x9009 - 0x9009 - 0xe3 - - - - .debug_info - 0x90ec - 0x90ec - 0xe1 - - - - .debug_info - 0x91cd - 0x91cd - 0xd7 - - - - .debug_info - 0x92a4 - 0x92a4 - 0xe3 - - - - .debug_info - 0x9387 - 0x9387 - 0xe1 - - - - .debug_info - 0x9468 - 0x9468 - 0xd7 - - - - .debug_info - 0x953f - 0x953f - 0xd3 - - - - .debug_info - 0x9612 - 0x9612 - 0xe4 - - - - .debug_info - 0x96f6 - 0x96f6 - 0xd8 - - - - .debug_info - 0x97ce - 0x97ce - 0xe4 - - - - .debug_info - 0x98b2 - 0x98b2 - 0xd8 - - - - .debug_info - 0x998a - 0x998a - 0xe2 - - - - .debug_info - 0x9a6c - 0x9a6c - 0xd8 - - - - .debug_info - 0x9b44 - 0x9b44 - 0xe2 + 0x22eb + 0x22eb + 0xdb .debug_info - 0x9c26 - 0x9c26 - 0xe4 + 0x23c6 + 0x23c6 + 0xdb + + + + .debug_info + 0x24a1 + 0x24a1 + 0xe7 + + + + .debug_info + 0x2588 + 0x2588 + 0xdb + + + + .debug_info + 0x2663 + 0x2663 + 0xe7 + + + + .debug_info + 0x274a + 0x274a + 0xdb + + + + .debug_info + 0x2825 + 0x2825 + 0xe7 + + + + .debug_info + 0x290c + 0x290c + 0xdb + + + + .debug_info + 0x29e7 + 0x29e7 + 0xe7 + + + + .debug_info + 0x2ace + 0x2ace + 0xdb + + + + .debug_info + 0x2ba9 + 0x2ba9 + 0xe7 + + + + .debug_info + 0x2c90 + 0x2c90 + 0xdb + + + + .debug_info + 0x2d6b + 0x2d6b + 0xe7 + + + + .debug_info + 0x2e52 + 0x2e52 + 0xdb + + + + .debug_info + 0x2f2d + 0x2f2d + 0xe5 + + + + .debug_info + 0x3012 + 0x3012 + 0xdb + + + + .debug_info + 0x30ed + 0x30ed + 0xe5 + + + + .debug_info + 0x31d2 + 0x31d2 + 0xdb + + + + .debug_info + 0x32ad + 0x32ad + 0xe5 + + + + .debug_info + 0x3392 + 0x3392 + 0xdb + + + + .debug_info + 0x346d + 0x346d + 0xe5 + + + + .debug_info + 0x3552 + 0x3552 + 0xdb + + + + .debug_info + 0x362d + 0x362d + 0xe5 + + + + .debug_info + 0x3712 + 0x3712 + 0xdb + + + + .debug_info + 0x37ed + 0x37ed + 0xe5 + + + + .debug_info + 0x38d2 + 0x38d2 + 0xdb + + + + .debug_info + 0x39ad + 0x39ad + 0xe5 + + + + .debug_info + 0x3a92 + 0x3a92 + 0xdb + + + + .debug_info + 0x3b6d + 0x3b6d + 0xe5 + + + + .debug_info + 0x3c52 + 0x3c52 + 0xdb + + + + .debug_info + 0x3d2d + 0x3d2d + 0xe5 + + + + .debug_info + 0x3e12 + 0x3e12 + 0xdb + + + + .debug_info + 0x3eed + 0x3eed + 0xe5 + + + + .debug_info + 0x3fd2 + 0x3fd2 + 0xdb + + + + .debug_info + 0x40ad + 0x40ad + 0xe5 + + + + .debug_info + 0x4192 + 0x4192 + 0xdb + + + + .debug_info + 0x426d + 0x426d + 0xe5 + + + + .debug_info + 0x4352 + 0x4352 + 0xdb + + + + .debug_info + 0x442d + 0x442d + 0xe5 + + + + .debug_info + 0x4512 + 0x4512 + 0xdb + + + + .debug_info + 0x45ed + 0x45ed + 0xe7 + + + + .debug_info + 0x46d4 + 0x46d4 + 0xdb + + + + .debug_info + 0x47af + 0x47af + 0xe5 + + + + .debug_info + 0x4894 + 0x4894 + 0xdb + + + + .debug_info + 0x496f + 0x496f + 0xe7 + + + + .debug_info + 0x4a56 + 0x4a56 + 0xdb + + + + .debug_info + 0x4b31 + 0x4b31 + 0xe5 + + + + .debug_info + 0x4c16 + 0x4c16 + 0xdb + + + + .debug_info + 0x4cf1 + 0x4cf1 + 0xe5 + + + + .debug_info + 0x4dd6 + 0x4dd6 + 0xdb .debug_info - 0x9d0a - 0x9d0a - 0xd8 + 0x4eb1 + 0x4eb1 + 0xe7 - + .debug_info - 0x9de2 - 0x9de2 - 0xe4 + 0x4f98 + 0x4f98 + 0xdb .debug_info - 0x9ec6 - 0x9ec6 - 0xd8 + 0x5073 + 0x5073 + 0xe7 .debug_info - 0x9f9e - 0x9f9e - 0xd8 + 0x515a + 0x515a + 0xdb - + .debug_info - 0xa076 - 0xa076 - 0xd4 + 0x5235 + 0x5235 + 0xe7 - + .debug_info - 0xa14a - 0xa14a - 0x153 + 0x531c + 0x531c + 0xdb - + .debug_info - 0xa29d - 0xa29d - 0x209 + 0x53f7 + 0x53f7 + 0xe7 - + .debug_info - 0xa4a6 - 0xa4a6 - 0x126 + 0x54de + 0x54de + 0xdb - + .debug_info - 0xa5cc - 0xa5cc - 0x199 + 0x55b9 + 0x55b9 + 0xdd - + .debug_info - 0xa765 - 0xa765 - 0x179 + 0x5696 + 0x5696 + 0xdd - + .debug_info - 0xa8de - 0xa8de - 0x188 + 0x5773 + 0x5773 + 0xef - + .debug_info - 0xaa66 - 0xaa66 + 0x5862 + 0x5862 + 0xe9 + + + + .debug_info + 0x594b + 0x594b + 0xf9 + + + + .debug_info + 0x5a44 + 0x5a44 + 0xf5 + + + + .debug_info + 0x5b39 + 0x5b39 + 0xef + + + + .debug_info + 0x5c28 + 0x5c28 + 0xe7 + + + + .debug_info + 0x5d0f + 0x5d0f + 0xeb + + + + .debug_info + 0x5dfa + 0x5dfa + 0x1bd + + + + .debug_info + 0x5fb7 + 0x5fb7 + 0x358 + + + + .debug_info + 0x630f + 0x630f + 0x160 + + + + .debug_info + 0x646f + 0x646f + 0x1a6 + + + + .debug_info + 0x6615 + 0x6615 + 0x1f1 + + + + .debug_info + 0x6806 + 0x6806 + 0x173 + + + + .debug_info + 0x6979 + 0x6979 0x18c - + .debug_info - 0xabf2 - 0xabf2 - 0x167 + 0x6b05 + 0x6b05 + 0x25f - + .debug_info - 0xad59 - 0xad59 - 0x188 + 0x6d64 + 0x6d64 + 0x208 + + + + .debug_info + 0x6f6c + 0x6f6c + 0x12d + + + + .debug_info + 0x7099 + 0x7099 + 0x12b + + + + .debug_info + 0x71c4 + 0x71c4 + 0x12f + + + + .debug_info + 0x72f3 + 0x72f3 + 0x18e + + + + .debug_info + 0x7481 + 0x7481 + 0x173 + + + + .debug_info + 0x75f4 + 0x75f4 + 0x171 + + + + .debug_info + 0x7765 + 0x7765 + 0x136 + + + + .debug_info + 0x789b + 0x789b + 0x981 + + + + .debug_info + 0x821c + 0x821c + 0xd9 .debug_info - 0xaee1 - 0xaee1 - 0x13c - - - - .debug_info - 0xb01d - 0xb01d - 0x126 - - - - .debug_info - 0xb143 - 0xb143 - 0xe14 + 0x82f5 + 0x82f5 + 0x53f - + .debug_info - 0xbf57 - 0xbf57 - 0xdc + 0x8834 + 0x8834 + 0x15b - - .debug_info - 0xc033 - 0xc033 - 0x1b0 - - - - .debug_info - 0xc1e3 - 0xc1e3 - 0x1ae - - - - .debug_info - 0xc391 - 0xc391 - 0x120 - - - - .debug_info - 0xc4b1 - 0xc4b1 - 0x15d - - - - .debug_info - 0xc60e - 0xc60e - 0x14f - - - - .debug_info - 0xc75d - 0xc75d - 0x184 - - - - .debug_info - 0xc8e1 - 0xc8e1 - 0x1bd - - - - .debug_info - 0xca9e - 0xca9e - 0x21d - - - - .debug_info - 0xccbb - 0xccbb - 0x21b - - - - .debug_info - 0xced6 - 0xced6 - 0x148 - - - - .debug_info - 0xd01e - 0xd01e - 0x25b - - - - .debug_info - 0xd279 - 0xd279 - 0x195 - - - - .debug_info - 0xd40e - 0xd40e - 0x34f - - - - .debug_info - 0xd75d - 0xd75d - 0x184 - - - - .debug_info - 0xd8e1 - 0xd8e1 - 0x101 - - - - .debug_info - 0xd9e2 - 0xd9e2 - 0x17e - - - - .debug_info - 0xdb60 - 0xdb60 - 0x1102 - - - - .debug_info - 0xec62 - 0xec62 - 0xfe - - - - .debug_info - 0xed60 - 0xed60 - 0x14a - - - - .debug_info - 0xeeaa - 0xeeaa - 0x116 - - - - .debug_info - 0xefc0 - 0xefc0 - 0x1a2 - - - - .debug_info - 0xf162 - 0xf162 - 0x178 - - - - .debug_info - 0xf2da - 0xf2da - 0x163 - - - - .debug_info - 0xf43d - 0xf43d - 0x122 - - - - .debug_info - 0xf55f - 0xf55f - 0x14e - - - - .debug_info - 0xf6ad - 0xf6ad - 0x1a0 - - - - .debug_info - 0xf84d - 0xf84d - 0x3b7 - - - - .debug_info - 0xfc04 - 0xfc04 - 0x1d0 - - - - .debug_info - 0xfdd4 - 0xfdd4 - 0x176 - - - - .debug_info - 0xff4a - 0xff4a - 0x2aa - - - - .debug_info - 0x101f4 - 0x101f4 - 0x11c - - - - .debug_info - 0x10310 - 0x10310 - 0x699 - - - - .debug_info - 0x109a9 - 0x109a9 - 0x32f - - - - .debug_info - 0x10cd8 - 0x10cd8 - 0x2a5 - - - - .debug_info - 0x10f7d - 0x10f7d - 0x1b8 - - - - .debug_info - 0x11135 - 0x11135 - 0x114 - - - - .debug_info - 0x11249 - 0x11249 - 0x158 - - - - .debug_info - 0x113a1 - 0x113a1 - 0x5a6 - - - - .debug_info - 0x11947 - 0x11947 - 0x1a2 - - - - .debug_info - 0x11ae9 - 0x11ae9 - 0x181 - - - - .debug_info - 0x11c6a - 0x11c6a - 0x1a8 - - - - .debug_info - 0x11e12 - 0x11e12 - 0x186 - - - - .debug_info - 0x11f98 - 0x11f98 - 0x1a2 - - - - .debug_info - 0x1213a - 0x1213a - 0x181 - - - - .debug_info - 0x122bb - 0x122bb - 0x1ab - - - - .debug_info - 0x12466 - 0x12466 - 0x18b - - - - .debug_info - 0x125f1 - 0x125f1 - 0x14d - - - - .debug_info - 0x1273e - 0x1273e - 0x171 - - - - .debug_info - 0x128af - 0x128af - 0x14e - - - - .debug_info - 0x129fd - 0x129fd - 0x138 - - - - .debug_info - 0x12b35 - 0x12b35 - 0x16b - - - - .debug_info - 0x12ca0 - 0x12ca0 - 0x164 - - - - .debug_info - 0x12e04 - 0x12e04 - 0x16d - - - - .debug_info - 0x12f71 - 0x12f71 - 0x167 - - - - .debug_info - 0x130d8 - 0x130d8 - 0x16c - - - - .debug_info - 0x13244 - 0x13244 - 0x167 - - - - .debug_info - 0x133ab - 0x133ab - 0x193 - - - - .debug_info - 0x1353e - 0x1353e - 0x185 - - - - .debug_info - 0x136c3 - 0x136c3 - 0x1a2 - - - - .debug_info - 0x13865 - 0x13865 - 0x2db - - - - .debug_info - 0x13b40 - 0x13b40 - 0x137 - - - - .debug_info - 0x13c77 - 0x13c77 - 0x150 - - - - .debug_info - 0x13dc7 - 0x13dc7 - 0x165 - - - - .debug_info - 0x13f2c - 0x13f2c - 0x165 - - - - .debug_info - 0x14091 - 0x14091 - 0x163 - - - - .debug_info - 0x141f4 - 0x141f4 - 0x21e4 - - - - .debug_info - 0x163d8 - 0x163d8 - 0x297 - - - - .debug_info - 0x1666f - 0x1666f - 0x22a - - - - .debug_info - 0x16899 - 0x16899 - 0x4df - - - - .debug_info - 0x16d78 - 0x16d78 - 0x8b - - - - .debug_info - 0x16e03 - 0x16e03 - 0x2c - - - - .debug_info - 0x16e2f - 0x16e2f - 0x2c - - - - .debug_info - 0x16e5b - 0x16e5b - 0x18f - - - - .debug_info - 0x16fea - 0x16fea - 0x15e - - - - .debug_info - 0x17148 - 0x17148 - 0x841 - - - - .debug_info - 0x17989 - 0x17989 - 0x17a - - - - .debug_info - 0x17b03 - 0x17b03 - 0x167 - - - - .debug_info - 0x17c6a - 0x17c6a - 0x150 - - - - .debug_info - 0x17dba - 0x17dba - 0x245 - - - - .debug_info - 0x17fff - 0x17fff - 0x1ea - - - - .debug_info - 0x181e9 - 0x181e9 - 0x19e - - - - .debug_info - 0x18387 - 0x18387 - 0x1a9 - - - - .debug_info - 0x18530 - 0x18530 - 0x1ac - - - - .debug_info - 0x186dc - 0x186dc - 0x21e - - - - .debug_info - 0x188fa - 0x188fa - 0x190 - - - - .debug_info - 0x18a8a - 0x18a8a - 0x180 - - - - .debug_info - 0x18c0a - 0x18c0a - 0x199 - - - - .debug_info - 0x18da3 - 0x18da3 - 0x148 - - - - .debug_info - 0x18eeb - 0x18eeb - 0x47c - - - - .debug_info - 0x19367 - 0x19367 - 0xdc - - - - .debug_info - 0x19443 - 0x19443 - 0xdb - - - - .debug_info - 0x1951e - 0x1951e - 0xd0 - - - - .debug_info - 0x195ee - 0x195ee - 0x198 - - - - .debug_info - 0x19786 - 0x19786 - 0x1d3 - - - - .debug_info - 0x19959 - 0x19959 - 0x164 - - - - .debug_info - 0x19abd - 0x19abd - 0x48b - - - - .debug_info - 0x19f48 - 0x19f48 - 0x457 - - - - .debug_info - 0x1a39f - 0x1a39f - 0x287 - - - - .debug_info - 0x1a626 - 0x1a626 - 0x22a - - - - .debug_info - 0x1a850 - 0x1a850 - 0x177 - - - - .debug_info - 0x1a9c7 - 0x1a9c7 - 0x147 - - - - .debug_info - 0x1ab0e - 0x1ab0e - 0x1f6 - - - - .debug_info - 0x1ad04 - 0x1ad04 - 0x169 - - - - .debug_info - 0x1ae6d - 0x1ae6d - 0x2a7 - - - - .debug_info - 0x1b114 - 0x1b114 - 0xaa7 - - - - .debug_info - 0x1bbbb - 0x1bbbb - 0xd5 - - - - .debug_info - 0x1bc90 - 0x1bc90 - 0xd5 - - - - .debug_info - 0x1bd65 - 0x1bd65 - 0x24f - - - - .debug_info - 0x1bfb4 - 0x1bfb4 - 0x13c - - - - .debug_info - 0x1c0f0 - 0x1c0f0 - 0x208 - - - - .debug_info - 0x1c2f8 - 0x1c2f8 - 0x3eb - - - - .debug_info - 0x1c6e3 - 0x1c6e3 - 0x1e0 - - - - .debug_info - 0x1c8c3 - 0x1c8c3 - 0x1a4 - - - - .debug_info - 0x1ca67 - 0x1ca67 - 0x381 - - - - .debug_info - 0x1cde8 - 0x1cde8 - 0x16f - - - - .debug_info - 0x1cf57 - 0x1cf57 - 0xe0 - - - - .debug_info - 0x1d037 - 0x1d037 - 0x109 - - - - .debug_info - 0x1d140 - 0x1d140 - 0xfa - - - - .debug_info - 0x1d23a - 0x1d23a - 0xfe - - - - .debug_info - 0x1d338 - 0x1d338 - 0x102 - - - - .debug_info - 0x1d43a - 0x1d43a - 0x2e7 - - - - .debug_info - 0x1d721 - 0x1d721 - 0x123 - - - - .debug_info - 0x1d844 - 0x1d844 - 0x266 - - - - .debug_info - 0x1daaa - 0x1daaa - 0x318 - - - - .debug_info - 0x1ddc2 - 0x1ddc2 - 0x318 - - - - .debug_info - 0x1e0da - 0x1e0da - 0x26e - - - - .debug_info - 0x1e348 - 0x1e348 - 0x21a - - - - .debug_info - 0x1e562 - 0x1e562 - 0x28c - - - - .debug_info - 0x1e7ee - 0x1e7ee - 0x1b5 - - - - .debug_info - 0x1e9a3 - 0x1e9a3 - 0x24a - - - - .debug_info - 0x1ebed - 0x1ebed - 0x2c2 - - - - .debug_info - 0x1eeaf - 0x1eeaf - 0x297 - - - - .debug_info - 0x1f146 - 0x1f146 - 0x27b - - - - .debug_info - 0x1f3c1 - 0x1f3c1 - 0x14c - - - - .debug_info - 0x1f50d - 0x1f50d - 0x13a - - .debug_info - 0x1f647 - 0x1f647 - 0x12e - + 0x898f + 0x898f + 0xe1 + - + .debug_info - 0x1f775 - 0x1f775 - 0x14c - + 0x8a70 + 0x8a70 + 0xd7 + - + .debug_info - 0x1f8c1 - 0x1f8c1 - 0x13a - - - - .debug_info - 0x1f9fb - 0x1f9fb - 0x12c - + 0x8b47 + 0x8b47 + 0xe1 + .debug_info - 0x1fb27 - 0x1fb27 + 0x8c28 + 0x8c28 + 0xd7 + + + + .debug_info + 0x8cff + 0x8cff + 0xd9 + + + + .debug_info + 0x8dd8 + 0x8dd8 + 0xe1 + + + + .debug_info + 0x8eb9 + 0x8eb9 + 0xd7 + + + + .debug_info + 0x8f90 + 0x8f90 + 0xe3 + + + + .debug_info + 0x9073 + 0x9073 + 0xe1 + + + + .debug_info + 0x9154 + 0x9154 + 0xd7 + + + + .debug_info + 0x922b + 0x922b + 0xe3 + + + + .debug_info + 0x930e + 0x930e + 0xe1 + + + + .debug_info + 0x93ef + 0x93ef + 0xd7 + + + + .debug_info + 0x94c6 + 0x94c6 + 0xd4 + + + + .debug_info + 0x959a + 0x959a + 0xe4 + + + + .debug_info + 0x967e + 0x967e + 0xd8 + + + + .debug_info + 0x9756 + 0x9756 + 0xe4 + + + + .debug_info + 0x983a + 0x983a + 0xd8 + + + + .debug_info + 0x9912 + 0x9912 + 0xe2 + + + + .debug_info + 0x99f4 + 0x99f4 + 0xd8 + + + + .debug_info + 0x9acc + 0x9acc + 0xe2 + + + + .debug_info + 0x9bae + 0x9bae + 0xe4 + + + + .debug_info + 0x9c92 + 0x9c92 + 0xd8 + + + + .debug_info + 0x9d6a + 0x9d6a + 0xe4 + + + + .debug_info + 0x9e4e + 0x9e4e + 0xd8 + + + + .debug_info + 0x9f26 + 0x9f26 + 0xd8 + + + + .debug_info + 0x9ffe + 0x9ffe + 0xd4 + + + + .debug_info + 0xa0d2 + 0xa0d2 + 0x153 + + + + .debug_info + 0xa225 + 0xa225 + 0x209 + + + + .debug_info + 0xa42e + 0xa42e + 0x126 + + + + .debug_info + 0xa554 + 0xa554 + 0x199 + + + + .debug_info + 0xa6ed + 0xa6ed + 0x179 + + + + .debug_info + 0xa866 + 0xa866 + 0x188 + + + + .debug_info + 0xa9ee + 0xa9ee + 0x18c + + + + .debug_info + 0xab7a + 0xab7a + 0x167 + + + + .debug_info + 0xace1 + 0xace1 + 0x188 + + + + .debug_info + 0xae69 + 0xae69 + 0x104 + + + + .debug_info + 0xaf6d + 0xaf6d + 0x126 + + + + .debug_info + 0xb093 + 0xb093 + 0x1053 + + + + .debug_info + 0xc0e6 + 0xc0e6 + 0xdc + + + + .debug_info + 0xc1c2 + 0xc1c2 + 0x1b0 + + + + .debug_info + 0xc372 + 0xc372 + 0x1ae + + + + .debug_info + 0xc520 + 0xc520 + 0x120 + + + + .debug_info + 0xc640 + 0xc640 + 0x15d + + + + .debug_info + 0xc79d + 0xc79d + 0x14f + + + + .debug_info + 0xc8ec + 0xc8ec + 0x1af + + + + .debug_info + 0xca9b + 0xca9b + 0x1bd + + + + .debug_info + 0xcc58 + 0xcc58 + 0x28b + + + + .debug_info + 0xcee3 + 0xcee3 + 0x21b + + + + .debug_info + 0xd0fe + 0xd0fe + 0x148 + + + + .debug_info + 0xd246 + 0xd246 + 0x25b + + + + .debug_info + 0xd4a1 + 0xd4a1 + 0x195 + + + + .debug_info + 0xd636 + 0xd636 + 0x318 + + + + .debug_info + 0xd94e + 0xd94e + 0x184 + + + + .debug_info + 0xdad2 + 0xdad2 + 0x101 + + + + .debug_info + 0xdbd3 + 0xdbd3 + 0x17e + + + + .debug_info + 0xdd51 + 0xdd51 + 0x481 + + + + .debug_info + 0xe1d2 + 0xe1d2 + 0x22b + + + + .debug_info + 0xe3fd + 0xe3fd + 0x101 + + + + .debug_info + 0xe4fe + 0xe4fe + 0x13c + + + + .debug_info + 0xe63a + 0xe63a + 0x13e + + + + .debug_info + 0xe778 + 0xe778 + 0x108d + + + + .debug_info + 0xf805 + 0xf805 + 0xff + + + + .debug_info + 0xf904 + 0xf904 + 0x14a + + + + .debug_info + 0xfa4e + 0xfa4e + 0x116 + + + + .debug_info + 0xfb64 + 0xfb64 + 0x1a2 + + + + .debug_info + 0xfd06 + 0xfd06 + 0x17a + + + + .debug_info + 0xfe80 + 0xfe80 + 0x163 + + + + .debug_info + 0xffe3 + 0xffe3 + 0x122 + + + + .debug_info + 0x10105 + 0x10105 + 0x14e + + + + .debug_info + 0x10253 + 0x10253 + 0x1a0 + + + + .debug_info + 0x103f3 + 0x103f3 + 0x3e3 + + + + .debug_info + 0x107d6 + 0x107d6 + 0x1a6 + + + + .debug_info + 0x1097c + 0x1097c + 0x176 + + + + .debug_info + 0x10af2 + 0x10af2 + 0x2aa + + + + .debug_info + 0x10d9c + 0x10d9c + 0x11c + + + + .debug_info + 0x10eb8 + 0x10eb8 + 0x69c + + + + .debug_info + 0x11554 + 0x11554 + 0x32f + + + + .debug_info + 0x11883 + 0x11883 + 0x2d3 + + + + .debug_info + 0x11b56 + 0x11b56 + 0x1b8 + + + + .debug_info + 0x11d0e + 0x11d0e + 0x114 + + + + .debug_info + 0x11e22 + 0x11e22 + 0x158 + + + + .debug_info + 0x11f7a + 0x11f7a + 0x5a6 + + + + .debug_info + 0x12520 + 0x12520 + 0x1a2 + + + + .debug_info + 0x126c2 + 0x126c2 + 0x181 + + + + .debug_info + 0x12843 + 0x12843 + 0x1a8 + + + + .debug_info + 0x129eb + 0x129eb + 0x186 + + + + .debug_info + 0x12b71 + 0x12b71 + 0x1a2 + + + + .debug_info + 0x12d13 + 0x12d13 + 0x181 + + + + .debug_info + 0x12e94 + 0x12e94 + 0x1ab + + + + .debug_info + 0x1303f + 0x1303f + 0x18b + + + + .debug_info + 0x131ca + 0x131ca + 0x14d + + + + .debug_info + 0x13317 + 0x13317 + 0x171 + + + + .debug_info + 0x13488 + 0x13488 + 0x14e + + + + .debug_info + 0x135d6 + 0x135d6 + 0x138 + + + + .debug_info + 0x1370e + 0x1370e + 0x16b + + + + .debug_info + 0x13879 + 0x13879 + 0x164 + + + + .debug_info + 0x139dd + 0x139dd + 0x16d + + + + .debug_info + 0x13b4a + 0x13b4a + 0x167 + + + + .debug_info + 0x13cb1 + 0x13cb1 + 0x16c + + + + .debug_info + 0x13e1d + 0x13e1d + 0x167 + + + + .debug_info + 0x13f84 + 0x13f84 + 0x193 + + + + .debug_info + 0x14117 + 0x14117 + 0x185 + + + + .debug_info + 0x1429c + 0x1429c + 0x1a2 + + + + .debug_info + 0x1443e + 0x1443e + 0x2db + + + + .debug_info + 0x14719 + 0x14719 + 0x137 + + + + .debug_info + 0x14850 + 0x14850 + 0x150 + + + + .debug_info + 0x149a0 + 0x149a0 + 0x165 + + + + .debug_info + 0x14b05 + 0x14b05 + 0x165 + + + + .debug_info + 0x14c6a + 0x14c6a + 0x163 + + + + .debug_info + 0x14dcd + 0x14dcd + 0x21e4 + + + + .debug_info + 0x16fb1 + 0x16fb1 + 0x297 + + + + .debug_info + 0x17248 + 0x17248 + 0x22a + + + + .debug_info + 0x17472 + 0x17472 + 0x4df + + + + .debug_info + 0x17951 + 0x17951 + 0x8b + + + + .debug_info + 0x179dc + 0x179dc + 0x2c + + + + .debug_info + 0x17a08 + 0x17a08 + 0x2c + + + + .debug_info + 0x17a34 + 0x17a34 + 0x18f + + + + .debug_info + 0x17bc3 + 0x17bc3 + 0x15e + + + + .debug_info + 0x17d21 + 0x17d21 + 0x425 + + + + .debug_info + 0x18146 + 0x18146 + 0x16c + + + + .debug_info + 0x182b2 + 0x182b2 + 0x196 + + + + .debug_info + 0x18448 + 0x18448 + 0x128 + + + + .debug_info + 0x18570 + 0x18570 + 0x17f + + + + .debug_info + 0x186ef + 0x186ef + 0x153 + + + + .debug_info + 0x18842 + 0x18842 + 0x165 + + + + .debug_info + 0x189a7 + 0x189a7 + 0x8a2 + + + + .debug_info + 0x19249 + 0x19249 + 0x17a + + + + .debug_info + 0x193c3 + 0x193c3 + 0x17d + + + + .debug_info + 0x19540 + 0x19540 + 0x151 + + + + .debug_info + 0x19691 + 0x19691 + 0x234 + + + + .debug_info + 0x198c5 + 0x198c5 + 0x1ea + + + + .debug_info + 0x19aaf + 0x19aaf + 0x20c + + + + .debug_info + 0x19cbb + 0x19cbb + 0x1a9 + + + + .debug_info + 0x19e64 + 0x19e64 + 0x1ac + + + + .debug_info + 0x1a010 + 0x1a010 + 0x21e + + + + .debug_info + 0x1a22e + 0x1a22e + 0x190 + + + + .debug_info + 0x1a3be + 0x1a3be + 0x180 + + + + .debug_info + 0x1a53e + 0x1a53e + 0x1b5 + + + + .debug_info + 0x1a6f3 + 0x1a6f3 + 0x14a + + + + .debug_info + 0x1a83d + 0x1a83d + 0x4f2 + + + + .debug_info + 0x1ad2f + 0x1ad2f + 0xdd + + + + .debug_info + 0x1ae0c + 0x1ae0c + 0xdb + + + + .debug_info + 0x1aee7 + 0x1aee7 + 0xd0 + + + + .debug_info + 0x1afb7 + 0x1afb7 + 0x198 + + + + .debug_info + 0x1b14f + 0x1b14f + 0x1d3 + + + + .debug_info + 0x1b322 + 0x1b322 + 0x164 + + + + .debug_info + 0x1b486 + 0x1b486 + 0x47c + + + + .debug_info + 0x1b902 + 0x1b902 + 0x41a + + + + .debug_info + 0x1bd1c + 0x1bd1c + 0x287 + + + + .debug_info + 0x1bfa3 + 0x1bfa3 + 0x1f1 + + + + .debug_info + 0x1c194 + 0x1c194 + 0x177 + + + + .debug_info + 0x1c30b + 0x1c30b + 0x147 + + + + .debug_info + 0x1c452 + 0x1c452 + 0x1f6 + + + + .debug_info + 0x1c648 + 0x1c648 + 0x169 + + + + .debug_info + 0x1c7b1 + 0x1c7b1 + 0x29e + + + + .debug_info + 0x1ca4f + 0x1ca4f + 0x683 + + + + .debug_info + 0x1d0d2 + 0x1d0d2 + 0xd5 + + + + .debug_info + 0x1d1a7 + 0x1d1a7 + 0x234 + + + + .debug_info + 0x1d3db + 0x1d3db + 0x3d8 + + + + .debug_info + 0x1d7b3 + 0x1d7b3 + 0x2f4 + + + + .debug_info + 0x1daa7 + 0x1daa7 + 0x16f + + + + .debug_info + 0x1dc16 + 0x1dc16 + 0xe0 + + + + .debug_info + 0x1dcf6 + 0x1dcf6 + 0x109 + + + + .debug_info + 0x1ddff + 0x1ddff + 0xfa + + + + .debug_info + 0x1def9 + 0x1def9 + 0xfe + + + + .debug_info + 0x1dff7 + 0x1dff7 + 0x102 + + + + .debug_info + 0x1e0f9 + 0x1e0f9 + 0x2e7 + + + + .debug_info + 0x1e3e0 + 0x1e3e0 + 0x123 + + + + .debug_info + 0x1e503 + 0x1e503 + 0x266 + + + + .debug_info + 0x1e769 + 0x1e769 + 0x318 + + + + .debug_info + 0x1ea81 + 0x1ea81 + 0x318 + + + + .debug_info + 0x1ed99 + 0x1ed99 + 0x26e + + + + .debug_info + 0x1f007 + 0x1f007 + 0x21a + + + + .debug_info + 0x1f221 + 0x1f221 + 0x28c + + + + .debug_info + 0x1f4ad + 0x1f4ad + 0x1b5 + + + + .debug_info + 0x1f662 + 0x1f662 + 0x24a + + + + .debug_info + 0x1f8ac + 0x1f8ac + 0x2c2 + + + + .debug_info + 0x1fb6e + 0x1fb6e + 0x297 + + + + .debug_info + 0x1fe05 + 0x1fe05 + 0x27b + + + + .debug_info + 0x20080 + 0x20080 + 0x14c + + + + .debug_info + 0x201cc + 0x201cc + 0x13a + + + + .debug_info + 0x20306 + 0x20306 0x12e - + .debug_info - 0x1fc55 - 0x1fc55 - 0x12c + 0x20434 + 0x20434 + 0x14c + + .debug_info + 0x20580 + 0x20580 + 0x13a + + + + .debug_info + 0x206ba + 0x206ba + 0x12c + + + + .debug_info + 0x207e6 + 0x207e6 + 0x12e + + + + .debug_info + 0x20914 + 0x20914 + 0x12c + + .debug_info - 0x1fd81 - 0x1fd81 + 0x20a40 + 0x20a40 0x119 - + - + .debug_info - 0x1fe9a - 0x1fe9a + 0x20b59 + 0x20b59 0x12b - + - + .debug_info - 0x1ffc5 - 0x1ffc5 + 0x20c84 + 0x20c84 0x147 - + .debug_info - 0x2010c - 0x2010c + 0x20dcb + 0x20dcb 0x1a6 - + - + .debug_info - 0x202b2 - 0x202b2 + 0x20f71 + 0x20f71 0x1d2 - + .debug_info - 0x20484 - 0x20484 + 0x21143 + 0x21143 0x46 - + .debug_info - 0x204ca - 0x204ca + 0x21189 + 0x21189 0x17a - + - + .debug_info - 0x20644 - 0x20644 + 0x21303 + 0x21303 0x1ea - + .debug_info - 0x2082e - 0x2082e + 0x214ed + 0x214ed 0x46 - + .debug_info - 0x20874 - 0x20874 + 0x21533 + 0x21533 0x2c - + .debug_info - 0x208a0 - 0x208a0 + 0x2155f + 0x2155f 0x170 - + - + .debug_info - 0x20a10 - 0x20a10 + 0x216cf + 0x216cf 0x250 - + .debug_info - 0x20c60 - 0x20c60 + 0x2191f + 0x2191f 0x60 - + - + .debug_info - 0x20cc0 - 0x20cc0 + 0x2197f + 0x2197f 0x46 - + .debug_info - 0x20d06 - 0x20d06 + 0x219c5 + 0x219c5 0x39 - + .debug_info - 0x20d3f - 0x20d3f + 0x219fe + 0x219fe 0x284 - + .debug_info - 0x20fc3 - 0x20fc3 + 0x21c82 + 0x21c82 0x10c - + - + .debug_info - 0x210cf - 0x210cf + 0x21d8e + 0x21d8e 0x13f - + - + .debug_info - 0x2120e - 0x2120e + 0x21ecd + 0x21ecd 0x168 - + - + .debug_info - 0x21376 - 0x21376 + 0x22035 + 0x22035 0x18e - + - + .debug_info - 0x21504 - 0x21504 + 0x221c3 + 0x221c3 0x19f - + - + .debug_info - 0x216a3 - 0x216a3 + 0x22362 + 0x22362 0x203 - + - + .debug_info - 0x218a6 - 0x218a6 + 0x22565 + 0x22565 0x1db - + - + .debug_info - 0x21a81 - 0x21a81 + 0x22740 + 0x22740 0x299 - + - + .debug_info - 0x21d1a - 0x21d1a + 0x229d9 + 0x229d9 0xb2 - + - + .debug_info - 0x21dcc - 0x21dcc + 0x22a8b + 0x22a8b 0x2c - + - + .debug_info - 0x21df8 - 0x21df8 + 0x22ab7 + 0x22ab7 0x161 - + - + .debug_info - 0x21f59 - 0x21f59 + 0x22c18 + 0x22c18 0x245 - + - + .debug_info - 0x2219e - 0x2219e + 0x22e5d + 0x22e5d 0x181 - + - + .debug_info - 0x2231f - 0x2231f + 0x22fde + 0x22fde 0x277 - + .debug_info - 0x22596 - 0x22596 + 0x23255 + 0x23255 0x10b - + .debug_info - 0x226a1 - 0x226a1 + 0x23360 + 0x23360 0x1a9 - - - - .debug_info - 0x2284a - 0x2284a - 0x385 - - - - .debug_info - 0x22bcf - 0x22bcf - 0x1a6 - - - - .debug_info - 0x22d75 - 0x22d75 - 0x39 - - - - .debug_info - 0x22dae - 0x22dae - 0x39 - - - - .debug_info - 0x22de7 - 0x22de7 - 0x39 - - - - .debug_info - 0x22e20 - 0x22e20 - 0xcd - - - - .debug_info - 0x22eed - 0x22eed - 0x153 - - - - .debug_info - 0x23040 - 0x23040 - 0x122 - + .debug_info - 0x23162 - 0x23162 + 0x23509 + 0x23509 + 0x385 + + + + .debug_info + 0x2388e + 0x2388e + 0x1a6 + + + + .debug_info + 0x23a34 + 0x23a34 + 0x39 + + + + .debug_info + 0x23a6d + 0x23a6d + 0x39 + + + + .debug_info + 0x23aa6 + 0x23aa6 + 0x39 + + + + .debug_info + 0x23adf + 0x23adf + 0xcd + + + + .debug_info + 0x23bac + 0x23bac + 0x153 + + + + .debug_info + 0x23cff + 0x23cff + 0x122 + + + + .debug_info + 0x23e21 + 0x23e21 0x19b - + - + .debug_info - 0x232fd - 0x232fd + 0x23fbc + 0x23fbc 0x11e - + - + .debug_info - 0x2341b - 0x2341b + 0x240da + 0x240da 0x12e - + - + .debug_info - 0x23549 - 0x23549 + 0x24208 + 0x24208 0x9d - + .debug_line 0x0 0x0 - 0x125 - - - - .debug_line - 0x125 - 0x125 - 0x33 - - - - .debug_line - 0x158 - 0x158 - 0x33 - - - - .debug_line - 0x18b - 0x18b - 0x33 - - - - .debug_line - 0x1be - 0x1be - 0x33 - - - - .debug_line - 0x1f1 - 0x1f1 - 0x33 - - - - .debug_line - 0x224 - 0x224 - 0x33 - - - - .debug_line - 0x257 - 0x257 - 0x33 - - - - .debug_line - 0x28a - 0x28a - 0x33 - - - - .debug_line - 0x2bd - 0x2bd - 0x33 - - - - .debug_line - 0x2f0 - 0x2f0 - 0x33 - - - - .debug_line - 0x323 - 0x323 - 0x33 - - - - .debug_line - 0x356 - 0x356 - 0x33 - - - - .debug_line - 0x389 - 0x389 - 0x33 - - - - .debug_line - 0x3bc - 0x3bc - 0x33 - - - - .debug_line - 0x3ef - 0x3ef - 0x33 - - - - .debug_line - 0x422 - 0x422 - 0x33 - - - - .debug_line - 0x455 - 0x455 - 0x33 - - - - .debug_line - 0x488 - 0x488 - 0x33 - - - - .debug_line - 0x4bb - 0x4bb - 0x33 - - - - .debug_line - 0x4ee - 0x4ee - 0x33 - - - - .debug_line - 0x521 - 0x521 - 0x33 - - - - .debug_line - 0x554 - 0x554 - 0x33 - - - - .debug_line - 0x587 - 0x587 - 0x33 - - - - .debug_line - 0x5ba - 0x5ba - 0x33 - - - - .debug_line - 0x5ed - 0x5ed - 0x33 - - - - .debug_line - 0x620 - 0x620 - 0x33 - - - - .debug_line - 0x653 - 0x653 - 0x33 - - - - .debug_line - 0x686 - 0x686 - 0x33 - - - - .debug_line - 0x6b9 - 0x6b9 - 0x33 - - - - .debug_line - 0x6ec - 0x6ec - 0x33 - - - - .debug_line - 0x71f - 0x71f - 0x33 - - - - .debug_line - 0x752 - 0x752 - 0x33 - - - - .debug_line - 0x785 - 0x785 - 0x33 - - - - .debug_line - 0x7b8 - 0x7b8 - 0x33 - - - - .debug_line - 0x7eb - 0x7eb - 0x33 - - - - .debug_line - 0x81e - 0x81e - 0x33 - - - - .debug_line - 0x851 - 0x851 - 0x33 - - - - .debug_line - 0x884 - 0x884 - 0x33 - - - - .debug_line - 0x8b7 - 0x8b7 - 0x33 - - - - .debug_line - 0x8ea - 0x8ea - 0x33 - - - - .debug_line - 0x91d - 0x91d - 0x33 - - - - .debug_line - 0x950 - 0x950 - 0x33 - - - - .debug_line - 0x983 - 0x983 - 0x33 - - - - .debug_line - 0x9b6 - 0x9b6 - 0x33 - - - - .debug_line - 0x9e9 - 0x9e9 - 0x33 - - - - .debug_line - 0xa1c - 0xa1c - 0x33 - - - - .debug_line - 0xa4f - 0xa4f - 0x33 - - - - .debug_line - 0xa82 - 0xa82 - 0x33 - - - - .debug_line - 0xab5 - 0xab5 - 0x33 - - - - .debug_line - 0xae8 - 0xae8 - 0x33 - - - - .debug_line - 0xb1b - 0xb1b - 0x33 - - - - .debug_line - 0xb4e - 0xb4e - 0x33 - - - - .debug_line - 0xb81 - 0xb81 - 0x33 - - - - .debug_line - 0xbb4 - 0xbb4 - 0x33 - - - - .debug_line - 0xbe7 - 0xbe7 - 0x33 - - - - .debug_line - 0xc1a - 0xc1a - 0x33 - - - - .debug_line - 0xc4d - 0xc4d - 0x33 - - - - .debug_line - 0xc80 - 0xc80 - 0x33 - - - - .debug_line - 0xcb3 - 0xcb3 - 0x33 - - - - .debug_line - 0xce6 - 0xce6 - 0x33 - - - - .debug_line - 0xd19 - 0xd19 - 0x33 - - - - .debug_line - 0xd4c - 0xd4c - 0x33 - - - - .debug_line - 0xd7f - 0xd7f - 0x33 - - - - .debug_line - 0xdb2 - 0xdb2 - 0x33 - - - - .debug_line - 0xde5 - 0xde5 - 0x33 - - - - .debug_line - 0xe18 - 0xe18 - 0x33 - - - - .debug_line - 0xe4b - 0xe4b - 0x33 - - - - .debug_line - 0xe7e - 0xe7e - 0x33 - - - - .debug_line - 0xeb1 - 0xeb1 - 0x18e - - - - .debug_line - 0x103f - 0x103f - 0x179 - - - - .debug_line - 0x11b8 - 0x11b8 - 0x6d - - - - .debug_line - 0x1225 - 0x1225 - 0x57 - - - - .debug_line - 0x127c - 0x127c - 0x156 - - - - .debug_line - 0x13d2 - 0x13d2 - 0x4e - - - - .debug_line - 0x1420 - 0x1420 - 0x1b2 - - - - .debug_line - 0x15d2 - 0x15d2 - 0x52 - - - - .debug_line - 0x1624 - 0x1624 - 0x89 - - - - .debug_line - 0x16ad - 0x16ad - 0xcf - - - - .debug_line - 0x177c - 0x177c 0x48 - + .debug_line - 0x17c4 - 0x17c4 - 0x48 + 0x48 + 0x48 + 0x53 - + .debug_line - 0x180c - 0x180c - 0x48 + 0x9b + 0x9b + 0x53 - + .debug_line - 0x1854 - 0x1854 - 0x48 + 0xee + 0xee + 0x50 - + .debug_line - 0x189c - 0x189c - 0x48 - - - - .debug_line - 0x18e4 - 0x18e4 - 0xba - - - - .debug_line - 0x199e - 0x199e - 0x9c - - - - .debug_line - 0x1a3a - 0x1a3a - 0x91 - - - - .debug_line - 0x1acb - 0x1acb - 0x48 - - - - .debug_line - 0x1b13 - 0x1b13 - 0x51 - - - - .debug_line - 0x1b64 - 0x1b64 - 0x45 - - - - .debug_line - 0x1ba9 - 0x1ba9 - 0x30 - - - - .debug_line - 0x1bd9 - 0x1bd9 - 0x33 - - - - .debug_line - 0x1c0c - 0x1c0c + 0x13e + 0x13e 0x6b - + .debug_line - 0x1c77 - 0x1c77 + 0x1a9 + 0x1a9 0x2c - + .debug_line - 0x1ca3 - 0x1ca3 + 0x1d5 + 0x1d5 0x6f - + .debug_line - 0x1d12 - 0x1d12 + 0x244 + 0x244 0x30 - + .debug_line - 0x1d42 - 0x1d42 + 0x274 + 0x274 0x30 - + .debug_line - 0x1d72 - 0x1d72 + 0x2a4 + 0x2a4 + 0x30 + + + + .debug_line + 0x2d4 + 0x2d4 0x2f - - .debug_line - 0x1da1 - 0x1da1 - 0x30 - - .debug_line - 0x1dd1 - 0x1dd1 + 0x303 + 0x303 0x20 - + .debug_line - 0x1df1 - 0x1df1 + 0x323 + 0x323 0x73 .debug_line - 0x1e64 - 0x1e64 + 0x396 + 0x396 0x70 - + .debug_line - 0x1ed4 - 0x1ed4 + 0x406 + 0x406 0x74 - + .debug_line - 0x1f48 - 0x1f48 - 0xd2 - - - - .debug_line - 0x201a - 0x201a - 0x40 - - - - .debug_line - 0x205a - 0x205a - 0x30 - - - - .debug_line - 0x208a - 0x208a - 0x30 - - - - .debug_line - 0x20ba - 0x20ba - 0x30 - - - - .debug_line - 0x20ea - 0x20ea - 0x30 - - - - .debug_line - 0x211a - 0x211a - 0x30 - - - - .debug_line - 0x214a - 0x214a - 0x30 - - - - .debug_line - 0x217a - 0x217a - 0x30 - - - - .debug_line - 0x21aa - 0x21aa - 0x30 - - - - .debug_line - 0x21da - 0x21da - 0x30 - - - - .debug_line - 0x220a - 0x220a - 0x30 - - - - .debug_line - 0x223a - 0x223a - 0x30 - - - - .debug_line - 0x226a - 0x226a - 0x30 - - - - .debug_line - 0x229a - 0x229a - 0x30 - - - - .debug_line - 0x22ca - 0x22ca - 0x30 - - - - .debug_line - 0x22fa - 0x22fa - 0x30 - - - - .debug_line - 0x232a - 0x232a - 0x30 + 0x47a + 0x47a + 0x125 .debug_line - 0x235a - 0x235a - 0x30 + 0x59f + 0x59f + 0x33 .debug_line - 0x238a - 0x238a - 0x30 + 0x5d2 + 0x5d2 + 0x33 .debug_line - 0x23ba - 0x23ba - 0x30 + 0x605 + 0x605 + 0x33 + + + + .debug_line + 0x638 + 0x638 + 0x33 + + + + .debug_line + 0x66b + 0x66b + 0x33 + + + + .debug_line + 0x69e + 0x69e + 0x33 + + + + .debug_line + 0x6d1 + 0x6d1 + 0x33 + + + + .debug_line + 0x704 + 0x704 + 0x33 + + + + .debug_line + 0x737 + 0x737 + 0x33 + + + + .debug_line + 0x76a + 0x76a + 0x33 + + + + .debug_line + 0x79d + 0x79d + 0x33 + + + + .debug_line + 0x7d0 + 0x7d0 + 0x33 + + + + .debug_line + 0x803 + 0x803 + 0x33 + + + + .debug_line + 0x836 + 0x836 + 0x33 + + + + .debug_line + 0x869 + 0x869 + 0x33 + + + + .debug_line + 0x89c + 0x89c + 0x33 + + + + .debug_line + 0x8cf + 0x8cf + 0x33 + + + + .debug_line + 0x902 + 0x902 + 0x33 + + + + .debug_line + 0x935 + 0x935 + 0x33 + + + + .debug_line + 0x968 + 0x968 + 0x33 + + + + .debug_line + 0x99b + 0x99b + 0x33 + + + + .debug_line + 0x9ce + 0x9ce + 0x33 + + + + .debug_line + 0xa01 + 0xa01 + 0x33 + + + + .debug_line + 0xa34 + 0xa34 + 0x33 + + + + .debug_line + 0xa67 + 0xa67 + 0x33 + + + + .debug_line + 0xa9a + 0xa9a + 0x33 + + + + .debug_line + 0xacd + 0xacd + 0x33 + + + + .debug_line + 0xb00 + 0xb00 + 0x33 + + + + .debug_line + 0xb33 + 0xb33 + 0x33 + + + + .debug_line + 0xb66 + 0xb66 + 0x33 + + + + .debug_line + 0xb99 + 0xb99 + 0x33 + + + + .debug_line + 0xbcc + 0xbcc + 0x33 + + + + .debug_line + 0xbff + 0xbff + 0x33 + + + + .debug_line + 0xc32 + 0xc32 + 0x33 + + + + .debug_line + 0xc65 + 0xc65 + 0x33 + + + + .debug_line + 0xc98 + 0xc98 + 0x33 + + + + .debug_line + 0xccb + 0xccb + 0x33 + + + + .debug_line + 0xcfe + 0xcfe + 0x33 + + + + .debug_line + 0xd31 + 0xd31 + 0x33 + + + + .debug_line + 0xd64 + 0xd64 + 0x33 + + + + .debug_line + 0xd97 + 0xd97 + 0x33 + + + + .debug_line + 0xdca + 0xdca + 0x33 + + + + .debug_line + 0xdfd + 0xdfd + 0x33 + + + + .debug_line + 0xe30 + 0xe30 + 0x33 + + + + .debug_line + 0xe63 + 0xe63 + 0x33 + + + + .debug_line + 0xe96 + 0xe96 + 0x33 + + + + .debug_line + 0xec9 + 0xec9 + 0x33 + + + + .debug_line + 0xefc + 0xefc + 0x33 + + + + .debug_line + 0xf2f + 0xf2f + 0x33 + + + + .debug_line + 0xf62 + 0xf62 + 0x33 + + + + .debug_line + 0xf95 + 0xf95 + 0x33 .debug_line - 0x23ea - 0x23ea - 0x30 + 0xfc8 + 0xfc8 + 0x33 - + .debug_line - 0x241a - 0x241a - 0x30 + 0xffb + 0xffb + 0x33 - + .debug_line - 0x244a - 0x244a - 0x30 + 0x102e + 0x102e + 0x33 - + .debug_line - 0x247a - 0x247a - 0x30 + 0x1061 + 0x1061 + 0x33 - + .debug_line - 0x24aa - 0x24aa - 0x30 + 0x1094 + 0x1094 + 0x33 - + .debug_line - 0x24da - 0x24da - 0x30 + 0x10c7 + 0x10c7 + 0x33 - + .debug_line - 0x250a - 0x250a - 0x30 + 0x10fa + 0x10fa + 0x33 - + .debug_line - 0x253a - 0x253a - 0x30 + 0x112d + 0x112d + 0x33 - + .debug_line - 0x256a - 0x256a - 0x64 + 0x1160 + 0x1160 + 0x33 - + .debug_line - 0x25ce - 0x25ce - 0x5f + 0x1193 + 0x1193 + 0x33 - + .debug_line - 0x262d - 0x262d - 0x50 + 0x11c6 + 0x11c6 + 0x33 - + .debug_line - 0x267d - 0x267d - 0x5d + 0x11f9 + 0x11f9 + 0x33 - + .debug_line - 0x26da - 0x26da - 0x87 + 0x122c + 0x122c + 0x33 - + .debug_line - 0x2761 - 0x2761 - 0x4c + 0x125f + 0x125f + 0x33 - + .debug_line - 0x27ad - 0x27ad - 0x4c + 0x1292 + 0x1292 + 0x33 - + .debug_line - 0x27f9 - 0x27f9 - 0x50 + 0x12c5 + 0x12c5 + 0x33 - + .debug_line - 0x2849 - 0x2849 - 0xc0 + 0x12f8 + 0x12f8 + 0x33 - + .debug_line - 0x2909 - 0x2909 - 0x76 + 0x132b + 0x132b + 0x18e - - .debug_line - 0x297f - 0x297f - 0x45 - - - - .debug_line - 0x29c4 - 0x29c4 - 0xaf - - - - .debug_line - 0x2a73 - 0x2a73 - 0x31 - - - - .debug_line - 0x2aa4 - 0x2aa4 - 0x56 - - - - .debug_line - 0x2afa - 0x2afa - 0x5d - - - - .debug_line - 0x2b57 - 0x2b57 - 0x5e - - - - .debug_line - 0x2bb5 - 0x2bb5 - 0x5d - - - - .debug_line - 0x2c12 - 0x2c12 - 0x56 - - - - .debug_line - 0x2c68 - 0x2c68 - 0xc4 - - - - .debug_line - 0x2d2c - 0x2d2c - 0x60 - - - - .debug_line - 0x2d8c - 0x2d8c - 0xb6 - - - - .debug_line - 0x2e42 - 0x2e42 - 0x14e - - - - .debug_line - 0x2f90 - 0x2f90 - 0x61 - - .debug_line - 0x2ff1 - 0x2ff1 - 0xc2 - + 0x14b9 + 0x14b9 + 0x179 + - + .debug_line - 0x30b3 - 0x30b3 - 0x77 - + 0x1632 + 0x1632 + 0x6d + - + .debug_line - 0x312a - 0x312a - 0x9b - - - - .debug_line - 0x31c5 - 0x31c5 - 0x52 - - - - .debug_line - 0x3217 - 0x3217 - 0x48 - - - - .debug_line - 0x325f - 0x325f + 0x169f + 0x169f 0x58 - + - + .debug_line - 0x32b7 - 0x32b7 - 0xa8 - + 0x16f7 + 0x16f7 + 0xf4 + - + .debug_line - 0x335f - 0x335f - 0x30 - + 0x17eb + 0x17eb + 0x4e + + + + .debug_line + 0x1839 + 0x1839 + 0x1b2 + + + + .debug_line + 0x19eb + 0x19eb + 0x89 + .debug_line - 0x338f - 0x338f - 0x4a - + 0x1a74 + 0x1a74 + 0xcf + - + .debug_line - 0x33d9 - 0x33d9 + 0x1b43 + 0x1b43 0x48 - + - + .debug_line - 0x3421 - 0x3421 - 0x50 - + 0x1b8b + 0x1b8b + 0x48 + - + .debug_line - 0x3471 - 0x3471 - 0x49 - + 0x1bd3 + 0x1bd3 + 0x48 + - + .debug_line - 0x34ba - 0x34ba - 0x92 - + 0x1c1b + 0x1c1b + 0xb3 + - + .debug_line - 0x354c - 0x354c - 0x5a - - - - .debug_line - 0x35a6 - 0x35a6 - 0x46 - - - - .debug_line - 0x35ec - 0x35ec - 0x50 - - - - .debug_line - 0x363c - 0x363c - 0x2a3 - - - - .debug_line - 0x38df - 0x38df - 0x84 - - - - .debug_line - 0x3963 - 0x3963 - 0x49 - - - - .debug_line - 0x39ac - 0x39ac - 0x14b - - - - .debug_line - 0x3af7 - 0x3af7 - 0x45 - - - - .debug_line - 0x3b3c - 0x3b3c - 0x26d - - - - .debug_line - 0x3da9 - 0x3da9 - 0x15f - - - - .debug_line - 0x3f08 - 0x3f08 - 0xb9 - - - - .debug_line - 0x3fc1 - 0x3fc1 - 0xae - - - - .debug_line - 0x406f - 0x406f - 0xc2 - - - - .debug_line - 0x4131 - 0x4131 - 0x62 - - - - .debug_line - 0x4193 - 0x4193 - 0x1aa - - - - .debug_line - 0x433d - 0x433d - 0x53 - - - - .debug_line - 0x4390 - 0x4390 - 0x55 - - - - .debug_line - 0x43e5 - 0x43e5 - 0x53 - - - - .debug_line - 0x4438 - 0x4438 - 0x55 - - - - .debug_line - 0x448d - 0x448d - 0x53 - - - - .debug_line - 0x44e0 - 0x44e0 - 0x55 - + 0x1cce + 0x1cce + 0x9c + .debug_line - 0x4535 - 0x4535 - 0x53 - - - - .debug_line - 0x4588 - 0x4588 - 0x55 - - - - .debug_line - 0x45dd - 0x45dd - 0x50 - - - - .debug_line - 0x462d - 0x462d - 0xc2 - - - - .debug_line - 0x46ef - 0x46ef - 0x53 - - - - .debug_line - 0x4742 - 0x4742 - 0x50 - - - - .debug_line - 0x4792 - 0x4792 - 0x53 - - - - .debug_line - 0x47e5 - 0x47e5 - 0x55 - - - - .debug_line - 0x483a - 0x483a - 0x53 - - - - .debug_line - 0x488d - 0x488d - 0x55 - - - - .debug_line - 0x48e2 - 0x48e2 - 0x53 - - - - .debug_line - 0x4935 - 0x4935 - 0x55 - - - - .debug_line - 0x498a - 0x498a - 0x50 - - - - .debug_line - 0x49da - 0x49da - 0x55 - - - - .debug_line - 0x4a2f - 0x4a2f - 0x5d - - - - .debug_line - 0x4a8c - 0x4a8c - 0x180 - - - - .debug_line - 0x4c0c - 0x4c0c - 0xab - - - - .debug_line - 0x4cb7 - 0x4cb7 - 0xac - - - - .debug_line - 0x4d63 - 0x4d63 - 0xa3 - - - - .debug_line - 0x4e06 - 0x4e06 - 0xa3 - - - - .debug_line - 0x4ea9 - 0x4ea9 - 0xa3 - - - - .debug_line - 0x4f4c - 0x4f4c - 0x6d - - - - .debug_line - 0x4fb9 - 0x4fb9 - 0x6b - - - - .debug_line - 0x5024 - 0x5024 - 0x6a - - - - .debug_line - 0x508e - 0x508e - 0x68 - - - - .debug_line - 0x50f6 - 0x50f6 - 0x20 - - - - .debug_line - 0x5116 - 0x5116 - 0x8d - - - - .debug_line - 0x51a3 - 0x51a3 - 0x6b - - - - .debug_line - 0x520e - 0x520e - 0x6b - - - - .debug_line - 0x5279 - 0x5279 - 0x4b - - - - .debug_line - 0x52c4 - 0x52c4 - 0x11b - - - - .debug_line - 0x53df - 0x53df - 0x58 - - - - .debug_line - 0x5437 - 0x5437 - 0x49 - - - - .debug_line - 0x5480 - 0x5480 - 0x55 - - - - .debug_line - 0x54d5 - 0x54d5 - 0x94 - - - - .debug_line - 0x5569 - 0x5569 - 0x99 - - - - .debug_line - 0x5602 - 0x5602 - 0x71 - - - - .debug_line - 0x5673 - 0x5673 - 0x78 - - - - .debug_line - 0x56eb - 0x56eb - 0x76 - - - - .debug_line - 0x5761 - 0x5761 - 0x9d - - - - .debug_line - 0x57fe - 0x57fe - 0x5d - - - - .debug_line - 0x585b - 0x585b - 0x5b - - - - .debug_line - 0x58b6 - 0x58b6 - 0x6e - - - - .debug_line - 0x5924 - 0x5924 - 0x73 - - - - .debug_line - 0x5997 - 0x5997 - 0xc2 - - - - .debug_line - 0x5a59 - 0x5a59 - 0x2f - - - - .debug_line - 0x5a88 - 0x5a88 - 0x2f - - - - .debug_line - 0x5ab7 - 0x5ab7 - 0x2f - - - - .debug_line - 0x5ae6 - 0x5ae6 - 0x4e - - - - .debug_line - 0x5b34 - 0x5b34 - 0xb3 - - - - .debug_line - 0x5be7 - 0x5be7 - 0x79 - - - - .debug_line - 0x5c60 - 0x5c60 - 0x29b - - - - .debug_line - 0x5efb - 0x5efb - 0x21b - - - - .debug_line - 0x6116 - 0x6116 - 0xb7 - - - - .debug_line - 0x61cd - 0x61cd - 0xb2 - - - - .debug_line - 0x627f - 0x627f - 0x4b - - - - .debug_line - 0x62ca - 0x62ca - 0x44 - - - - .debug_line - 0x630e - 0x630e - 0x7d - - - - .debug_line - 0x638b - 0x638b - 0x52 - - - - .debug_line - 0x63dd - 0x63dd - 0xb4 - - - - .debug_line - 0x6491 - 0x6491 - 0xd3 - - - - .debug_line - 0x6564 - 0x6564 - 0x30 - - - - .debug_line - 0x6594 - 0x6594 - 0x30 - - - - .debug_line - 0x65c4 - 0x65c4 - 0xa4 - - - - .debug_line - 0x6668 - 0x6668 - 0x8b - - - - .debug_line - 0x66f3 - 0x66f3 - 0xba - - - - .debug_line - 0x67ad - 0x67ad - 0x20f - - - - .debug_line - 0x69bc - 0x69bc - 0x1a4 - - - - .debug_line - 0x6b60 - 0x6b60 - 0xb7 - - - - .debug_line - 0x6c17 - 0x6c17 - 0x341 - - - - .debug_line - 0x6f58 - 0x6f58 - 0x33 - - - - .debug_line - 0x6f8b - 0x6f8b - 0x33 - - - - .debug_line - 0x6fbe - 0x6fbe - 0x45 - - - - .debug_line - 0x7003 - 0x7003 - 0x48 - - - - .debug_line - 0x704b - 0x704b - 0x48 - - - - .debug_line - 0x7093 - 0x7093 - 0x48 - - - - .debug_line - 0x70db - 0x70db - 0x55 - - - - .debug_line - 0x7130 - 0x7130 - 0xf0 - - - - .debug_line - 0x7220 - 0x7220 + 0x1d6a + 0x1d6a 0x91 - + - + .debug_line - 0x72b1 - 0x72b1 - 0x98 - + 0x1dfb + 0x1dfb + 0x51 + - + .debug_line - 0x7349 - 0x7349 - 0x98 - + 0x1e4c + 0x1e4c + 0x33 + - + .debug_line - 0x73e1 - 0x73e1 - 0x92 - + 0x1e7f + 0x1e7f + 0x30 + - + .debug_line - 0x7473 - 0x7473 - 0x72 - + 0x1eaf + 0x1eaf + 0x77 + - + .debug_line - 0x74e5 - 0x74e5 - 0x73 - + 0x1f26 + 0x1f26 + 0x40 + - + .debug_line - 0x7558 - 0x7558 - 0x20 - + 0x1f66 + 0x1f66 + 0x30 + - + .debug_line - 0x7578 - 0x7578 - 0xa3 - + 0x1f96 + 0x1f96 + 0x30 + - + .debug_line - 0x761b - 0x761b - 0xa6 - + 0x1fc6 + 0x1fc6 + 0x30 + - + .debug_line - 0x76c1 - 0x76c1 - 0x8f - + 0x1ff6 + 0x1ff6 + 0x30 + - + .debug_line - 0x7750 - 0x7750 - 0x8d - + 0x2026 + 0x2026 + 0x30 + - + .debug_line - 0x77dd - 0x77dd - 0xd2 - + 0x2056 + 0x2056 + 0x30 + - + .debug_line - 0x78af - 0x78af - 0x8e - + 0x2086 + 0x2086 + 0x30 + - + .debug_line - 0x793d - 0x793d - 0x5a - + 0x20b6 + 0x20b6 + 0x30 + - + .debug_line - 0x7997 - 0x7997 - 0x66 - + 0x20e6 + 0x20e6 + 0x30 + - + .debug_line - 0x79fd - 0x79fd - 0x6e - + 0x2116 + 0x2116 + 0x30 + - + .debug_line - 0x7a6b - 0x7a6b - 0x57 - + 0x2146 + 0x2146 + 0x30 + - + .debug_line - 0x7ac2 - 0x7ac2 - 0x54 - + 0x2176 + 0x2176 + 0x30 + - + .debug_line - 0x7b16 - 0x7b16 + 0x21a6 + 0x21a6 + 0x30 + + + + .debug_line + 0x21d6 + 0x21d6 + 0x30 + + + + .debug_line + 0x2206 + 0x2206 + 0x30 + + + + .debug_line + 0x2236 + 0x2236 + 0x30 + + + + .debug_line + 0x2266 + 0x2266 + 0x30 + + + + .debug_line + 0x2296 + 0x2296 + 0x30 + + + + .debug_line + 0x22c6 + 0x22c6 + 0x30 + + + + .debug_line + 0x22f6 + 0x22f6 + 0x30 + + + + .debug_line + 0x2326 + 0x2326 + 0x30 + + + + .debug_line + 0x2356 + 0x2356 + 0x30 + + + + .debug_line + 0x2386 + 0x2386 + 0x30 + + + + .debug_line + 0x23b6 + 0x23b6 + 0x30 + + + + .debug_line + 0x23e6 + 0x23e6 + 0x30 + + + + .debug_line + 0x2416 + 0x2416 + 0x30 + + + + .debug_line + 0x2446 + 0x2446 + 0x30 + + + + .debug_line + 0x2476 + 0x2476 + 0x64 + + + + .debug_line + 0x24da + 0x24da + 0x5f + + + + .debug_line + 0x2539 + 0x2539 0x50 - + - + .debug_line - 0x7b66 - 0x7b66 - 0x88 - + 0x2589 + 0x2589 + 0x5d + - + .debug_line - 0x7bee - 0x7bee - 0x4e - + 0x25e6 + 0x25e6 + 0x87 + - + .debug_line - 0x7c3c - 0x7c3c - 0x79 - - - - .debug_line - 0x7cb5 - 0x7cb5 - 0x92 - - - - .debug_line - 0x7d47 - 0x7d47 + 0x266d + 0x266d 0x4c - + - + .debug_line - 0x7d93 - 0x7d93 - 0x34 - + 0x26b9 + 0x26b9 + 0x4c + - + .debug_line - 0x7dc7 - 0x7dc7 - 0x20 - - - - .debug_line - 0x7de7 - 0x7de7 - 0x55 - - - - .debug_line - 0x7e3c - 0x7e3c - 0x3a - - - - .debug_line - 0x7e76 - 0x7e76 - 0x92 - - - - .debug_line - 0x7f08 - 0x7f08 - 0x20 - - - - .debug_line - 0x7f28 - 0x7f28 - 0xa9 - - - - .debug_line - 0x7fd1 - 0x7fd1 - 0x3a - - - - .debug_line - 0x800b - 0x800b - 0x9a - - - - .debug_line - 0x80a5 - 0x80a5 - 0x96 - - - - .debug_line - 0x813b - 0x813b - 0x10f - - - - .debug_line - 0x824a - 0x824a - 0x2c - - - - .debug_line - 0x8276 - 0x8276 - 0x2c - - - - .debug_line - 0x82a2 - 0x82a2 - 0x41 - - - - .debug_line - 0x82e3 - 0x82e3 + 0x2705 + 0x2705 0x50 - + - + .debug_line - 0x8333 - 0x8333 - 0x55 - + 0x2755 + 0x2755 + 0x84 + - + .debug_line - 0x8388 - 0x8388 - 0xd0 - - - - .debug_line - 0x8458 - 0x8458 - 0x98 - - - - .debug_line - 0x84f0 - 0x84f0 - 0x112 - - - - .debug_line - 0x8602 - 0x8602 - 0x2c - - - - .debug_line - 0x862e - 0x862e - 0x92 - - - - .debug_line - 0x86c0 - 0x86c0 - 0x20 - - - - .debug_line - 0x86e0 - 0x86e0 - 0xae - - - - .debug_line - 0x878e - 0x878e - 0x20 - + 0x27d9 + 0x27d9 + 0x42 + .debug_line - 0x87ae - 0x87ae - 0xb7 - - - - .debug_line - 0x8865 - 0x8865 - 0x33 - - - - .debug_line - 0x8898 - 0x8898 + 0x281b + 0x281b 0x45 - + - + .debug_line - 0x88dd - 0x88dd - 0xbf - + 0x2860 + 0x2860 + 0xaf + - + .debug_line - 0x899c - 0x899c - 0x6f - + 0x290f + 0x290f + 0x31 + - + .debug_line - 0x8a0b - 0x8a0b - 0x2e - + 0x2940 + 0x2940 + 0x56 + + + + .debug_line + 0x2996 + 0x2996 + 0x5b + + + + .debug_line + 0x29f1 + 0x29f1 + 0x52 + + + + .debug_line + 0x2a43 + 0x2a43 + 0x5d + + + + .debug_line + 0x2aa0 + 0x2aa0 + 0x53 + + + + .debug_line + 0x2af3 + 0x2af3 + 0xc5 + + + + .debug_line + 0x2bb8 + 0x2bb8 + 0x60 + + + + .debug_line + 0x2c18 + 0x2c18 + 0xd3 + + + + .debug_line + 0x2ceb + 0x2ceb + 0x14e + + + + .debug_line + 0x2e39 + 0x2e39 + 0x61 + + + + .debug_line + 0x2e9a + 0x2e9a + 0x9f + + + + .debug_line + 0x2f39 + 0x2f39 + 0x78 + + + + .debug_line + 0x2fb1 + 0x2fb1 + 0x9b + + + + .debug_line + 0x304c + 0x304c + 0x52 + + + + .debug_line + 0x309e + 0x309e + 0x42 + + + + .debug_line + 0x30e0 + 0x30e0 + 0x5a + + + + .debug_line + 0x313a + 0x313a + 0x9b + + + + .debug_line + 0x31d5 + 0x31d5 + 0x1f0 + + + + .debug_line + 0x33c5 + 0x33c5 + 0x4c + + + + .debug_line + 0x3411 + 0x3411 + 0x4b + + + + .debug_line + 0x345c + 0x345c + 0x30 + + + + .debug_line + 0x348c + 0x348c + 0xa8 + + + + .debug_line + 0x3534 + 0x3534 + 0x30 + + + + .debug_line + 0x3564 + 0x3564 + 0x4a + + + + .debug_line + 0x35ae + 0x35ae + 0x48 + + + + .debug_line + 0x35f6 + 0x35f6 + 0x50 + + + + .debug_line + 0x3646 + 0x3646 + 0x49 + + + + .debug_line + 0x368f + 0x368f + 0x92 + + + + .debug_line + 0x3721 + 0x3721 + 0x60 + + + + .debug_line + 0x3781 + 0x3781 + 0x46 + + + + .debug_line + 0x37c7 + 0x37c7 + 0x50 + + + + .debug_line + 0x3817 + 0x3817 + 0x2cf + + + + .debug_line + 0x3ae6 + 0x3ae6 + 0x72 + + + + .debug_line + 0x3b58 + 0x3b58 + 0x49 + + + + .debug_line + 0x3ba1 + 0x3ba1 + 0x151 + + + + .debug_line + 0x3cf2 + 0x3cf2 + 0x45 + + + + .debug_line + 0x3d37 + 0x3d37 + 0x263 + + + + .debug_line + 0x3f9a + 0x3f9a + 0x1a8 + + + + .debug_line + 0x4142 + 0x4142 + 0xb1 + + + + .debug_line + 0x41f3 + 0x41f3 + 0xa1 + + + + .debug_line + 0x4294 + 0x4294 + 0xce + + + + .debug_line + 0x4362 + 0x4362 + 0x62 + + + + .debug_line + 0x43c4 + 0x43c4 + 0x1aa + + + + .debug_line + 0x456e + 0x456e + 0x53 + + + + .debug_line + 0x45c1 + 0x45c1 + 0x55 + + + + .debug_line + 0x4616 + 0x4616 + 0x53 + + + + .debug_line + 0x4669 + 0x4669 + 0x55 + + + + .debug_line + 0x46be + 0x46be + 0x53 + + + + .debug_line + 0x4711 + 0x4711 + 0x55 + + + + .debug_line + 0x4766 + 0x4766 + 0x53 + + + + .debug_line + 0x47b9 + 0x47b9 + 0x55 + + + + .debug_line + 0x480e + 0x480e + 0x50 + + + + .debug_line + 0x485e + 0x485e + 0xc2 + + + + .debug_line + 0x4920 + 0x4920 + 0x53 + + + + .debug_line + 0x4973 + 0x4973 + 0x50 + + + + .debug_line + 0x49c3 + 0x49c3 + 0x53 + + + + .debug_line + 0x4a16 + 0x4a16 + 0x55 + + + + .debug_line + 0x4a6b + 0x4a6b + 0x53 + + + + .debug_line + 0x4abe + 0x4abe + 0x55 + + + + .debug_line + 0x4b13 + 0x4b13 + 0x53 + + + + .debug_line + 0x4b66 + 0x4b66 + 0x55 + + + + .debug_line + 0x4bbb + 0x4bbb + 0x50 + + + + .debug_line + 0x4c0b + 0x4c0b + 0x55 + + + + .debug_line + 0x4c60 + 0x4c60 + 0x5d + + + + .debug_line + 0x4cbd + 0x4cbd + 0x180 + + + + .debug_line + 0x4e3d + 0x4e3d + 0xab + + + + .debug_line + 0x4ee8 + 0x4ee8 + 0xac + + + + .debug_line + 0x4f94 + 0x4f94 + 0xa3 + + + + .debug_line + 0x5037 + 0x5037 + 0xa3 + + + + .debug_line + 0x50da + 0x50da + 0xa3 + + + + .debug_line + 0x517d + 0x517d + 0x6d + + + + .debug_line + 0x51ea + 0x51ea + 0x6b + + + + .debug_line + 0x5255 + 0x5255 + 0x6a + + + + .debug_line + 0x52bf + 0x52bf + 0x68 + + + + .debug_line + 0x5327 + 0x5327 + 0x20 + + + + .debug_line + 0x5347 + 0x5347 + 0x8d + + + + .debug_line + 0x53d4 + 0x53d4 + 0x6b + + + + .debug_line + 0x543f + 0x543f + 0x6b + + + + .debug_line + 0x54aa + 0x54aa + 0x4b + + + + .debug_line + 0x54f5 + 0x54f5 + 0x56 + + + + .debug_line + 0x554b + 0x554b + 0x4b + + + + .debug_line + 0x5596 + 0x5596 + 0x51 + + + + .debug_line + 0x55e7 + 0x55e7 + 0x48 + + + + .debug_line + 0x562f + 0x562f + 0x50 + + + + .debug_line + 0x567f + 0x567f + 0x4b + + + + .debug_line + 0x56ca + 0x56ca + 0x45 + + + + .debug_line + 0x570f + 0x570f + 0x11b + + + + .debug_line + 0x582a + 0x582a + 0x58 + + + + .debug_line + 0x5882 + 0x5882 + 0x4b + + + + .debug_line + 0x58cd + 0x58cd + 0x55 + + + + .debug_line + 0x5922 + 0x5922 + 0x94 + + + + .debug_line + 0x59b6 + 0x59b6 + 0x9c + + + + .debug_line + 0x5a52 + 0x5a52 + 0x9b + + + + .debug_line + 0x5aed + 0x5aed + 0x78 + + + + .debug_line + 0x5b65 + 0x5b65 + 0x76 + + + + .debug_line + 0x5bdb + 0x5bdb + 0x9d + + + + .debug_line + 0x5c78 + 0x5c78 + 0x5d + + + + .debug_line + 0x5cd5 + 0x5cd5 + 0x5b + + + + .debug_line + 0x5d30 + 0x5d30 + 0x7b + + + + .debug_line + 0x5dab + 0x5dab + 0x73 + + + + .debug_line + 0x5e1e + 0x5e1e + 0xd8 + + + + .debug_line + 0x5ef6 + 0x5ef6 + 0x2f + + + + .debug_line + 0x5f25 + 0x5f25 + 0x2f + + + + .debug_line + 0x5f54 + 0x5f54 + 0x2f + + + + .debug_line + 0x5f83 + 0x5f83 + 0x4e + + + + .debug_line + 0x5fd1 + 0x5fd1 + 0xca + + + + .debug_line + 0x609b + 0x609b + 0x79 + + + + .debug_line + 0x6114 + 0x6114 + 0x1f9 + + + + .debug_line + 0x630d + 0x630d + 0x17d + + + + .debug_line + 0x648a + 0x648a + 0xbc + + + + .debug_line + 0x6546 + 0x6546 + 0x5c + + + + .debug_line + 0x65a2 + 0x65a2 + 0x4b + + + + .debug_line + 0x65ed + 0x65ed + 0x44 + + + + .debug_line + 0x6631 + 0x6631 + 0x7d + + + + .debug_line + 0x66ae + 0x66ae + 0x52 + + + + .debug_line + 0x6700 + 0x6700 + 0xb4 + + + + .debug_line + 0x67b4 + 0x67b4 + 0x88 + + + + .debug_line + 0x683c + 0x683c + 0x30 + + + + .debug_line + 0x686c + 0x686c + 0x92 + + + + .debug_line + 0x68fe + 0x68fe + 0x186 + + + + .debug_line + 0x6a84 + 0x6a84 + 0x103 + + + + .debug_line + 0x6b87 + 0x6b87 + 0x33 + + + + .debug_line + 0x6bba + 0x6bba + 0x33 + + + + .debug_line + 0x6bed + 0x6bed + 0x45 + + + + .debug_line + 0x6c32 + 0x6c32 + 0x48 + + + + .debug_line + 0x6c7a + 0x6c7a + 0x48 + + + + .debug_line + 0x6cc2 + 0x6cc2 + 0x48 + + + + .debug_line + 0x6d0a + 0x6d0a + 0x55 + + + + .debug_line + 0x6d5f + 0x6d5f + 0xf0 + + + + .debug_line + 0x6e4f + 0x6e4f + 0x91 + + + + .debug_line + 0x6ee0 + 0x6ee0 + 0x98 + + + + .debug_line + 0x6f78 + 0x6f78 + 0x98 + + + + .debug_line + 0x7010 + 0x7010 + 0x92 + + + + .debug_line + 0x70a2 + 0x70a2 + 0x72 + + + + .debug_line + 0x7114 + 0x7114 + 0x73 + + + + .debug_line + 0x7187 + 0x7187 + 0x20 + + + + .debug_line + 0x71a7 + 0x71a7 + 0xa3 + + + + .debug_line + 0x724a + 0x724a + 0xa6 + + + + .debug_line + 0x72f0 + 0x72f0 + 0x8f + + + + .debug_line + 0x737f + 0x737f + 0x8d + + + + .debug_line + 0x740c + 0x740c + 0xd2 + + + + .debug_line + 0x74de + 0x74de + 0x8e + + + + .debug_line + 0x756c + 0x756c + 0x5a + + + + .debug_line + 0x75c6 + 0x75c6 + 0x66 + + + + .debug_line + 0x762c + 0x762c + 0x6e + .debug_line - 0x8a39 - 0x8a39 + 0x769a + 0x769a + 0x57 + + + + .debug_line + 0x76f1 + 0x76f1 + 0x54 + + + + .debug_line + 0x7745 + 0x7745 + 0x50 + + + + .debug_line + 0x7795 + 0x7795 + 0x88 + + + + .debug_line + 0x781d + 0x781d + 0x4e + + + + .debug_line + 0x786b + 0x786b + 0x79 + + + + .debug_line + 0x78e4 + 0x78e4 + 0x92 + + + + .debug_line + 0x7976 + 0x7976 + 0x4c + + + + .debug_line + 0x79c2 + 0x79c2 + 0x34 + + + + .debug_line + 0x79f6 + 0x79f6 + 0x20 + + + + .debug_line + 0x7a16 + 0x7a16 + 0x55 + + + + .debug_line + 0x7a6b + 0x7a6b + 0x3a + + + + .debug_line + 0x7aa5 + 0x7aa5 + 0x92 + + + + .debug_line + 0x7b37 + 0x7b37 + 0x20 + + + + .debug_line + 0x7b57 + 0x7b57 + 0xa9 + + + + .debug_line + 0x7c00 + 0x7c00 + 0x3a + + + + .debug_line + 0x7c3a + 0x7c3a 0x9a + + + + .debug_line + 0x7cd4 + 0x7cd4 + 0x96 + + + + .debug_line + 0x7d6a + 0x7d6a + 0x10f - + .debug_line - 0x8ad3 - 0x8ad3 - 0x97 + 0x7e79 + 0x7e79 + 0x2c - + .debug_line - 0x8b6a - 0x8b6a - 0x93 + 0x7ea5 + 0x7ea5 + 0x2c - + .debug_line - 0x8bfd - 0x8bfd - 0x40 + 0x7ed1 + 0x7ed1 + 0x41 + + + + .debug_line + 0x7f12 + 0x7f12 + 0x50 + + + + .debug_line + 0x7f62 + 0x7f62 + 0x55 + + + + .debug_line + 0x7fb7 + 0x7fb7 + 0xd0 + + + + .debug_line + 0x8087 + 0x8087 + 0x98 + + + + .debug_line + 0x811f + 0x811f + 0x112 + + + + .debug_line + 0x8231 + 0x8231 + 0x2c + + + + .debug_line + 0x825d + 0x825d + 0x92 + + + + .debug_line + 0x82ef + 0x82ef + 0x20 - + .debug_line - 0x8c3d - 0x8c3d - 0x3c + 0x830f + 0x830f + 0xae + + + + .debug_line + 0x83bd + 0x83bd + 0x20 + + + + .debug_line + 0x83dd + 0x83dd + 0xb7 + + + + .debug_line + 0x8494 + 0x8494 + 0x33 - + .debug_line - 0x8c79 - 0x8c79 + 0x84c7 + 0x84c7 + 0x45 + + + + .debug_line + 0x850c + 0x850c + 0xbf + + + + .debug_line + 0x85cb + 0x85cb + 0x6f + + + + .debug_line + 0x863a + 0x863a + 0x2e + + + + .debug_line + 0x8668 + 0x8668 + 0x9a + + + + .debug_line + 0x8702 + 0x8702 + 0x97 + + + + .debug_line + 0x8799 + 0x8799 + 0x93 + + + + .debug_line + 0x882c + 0x882c + 0x40 + + + + .debug_line + 0x886c + 0x886c + 0x3c + + + + .debug_line + 0x88a8 + 0x88a8 0x20 - + - + .debug_line - 0x8c99 - 0x8c99 + 0x88c8 + 0x88c8 0x2b - + - + .debug_line - 0x8cc4 - 0x8cc4 + 0x88f3 + 0x88f3 0x3a - + - + .debug_frame 0x0 0x0 - 0x50 + 0x34 - + .debug_frame - 0x50 - 0x50 - 0x50 + 0x34 + 0x34 + 0x34 - + .debug_frame - 0xa0 - 0xa0 + 0x68 + 0x68 + 0x34 + + + + .debug_frame + 0x9c + 0x9c + 0x50 + + + + .debug_frame + 0xec + 0xec + 0x50 + + + + .debug_frame + 0x13c + 0x13c 0x44 - + .debug_frame - 0xe4 - 0xe4 + 0x180 + 0x180 0x38 - + - + .debug_frame - 0x11c - 0x11c - 0x50 - + 0x1b8 + 0x1b8 + 0x54 + - + .debug_frame - 0x16c - 0x16c + 0x20c + 0x20c 0x34 - + - + .debug_frame - 0x1a0 - 0x1a0 + 0x240 + 0x240 0x50 - + - + .debug_frame - 0x1f0 - 0x1f0 - 0x38 - - - - .debug_frame - 0x228 - 0x228 + 0x290 + 0x290 0x44 - + - + .debug_frame - 0x26c - 0x26c + 0x2d4 + 0x2d4 0x3c - + - - .debug_frame - 0x2a8 - 0x2a8 - 0x34 - - - - .debug_frame - 0x2dc - 0x2dc - 0x34 - - - + .debug_frame 0x310 0x310 0x34 - + - + .debug_frame 0x344 0x344 0x34 - + - + .debug_frame 0x378 0x378 0x34 - + - + .debug_frame 0x3ac 0x3ac 0x44 - + - + .debug_frame 0x3f0 0x3f0 0x44 - + - + .debug_frame 0x434 0x434 0x44 - + - + .debug_frame 0x478 0x478 - 0x34 - - - - .debug_frame - 0x4ac - 0x4ac - 0x3c - - - - .debug_frame - 0x4e8 - 0x4e8 - 0x34 - - - - .debug_frame - 0x51c - 0x51c 0x3c - + .debug_frame - 0x558 - 0x558 + 0x4b4 + 0x4b4 + 0x3c + + + + .debug_frame + 0x4f0 + 0x4f0 0x40 - + - + .debug_frame - 0x598 - 0x598 - 0x38 - - - - .debug_frame - 0x5d0 - 0x5d0 - 0x40 - - - - .debug_frame - 0x610 - 0x610 - 0x3c - - - - .debug_frame - 0x64c - 0x64c - 0x3c - - - - .debug_frame - 0x688 - 0x688 - 0x38 - - - - .debug_frame - 0x6c0 - 0x6c0 - 0x3c - - - - .debug_frame - 0x6fc - 0x6fc - 0x3c - - - - .debug_frame - 0x738 - 0x738 - 0x4c - - - - .debug_frame - 0x784 - 0x784 - 0x34 - - - - .debug_frame - 0x7b8 - 0x7b8 + 0x530 + 0x530 0x38 - + .debug_frame - 0x7f0 - 0x7f0 + 0x568 + 0x568 0x40 + + .debug_frame + 0x5a8 + 0x5a8 + 0x3c + + + + .debug_frame + 0x5e4 + 0x5e4 + 0x3c + + + + .debug_frame + 0x620 + 0x620 + 0x38 + + + + .debug_frame + 0x658 + 0x658 + 0x3c + + + + .debug_frame + 0x694 + 0x694 + 0x38 + + + + .debug_frame + 0x6cc + 0x6cc + 0x34 + + + + .debug_frame + 0x700 + 0x700 + 0x34 + + + + .debug_frame + 0x734 + 0x734 + 0x38 + + + + .debug_frame + 0x76c + 0x76c + 0x40 + + .debug_frame - 0x830 - 0x830 + 0x7ac + 0x7ac 0x38 - + - + .debug_frame - 0x868 - 0x868 + 0x7e4 + 0x7e4 0x38 - + .debug_frame - 0x8a0 - 0x8a0 + 0x81c + 0x81c 0x38 - + .debug_frame - 0x8d8 - 0x8d8 + 0x854 + 0x854 0x4c - + - + .debug_frame - 0x924 - 0x924 + 0x8a0 + 0x8a0 0x3c - + - + .debug_frame - 0x960 - 0x960 - 0x38 - - - - .debug_frame - 0x998 - 0x998 + 0x8dc + 0x8dc 0x44 - + - + .debug_frame - 0x9dc - 0x9dc - 0x3c - + 0x920 + 0x920 + 0x44 + - + .debug_frame - 0xa18 - 0xa18 + 0x964 + 0x964 0x3c - + - + + .debug_frame + 0x9a0 + 0x9a0 + 0x38 + + + + .debug_frame + 0x9d8 + 0x9d8 + 0x44 + + + + .debug_frame + 0xa1c + 0xa1c + 0x38 + + + .debug_frame 0xa54 0xa54 - 0x40 - - - - .debug_frame - 0xa94 - 0xa94 - 0x38 - - - - .debug_frame - 0xacc - 0xacc - 0x34 - - - - .debug_frame - 0xb00 - 0xb00 - 0x38 - - - - .debug_frame - 0xb38 - 0xb38 - 0x38 - - - - .debug_frame - 0xb70 - 0xb70 0x34 - + .debug_frame - 0xba4 - 0xba4 + 0xa88 + 0xa88 + 0x38 + + + + .debug_frame + 0xac0 + 0xac0 + 0x4c + + + + .debug_frame + 0xb0c + 0xb0c + 0x34 + + + + .debug_frame + 0xb40 + 0xb40 + 0x38 + + + + .debug_frame + 0xb78 + 0xb78 + 0x38 + + + + .debug_frame + 0xbb0 + 0xbb0 + 0x34 + + + + .debug_frame + 0xbe4 + 0xbe4 0x3c - + - + .debug_frame - 0xbe0 - 0xbe0 + 0xc20 + 0xc20 0x38 - + - + .debug_frame - 0xc18 - 0xc18 + 0xc58 + 0xc58 0x38 - + - + .debug_frame - 0xc50 - 0xc50 + 0xc90 + 0xc90 0x38 - + - + .debug_frame - 0xc88 - 0xc88 + 0xcc8 + 0xcc8 0x38 - + - + .debug_frame - 0xcc0 - 0xcc0 + 0xd00 + 0xd00 0x3c - + - + .debug_frame - 0xcfc - 0xcfc + 0xd3c + 0xd3c 0x50 - + - + .debug_frame - 0xd4c - 0xd4c - 0x44 - + 0xd8c + 0xd8c + 0x3c + - - .debug_frame - 0xd90 - 0xd90 - 0x38 - - - + .debug_frame 0xdc8 0xdc8 - 0x48 - - - - .debug_frame - 0xe10 - 0xe10 - 0x34 - - - - .debug_frame - 0xe44 - 0xe44 - 0x50 - - - - .debug_frame - 0xe94 - 0xe94 - 0x44 - - - - .debug_frame - 0xed8 - 0xed8 - 0x44 - - - - .debug_frame - 0xf1c - 0xf1c - 0x40 - - - - .debug_frame - 0xf5c - 0xf5c - 0x44 - - - - .debug_frame - 0xfa0 - 0xfa0 0x38 - - - - .debug_frame - 0xfd8 - 0xfd8 - 0x34 - - - - .debug_frame - 0x100c - 0x100c - 0x38 - - - - .debug_frame - 0x1044 - 0x1044 - 0x34 - - - - .debug_frame - 0x1078 - 0x1078 - 0x38 - - - - .debug_frame - 0x10b0 - 0x10b0 - 0x34 - - - - .debug_frame - 0x10e4 - 0x10e4 - 0x38 - - - - .debug_frame - 0x111c - 0x111c - 0x34 - - - - .debug_frame - 0x1150 - 0x1150 - 0x38 - - - - .debug_frame - 0x1188 - 0x1188 - 0x34 - - - - .debug_frame - 0x11bc - 0x11bc - 0x34 - - - - .debug_frame - 0x11f0 - 0x11f0 - 0x34 - - - - .debug_frame - 0x1224 - 0x1224 - 0x34 - - - - .debug_frame - 0x1258 - 0x1258 - 0x34 - - - - .debug_frame - 0x128c - 0x128c - 0x38 - - - - .debug_frame - 0x12c4 - 0x12c4 - 0x34 - - - - .debug_frame - 0x12f8 - 0x12f8 - 0x38 - - - - .debug_frame - 0x1330 - 0x1330 - 0x34 - - - - .debug_frame - 0x1364 - 0x1364 - 0x38 - - - - .debug_frame - 0x139c - 0x139c - 0x34 - - - - .debug_frame - 0x13d0 - 0x13d0 - 0x38 - - - - .debug_frame - 0x1408 - 0x1408 - 0x3c - - - - .debug_frame - 0x1444 - 0x1444 - 0x44 - - - - .debug_frame - 0x1488 - 0x1488 - 0x34 - - - - .debug_frame - 0x14bc - 0x14bc - 0x34 - - - - .debug_frame - 0x14f0 - 0x14f0 - 0x3c - - - - .debug_frame - 0x152c - 0x152c - 0x3c - - - - .debug_frame - 0x1568 - 0x1568 - 0x3c - - - - .debug_frame - 0x15a4 - 0x15a4 - 0x34 - - - - .debug_frame - 0x15d8 - 0x15d8 - 0x3c - - - - .debug_frame - 0x1614 - 0x1614 - 0x34 - - - - .debug_frame - 0x1648 - 0x1648 - 0x34 - - - - .debug_frame - 0x167c - 0x167c - 0x44 - - - - .debug_frame - 0x16c0 - 0x16c0 - 0x40 - - - - .debug_frame - 0x1700 - 0x1700 - 0x48 - + .debug_frame - 0x1748 - 0x1748 + 0xe00 + 0xe00 + 0x48 + + + + .debug_frame + 0xe48 + 0xe48 + 0x34 + + + + .debug_frame + 0xe7c + 0xe7c + 0x50 + + + + .debug_frame + 0xecc + 0xecc + 0x44 + + + + .debug_frame + 0xf10 + 0xf10 + 0x48 + + + + .debug_frame + 0xf58 + 0xf58 0x40 - + - + .debug_frame - 0x1788 - 0x1788 - 0x3c - - - - .debug_frame - 0x17c4 - 0x17c4 - 0x4c - - - - .debug_frame - 0x1810 - 0x1810 - 0x3c - - - - .debug_frame - 0x184c - 0x184c + 0xf98 + 0xf98 0x40 - + + + + .debug_frame + 0xfd8 + 0xfd8 + 0x38 + + + + .debug_frame + 0x1010 + 0x1010 + 0x34 + + + + .debug_frame + 0x1044 + 0x1044 + 0x38 + + + + .debug_frame + 0x107c + 0x107c + 0x34 + + + + .debug_frame + 0x10b0 + 0x10b0 + 0x38 + + + + .debug_frame + 0x10e8 + 0x10e8 + 0x34 + .debug_frame - 0x188c - 0x188c - 0x44 - + 0x111c + 0x111c + 0x38 + - + .debug_frame - 0x18d0 - 0x18d0 + 0x1154 + 0x1154 + 0x34 + + + + .debug_frame + 0x1188 + 0x1188 + 0x38 + + + + .debug_frame + 0x11c0 + 0x11c0 + 0x34 + + + + .debug_frame + 0x11f4 + 0x11f4 + 0x34 + + + + .debug_frame + 0x1228 + 0x1228 + 0x34 + + + + .debug_frame + 0x125c + 0x125c + 0x34 + + + + .debug_frame + 0x1290 + 0x1290 + 0x34 + + + + .debug_frame + 0x12c4 + 0x12c4 + 0x38 + + + + .debug_frame + 0x12fc + 0x12fc + 0x34 + + + + .debug_frame + 0x1330 + 0x1330 + 0x38 + + + + .debug_frame + 0x1368 + 0x1368 + 0x34 + + + + .debug_frame + 0x139c + 0x139c + 0x38 + + + + .debug_frame + 0x13d4 + 0x13d4 + 0x34 + + + + .debug_frame + 0x1408 + 0x1408 + 0x38 + + + + .debug_frame + 0x1440 + 0x1440 0x3c - + - + .debug_frame - 0x190c - 0x190c + 0x147c + 0x147c + 0x44 + + + + .debug_frame + 0x14c0 + 0x14c0 + 0x34 + + + + .debug_frame + 0x14f4 + 0x14f4 + 0x34 + + + + .debug_frame + 0x1528 + 0x1528 + 0x3c + + + + .debug_frame + 0x1564 + 0x1564 + 0x3c + + + + .debug_frame + 0x15a0 + 0x15a0 + 0x3c + + + + .debug_frame + 0x15dc + 0x15dc + 0x34 + + + + .debug_frame + 0x1610 + 0x1610 + 0x3c + + + + .debug_frame + 0x164c + 0x164c + 0x40 + + + + .debug_frame + 0x168c + 0x168c 0x38 - + - + .debug_frame - 0x1944 - 0x1944 - 0x48 - + 0x16c4 + 0x16c4 + 0x3c + - + .debug_frame - 0x198c - 0x198c - 0x38 - + 0x1700 + 0x1700 + 0x3c + - + .debug_frame - 0x19c4 - 0x19c4 - 0x50 - + 0x173c + 0x173c + 0x34 + - + .debug_frame - 0x1a14 - 0x1a14 - 0x50 - + 0x1770 + 0x1770 + 0x3c + - + .debug_frame - 0x1a64 - 0x1a64 + 0x17ac + 0x17ac + 0x34 + + + + .debug_frame + 0x17e0 + 0x17e0 + 0x34 + + + + .debug_frame + 0x1814 + 0x1814 + 0x44 + + + + .debug_frame + 0x1858 + 0x1858 + 0x40 + + + + .debug_frame + 0x1898 + 0x1898 + 0x54 + + + + .debug_frame + 0x18ec + 0x18ec + 0x40 + + + + .debug_frame + 0x192c + 0x192c + 0x3c + + + + .debug_frame + 0x1968 + 0x1968 0x4c - + - + + .debug_frame + 0x19b4 + 0x19b4 + 0x3c + + + + .debug_frame + 0x19f0 + 0x19f0 + 0x40 + + + + .debug_frame + 0x1a30 + 0x1a30 + 0x44 + + + + .debug_frame + 0x1a74 + 0x1a74 + 0x3c + + + .debug_frame 0x1ab0 0x1ab0 - 0x48 - - - - .debug_frame - 0x1af8 - 0x1af8 0x38 - + - + .debug_frame - 0x1b30 - 0x1b30 - 0x34 - - - - .debug_frame - 0x1b64 - 0x1b64 - 0x44 - - - - .debug_frame - 0x1ba8 - 0x1ba8 - 0x40 - - - - .debug_frame - 0x1be8 - 0x1be8 - 0x48 - - - - .debug_frame - 0x1c30 - 0x1c30 - 0x40 - - - - .debug_frame - 0x1c70 - 0x1c70 - 0x44 - - - - .debug_frame - 0x1cb4 - 0x1cb4 + 0x1ae8 + 0x1ae8 0x4c - + - + .debug_frame - 0x1d00 - 0x1d00 - 0x54 - + 0x1b34 + 0x1b34 + 0x38 + - + .debug_frame - 0x1d54 - 0x1d54 + 0x1b6c + 0x1b6c 0x50 - + - + .debug_frame - 0x1da4 - 0x1da4 + 0x1bbc + 0x1bbc + 0x50 + + + + .debug_frame + 0x1c0c + 0x1c0c + 0x4c + + + + .debug_frame + 0x1c58 + 0x1c58 + 0x38 + + + + .debug_frame + 0x1c90 + 0x1c90 + 0x38 + + + + .debug_frame + 0x1cc8 + 0x1cc8 + 0x34 + + + + .debug_frame + 0x1cfc + 0x1cfc 0x44 - + - + .debug_frame - 0x1de8 - 0x1de8 + 0x1d40 + 0x1d40 + 0x40 + + + + .debug_frame + 0x1d80 + 0x1d80 + 0x48 + + + + .debug_frame + 0x1dc8 + 0x1dc8 + 0x40 + + + + .debug_frame + 0x1e08 + 0x1e08 0x50 - + + + + .debug_frame + 0x1e58 + 0x1e58 + 0x50 + .debug_frame - 0x1e38 - 0x1e38 + 0x1ea8 + 0x1ea8 0x34 - + - + .debug_frame - 0x1e6c - 0x1e6c + 0x1edc + 0x1edc 0x34 - + - + .debug_frame - 0x1ea0 - 0x1ea0 + 0x1f10 + 0x1f10 0x34 - + - + .debug_frame - 0x1ed4 - 0x1ed4 + 0x1f44 + 0x1f44 0x34 - + - - .debug_frame - 0x1f08 - 0x1f08 - 0x38 - - - - .debug_frame - 0x1f40 - 0x1f40 - 0x38 - - - + .debug_frame 0x1f78 0x1f78 0x38 - + - + .debug_frame 0x1fb0 0x1fb0 - 0x3c - + 0x38 + - + .debug_frame - 0x1fec - 0x1fec + 0x1fe8 + 0x1fe8 + 0x38 + + + + .debug_frame + 0x2020 + 0x2020 0x3c - + + + + .debug_frame + 0x205c + 0x205c + 0x3c + - .debug_frame - 0x2028 - 0x2028 - 0x38 - - - - .debug_frame - 0x2060 - 0x2060 - 0x38 - - - .debug_frame 0x2098 0x2098 0x38 - + - + .debug_frame 0x20d0 0x20d0 + 0x38 + + + + .debug_frame + 0x2108 + 0x2108 + 0x38 + + + + .debug_frame + 0x2140 + 0x2140 0x40 - + - - .debug_frame - 0x2110 - 0x2110 - 0x3c - - - - .debug_frame - 0x214c - 0x214c - 0x34 - - - + .debug_frame 0x2180 0x2180 - 0x34 - - - - .debug_frame - 0x21b4 - 0x21b4 - 0x40 - - - - .debug_frame - 0x21f4 - 0x21f4 - 0x34 - - - - .debug_frame - 0x2228 - 0x2228 - 0x34 - - - - .debug_frame - 0x225c - 0x225c - 0x38 - - - - .debug_frame - 0x2294 - 0x2294 - 0x44 - - - - .debug_frame - 0x22d8 - 0x22d8 0x3c - + - + .debug_frame - 0x2314 - 0x2314 - 0x48 - - - - .debug_frame - 0x235c - 0x235c + 0x21bc + 0x21bc 0x34 - + .debug_frame - 0x2390 - 0x2390 - 0x38 + 0x21f0 + 0x21f0 + 0x34 - + .debug_frame - 0x23c8 - 0x23c8 - 0x30 + 0x2224 + 0x2224 + 0x40 - + .debug_frame - 0x23f8 - 0x23f8 + 0x2264 + 0x2264 + 0x34 + + + + .debug_frame + 0x2298 + 0x2298 + 0x34 + + + + .debug_frame + 0x22cc + 0x22cc + 0x38 + + + + .debug_frame + 0x2304 + 0x2304 + 0x44 + + + + .debug_frame + 0x2348 + 0x2348 0x3c - + .debug_frame - 0x2434 - 0x2434 + 0x2384 + 0x2384 + 0x48 + + + + .debug_frame + 0x23cc + 0x23cc 0x34 - + + .debug_frame + 0x2400 + 0x2400 + 0x38 + + + + .debug_frame + 0x2438 + 0x2438 + 0x30 + + + .debug_frame 0x2468 0x2468 - 0x34 - - - - .debug_frame - 0x249c - 0x249c - 0x34 + 0x3c - + + .debug_frame + 0x24a4 + 0x24a4 + 0x34 + + + + .debug_frame + 0x24d8 + 0x24d8 + 0x34 + + + + .debug_frame + 0x250c + 0x250c + 0x34 + + + .debug_abbrev 0x0 0x0 - 0x13e + 0x8e - + .debug_abbrev - 0x13e - 0x13e - 0x29 - - - - .debug_abbrev - 0x167 - 0x167 - 0x29 - - - - .debug_abbrev - 0x190 - 0x190 - 0x29 - - - - .debug_abbrev - 0x1b9 - 0x1b9 - 0x29 - - - - .debug_abbrev - 0x1e2 - 0x1e2 - 0x29 - - - - .debug_abbrev - 0x20b - 0x20b - 0x29 - - - - .debug_abbrev - 0x234 - 0x234 - 0x29 - - - - .debug_abbrev - 0x25d - 0x25d - 0x29 - - - - .debug_abbrev - 0x286 - 0x286 - 0x29 - - - - .debug_abbrev - 0x2af - 0x2af - 0x29 - - - - .debug_abbrev - 0x2d8 - 0x2d8 - 0x29 - - - - .debug_abbrev - 0x301 - 0x301 - 0x29 - - - - .debug_abbrev - 0x32a - 0x32a - 0x29 - - - - .debug_abbrev - 0x353 - 0x353 - 0x29 - - - - .debug_abbrev - 0x37c - 0x37c - 0x29 - - - - .debug_abbrev - 0x3a5 - 0x3a5 - 0x29 - - - - .debug_abbrev - 0x3ce - 0x3ce - 0x29 - - - - .debug_abbrev - 0x3f7 - 0x3f7 - 0x29 - - - - .debug_abbrev - 0x420 - 0x420 - 0x29 - - - - .debug_abbrev - 0x449 - 0x449 - 0x29 - - - - .debug_abbrev - 0x472 - 0x472 - 0x29 - - - - .debug_abbrev - 0x49b - 0x49b - 0x29 - - - - .debug_abbrev - 0x4c4 - 0x4c4 - 0x29 - - - - .debug_abbrev - 0x4ed - 0x4ed - 0x29 - - - - .debug_abbrev - 0x516 - 0x516 - 0x29 - - - - .debug_abbrev - 0x53f - 0x53f - 0x29 - - - - .debug_abbrev - 0x568 - 0x568 - 0x29 - - - - .debug_abbrev - 0x591 - 0x591 - 0x29 - - - - .debug_abbrev - 0x5ba - 0x5ba - 0x29 - - - - .debug_abbrev - 0x5e3 - 0x5e3 - 0x29 - - - - .debug_abbrev - 0x60c - 0x60c - 0x29 - - - - .debug_abbrev - 0x635 - 0x635 - 0x29 - - - - .debug_abbrev - 0x65e - 0x65e - 0x29 - - - - .debug_abbrev - 0x687 - 0x687 - 0x29 - - - - .debug_abbrev - 0x6b0 - 0x6b0 - 0x29 - - - - .debug_abbrev - 0x6d9 - 0x6d9 - 0x29 - - - - .debug_abbrev - 0x702 - 0x702 - 0x29 - - - - .debug_abbrev - 0x72b - 0x72b - 0x29 - - - - .debug_abbrev - 0x754 - 0x754 - 0x29 - - - - .debug_abbrev - 0x77d - 0x77d - 0x29 - - - - .debug_abbrev - 0x7a6 - 0x7a6 - 0x29 - - - - .debug_abbrev - 0x7cf - 0x7cf - 0x29 - - - - .debug_abbrev - 0x7f8 - 0x7f8 - 0x29 - - - - .debug_abbrev - 0x821 - 0x821 - 0x29 - - - - .debug_abbrev - 0x84a - 0x84a - 0x29 - - - - .debug_abbrev - 0x873 - 0x873 - 0x29 - - - - .debug_abbrev - 0x89c - 0x89c - 0x29 - - - - .debug_abbrev - 0x8c5 - 0x8c5 - 0x29 - - - - .debug_abbrev - 0x8ee - 0x8ee - 0x29 - - - - .debug_abbrev - 0x917 - 0x917 - 0x29 - - - - .debug_abbrev - 0x940 - 0x940 - 0x29 - - - - .debug_abbrev - 0x969 - 0x969 - 0x29 - - - - .debug_abbrev - 0x992 - 0x992 - 0x29 - - - - .debug_abbrev - 0x9bb - 0x9bb - 0x29 - - - - .debug_abbrev - 0x9e4 - 0x9e4 - 0x29 - - - - .debug_abbrev - 0xa0d - 0xa0d - 0x29 - - - - .debug_abbrev - 0xa36 - 0xa36 - 0x29 - - - - .debug_abbrev - 0xa5f - 0xa5f - 0x29 - - - - .debug_abbrev - 0xa88 - 0xa88 - 0x29 - - - - .debug_abbrev - 0xab1 - 0xab1 - 0x29 - - - - .debug_abbrev - 0xada - 0xada - 0x29 - - - - .debug_abbrev - 0xb03 - 0xb03 - 0x29 - - - - .debug_abbrev - 0xb2c - 0xb2c - 0x29 - - - - .debug_abbrev - 0xb55 - 0xb55 - 0x29 - - - - .debug_abbrev - 0xb7e - 0xb7e - 0x29 - - - - .debug_abbrev - 0xba7 - 0xba7 - 0x29 - - - - .debug_abbrev - 0xbd0 - 0xbd0 - 0x29 - - - - .debug_abbrev - 0xbf9 - 0xbf9 - 0x29 - - - - .debug_abbrev - 0xc22 - 0xc22 - 0x6e - - - - .debug_abbrev - 0xc90 - 0xc90 - 0x7c - - - - .debug_abbrev - 0xd0c - 0xd0c - 0x6c - - - - .debug_abbrev - 0xd78 - 0xd78 - 0x60 - - - - .debug_abbrev - 0xdd8 - 0xdd8 - 0x6e - - - - .debug_abbrev - 0xe46 - 0xe46 - 0x60 - - - - .debug_abbrev - 0xea6 - 0xea6 - 0x5e - - - - .debug_abbrev - 0xf04 - 0xf04 - 0x6c - - - - .debug_abbrev - 0xf70 - 0xf70 - 0x7a - - - - .debug_abbrev - 0xfea - 0xfea - 0x7a - - - - .debug_abbrev - 0x1064 - 0x1064 + 0x8e + 0x8e 0x52 - + .debug_abbrev - 0x10b6 - 0x10b6 + 0xe0 + 0xe0 0x52 .debug_abbrev - 0x1108 - 0x1108 - 0x52 - - - - .debug_abbrev - 0x115a - 0x115a - 0x52 - - - - .debug_abbrev - 0x11ac - 0x11ac - 0x52 - - - - .debug_abbrev - 0x11fe - 0x11fe - 0x7c - - - - .debug_abbrev - 0x127a - 0x127a - 0x6c - - - - .debug_abbrev - 0x12e6 - 0x12e6 - 0x6c - - - - .debug_abbrev - 0x1352 - 0x1352 - 0x52 - - - - .debug_abbrev - 0x13a4 - 0x13a4 + 0x132 + 0x132 0x5e - + .debug_abbrev - 0x1402 - 0x1402 - 0x5e - - - - .debug_abbrev - 0x1460 - 0x1460 - 0xd8 - - - - .debug_abbrev - 0x1538 - 0x1538 - 0x70 - - - - .debug_abbrev - 0x15a8 - 0x15a8 + 0x190 + 0x190 0x5a - + .debug_abbrev - 0x1602 - 0x1602 + 0x1ea + 0x1ea 0x49 - + .debug_abbrev - 0x164b - 0x164b + 0x233 + 0x233 0x69 - + .debug_abbrev - 0x16b4 - 0x16b4 + 0x29c + 0x29c 0x6e - + .debug_abbrev - 0x1722 - 0x1722 + 0x30a + 0x30a 0x70 - + .debug_abbrev - 0x1792 - 0x1792 - 0x5a + 0x37a + 0x37a + 0xd8 - + .debug_abbrev - 0x17ec - 0x17ec - 0x49 + 0x452 + 0x452 + 0x5a .debug_abbrev - 0x1835 - 0x1835 + 0x4ac + 0x4ac 0x1f - + .debug_abbrev - 0x1854 - 0x1854 + 0x4cb + 0x4cb 0x5c .debug_abbrev - 0x18b0 - 0x18b0 + 0x527 + 0x527 0x24 - + .debug_abbrev - 0x18d4 - 0x18d4 + 0x54b + 0x54b 0x33 - + .debug_abbrev - 0x1907 - 0x1907 - 0x145 - - - - .debug_abbrev - 0x1a4c - 0x1a4c - 0x3f - - - - .debug_abbrev - 0x1a8b - 0x1a8b - 0x29 - - - - .debug_abbrev - 0x1ab4 - 0x1ab4 - 0x29 - - - - .debug_abbrev - 0x1add - 0x1add - 0x29 - - - - .debug_abbrev - 0x1b06 - 0x1b06 - 0x29 - - - - .debug_abbrev - 0x1b2f - 0x1b2f - 0x29 - - - - .debug_abbrev - 0x1b58 - 0x1b58 - 0x29 - - - - .debug_abbrev - 0x1b81 - 0x1b81 - 0x29 - - - - .debug_abbrev - 0x1baa - 0x1baa - 0x29 - - - - .debug_abbrev - 0x1bd3 - 0x1bd3 - 0x29 - - - - .debug_abbrev - 0x1bfc - 0x1bfc - 0x29 - - - - .debug_abbrev - 0x1c25 - 0x1c25 - 0x29 - - - - .debug_abbrev - 0x1c4e - 0x1c4e - 0x29 - - - - .debug_abbrev - 0x1c77 - 0x1c77 - 0x29 - - - - .debug_abbrev - 0x1ca0 - 0x1ca0 - 0x29 - - - - .debug_abbrev - 0x1cc9 - 0x1cc9 - 0x29 - - - - .debug_abbrev - 0x1cf2 - 0x1cf2 - 0x29 + 0x57e + 0x57e + 0x154 .debug_abbrev - 0x1d1b - 0x1d1b + 0x6d2 + 0x6d2 0x29 .debug_abbrev - 0x1d44 - 0x1d44 + 0x6fb + 0x6fb 0x29 .debug_abbrev - 0x1d6d - 0x1d6d + 0x724 + 0x724 + 0x29 + + + + .debug_abbrev + 0x74d + 0x74d + 0x29 + + + + .debug_abbrev + 0x776 + 0x776 + 0x29 + + + + .debug_abbrev + 0x79f + 0x79f + 0x29 + + + + .debug_abbrev + 0x7c8 + 0x7c8 + 0x29 + + + + .debug_abbrev + 0x7f1 + 0x7f1 + 0x29 + + + + .debug_abbrev + 0x81a + 0x81a + 0x29 + + + + .debug_abbrev + 0x843 + 0x843 + 0x29 + + + + .debug_abbrev + 0x86c + 0x86c + 0x29 + + + + .debug_abbrev + 0x895 + 0x895 + 0x29 + + + + .debug_abbrev + 0x8be + 0x8be + 0x29 + + + + .debug_abbrev + 0x8e7 + 0x8e7 + 0x29 + + + + .debug_abbrev + 0x910 + 0x910 + 0x29 + + + + .debug_abbrev + 0x939 + 0x939 + 0x29 + + + + .debug_abbrev + 0x962 + 0x962 + 0x29 + + + + .debug_abbrev + 0x98b + 0x98b + 0x29 + + + + .debug_abbrev + 0x9b4 + 0x9b4 + 0x29 + + + + .debug_abbrev + 0x9dd + 0x9dd + 0x29 + + + + .debug_abbrev + 0xa06 + 0xa06 + 0x29 + + + + .debug_abbrev + 0xa2f + 0xa2f + 0x29 + + + + .debug_abbrev + 0xa58 + 0xa58 + 0x29 + + + + .debug_abbrev + 0xa81 + 0xa81 + 0x29 + + + + .debug_abbrev + 0xaaa + 0xaaa + 0x29 + + + + .debug_abbrev + 0xad3 + 0xad3 + 0x29 + + + + .debug_abbrev + 0xafc + 0xafc + 0x29 + + + + .debug_abbrev + 0xb25 + 0xb25 + 0x29 + + + + .debug_abbrev + 0xb4e + 0xb4e + 0x29 + + + + .debug_abbrev + 0xb77 + 0xb77 + 0x29 + + + + .debug_abbrev + 0xba0 + 0xba0 + 0x29 + + + + .debug_abbrev + 0xbc9 + 0xbc9 + 0x29 + + + + .debug_abbrev + 0xbf2 + 0xbf2 + 0x29 + + + + .debug_abbrev + 0xc1b + 0xc1b + 0x29 + + + + .debug_abbrev + 0xc44 + 0xc44 + 0x29 + + + + .debug_abbrev + 0xc6d + 0xc6d + 0x29 + + + + .debug_abbrev + 0xc96 + 0xc96 + 0x29 + + + + .debug_abbrev + 0xcbf + 0xcbf + 0x29 + + + + .debug_abbrev + 0xce8 + 0xce8 + 0x29 + + + + .debug_abbrev + 0xd11 + 0xd11 + 0x29 + + + + .debug_abbrev + 0xd3a + 0xd3a + 0x29 + + + + .debug_abbrev + 0xd63 + 0xd63 + 0x29 + + + + .debug_abbrev + 0xd8c + 0xd8c + 0x29 + + + + .debug_abbrev + 0xdb5 + 0xdb5 + 0x29 + + + + .debug_abbrev + 0xdde + 0xdde + 0x29 + + + + .debug_abbrev + 0xe07 + 0xe07 + 0x29 + + + + .debug_abbrev + 0xe30 + 0xe30 + 0x29 + + + + .debug_abbrev + 0xe59 + 0xe59 + 0x29 + + + + .debug_abbrev + 0xe82 + 0xe82 + 0x29 + + + + .debug_abbrev + 0xeab + 0xeab + 0x29 + + + + .debug_abbrev + 0xed4 + 0xed4 0x29 .debug_abbrev - 0x1d96 - 0x1d96 + 0xefd + 0xefd 0x29 - - .debug_abbrev - 0x1dbf - 0x1dbf - 0x29 - - - - .debug_abbrev - 0x1de8 - 0x1de8 - 0x29 - - - - .debug_abbrev - 0x1e11 - 0x1e11 - 0x29 - - - - .debug_abbrev - 0x1e3a - 0x1e3a - 0x29 - - - - .debug_abbrev - 0x1e63 - 0x1e63 - 0x29 - - - - .debug_abbrev - 0x1e8c - 0x1e8c - 0x29 - - - - .debug_abbrev - 0x1eb5 - 0x1eb5 - 0x29 - - - - .debug_abbrev - 0x1ede - 0x1ede - 0x6c - - .debug_abbrev - 0x1f4a - 0x1f4a - 0x7c + 0xf26 + 0xf26 + 0x29 - + .debug_abbrev - 0x1fc6 - 0x1fc6 - 0x50 + 0xf4f + 0xf4f + 0x29 - + .debug_abbrev - 0x2016 - 0x2016 - 0x6c + 0xf78 + 0xf78 + 0x29 - + .debug_abbrev - 0x2082 - 0x2082 + 0xfa1 + 0xfa1 + 0x29 + + + + .debug_abbrev + 0xfca + 0xfca + 0x29 + + + + .debug_abbrev + 0xff3 + 0xff3 + 0x29 + + + + .debug_abbrev + 0x101c + 0x101c + 0x29 + + + + .debug_abbrev + 0x1045 + 0x1045 + 0x29 + + + + .debug_abbrev + 0x106e + 0x106e + 0x29 + + + + .debug_abbrev + 0x1097 + 0x1097 + 0x29 + + + + .debug_abbrev + 0x10c0 + 0x10c0 + 0x29 + + + + .debug_abbrev + 0x10e9 + 0x10e9 + 0x29 + + + + .debug_abbrev + 0x1112 + 0x1112 + 0x29 + + + + .debug_abbrev + 0x113b + 0x113b + 0x29 + + + + .debug_abbrev + 0x1164 + 0x1164 + 0x29 + + + + .debug_abbrev + 0x118d + 0x118d + 0x29 + + + + .debug_abbrev + 0x11b6 + 0x11b6 0x6e - + .debug_abbrev - 0x20f0 - 0x20f0 + 0x1224 + 0x1224 0x7c - + .debug_abbrev - 0x216c - 0x216c + 0x12a0 + 0x12a0 + 0x6c + + + + .debug_abbrev + 0x130c + 0x130c + 0x60 + + + + .debug_abbrev + 0x136c + 0x136c 0x6e - + .debug_abbrev - 0x21da - 0x21da - 0x6c - - - - .debug_abbrev - 0x2246 - 0x2246 - 0x6c + 0x13da + 0x13da + 0x60 .debug_abbrev - 0x22b2 - 0x22b2 - 0x7b + 0x143a + 0x143a + 0x5e - + .debug_abbrev - 0x232d - 0x232d + 0x1498 + 0x1498 + 0x7a + + + + .debug_abbrev + 0x1512 + 0x1512 + 0x7a + + + + .debug_abbrev + 0x158c + 0x158c 0x52 - + .debug_abbrev - 0x237f - 0x237f - 0x17f + 0x15de + 0x15de + 0x52 + + + + .debug_abbrev + 0x1630 + 0x1630 + 0x52 + + + + .debug_abbrev + 0x1682 + 0x1682 + 0x7c + + + + .debug_abbrev + 0x16fe + 0x16fe + 0x6c + + + + .debug_abbrev + 0x176a + 0x176a + 0x6c + + + + .debug_abbrev + 0x17d6 + 0x17d6 + 0x5e + + + + .debug_abbrev + 0x1834 + 0x1834 + 0x70 + + + + .debug_abbrev + 0x18a4 + 0x18a4 + 0x49 + + + + .debug_abbrev + 0x18ed + 0x18ed + 0x136 + + + + .debug_abbrev + 0x1a23 + 0x1a23 + 0x3f + + + + .debug_abbrev + 0x1a62 + 0x1a62 + 0x29 + + + + .debug_abbrev + 0x1a8b + 0x1a8b + 0x29 + + + + .debug_abbrev + 0x1ab4 + 0x1ab4 + 0x29 + + + + .debug_abbrev + 0x1add + 0x1add + 0x29 + + + + .debug_abbrev + 0x1b06 + 0x1b06 + 0x29 + + + + .debug_abbrev + 0x1b2f + 0x1b2f + 0x29 + + + + .debug_abbrev + 0x1b58 + 0x1b58 + 0x29 + + + + .debug_abbrev + 0x1b81 + 0x1b81 + 0x29 + + + + .debug_abbrev + 0x1baa + 0x1baa + 0x29 + + + + .debug_abbrev + 0x1bd3 + 0x1bd3 + 0x29 + + + + .debug_abbrev + 0x1bfc + 0x1bfc + 0x29 + + + + .debug_abbrev + 0x1c25 + 0x1c25 + 0x29 + + + + .debug_abbrev + 0x1c4e + 0x1c4e + 0x29 + + + + .debug_abbrev + 0x1c77 + 0x1c77 + 0x29 + + + + .debug_abbrev + 0x1ca0 + 0x1ca0 + 0x29 + + + + .debug_abbrev + 0x1cc9 + 0x1cc9 + 0x29 + + + + .debug_abbrev + 0x1cf2 + 0x1cf2 + 0x29 + + + + .debug_abbrev + 0x1d1b + 0x1d1b + 0x29 + + + + .debug_abbrev + 0x1d44 + 0x1d44 + 0x29 + + + + .debug_abbrev + 0x1d6d + 0x1d6d + 0x29 + + + + .debug_abbrev + 0x1d96 + 0x1d96 + 0x29 + + + + .debug_abbrev + 0x1dbf + 0x1dbf + 0x29 + + + + .debug_abbrev + 0x1de8 + 0x1de8 + 0x29 + + + + .debug_abbrev + 0x1e11 + 0x1e11 + 0x29 + + + + .debug_abbrev + 0x1e3a + 0x1e3a + 0x29 + + + + .debug_abbrev + 0x1e63 + 0x1e63 + 0x29 + + + + .debug_abbrev + 0x1e8c + 0x1e8c + 0x29 + + + + .debug_abbrev + 0x1eb5 + 0x1eb5 + 0x6c + + + + .debug_abbrev + 0x1f21 + 0x1f21 + 0x7c + + + + .debug_abbrev + 0x1f9d + 0x1f9d + 0x50 + + + + .debug_abbrev + 0x1fed + 0x1fed + 0x6c + + + + .debug_abbrev + 0x2059 + 0x2059 + 0x6e + + + + .debug_abbrev + 0x20c7 + 0x20c7 + 0x7c + + + + .debug_abbrev + 0x2143 + 0x2143 + 0x6e + + + + .debug_abbrev + 0x21b1 + 0x21b1 + 0x6c .debug_abbrev - 0x24fe - 0x24fe - 0x29 - - - - .debug_abbrev - 0x2527 - 0x2527 - 0x7c - - - - .debug_abbrev - 0x25a3 - 0x25a3 + 0x221d + 0x221d 0x6c - + .debug_abbrev - 0x260f - 0x260f - 0x5e + 0x2289 + 0x2289 + 0x50 - + .debug_abbrev - 0x266d - 0x266d - 0x5e + 0x22d9 + 0x22d9 + 0x52 - + .debug_abbrev - 0x26cb - 0x26cb + 0x232b + 0x232b + 0x188 + + + + .debug_abbrev + 0x24b3 + 0x24b3 + 0x29 + + + + .debug_abbrev + 0x24dc + 0x24dc + 0x7c + + + + .debug_abbrev + 0x2558 + 0x2558 + 0x6c + + + + .debug_abbrev + 0x25c4 + 0x25c4 0x5e - + + + + .debug_abbrev + 0x2622 + 0x2622 + 0x5e + + + + .debug_abbrev + 0x2680 + 0x2680 + 0x5e + .debug_abbrev - 0x2729 - 0x2729 + 0x26de + 0x26de 0x6c - + - + .debug_abbrev - 0x2795 - 0x2795 + 0x274a + 0x274a 0x6c - + - + .debug_abbrev - 0x2801 - 0x2801 + 0x27b6 + 0x27b6 0x6c - + - + .debug_abbrev - 0x286d - 0x286d + 0x2822 + 0x2822 0x6c - + - + .debug_abbrev - 0x28d9 - 0x28d9 + 0x288e + 0x288e 0x5e - + - + .debug_abbrev - 0x2937 - 0x2937 + 0x28ec + 0x28ec 0x7b - - - - .debug_abbrev - 0x29b2 - 0x29b2 - 0x6e - - - - .debug_abbrev - 0x2a20 - 0x2a20 - 0x109 - + .debug_abbrev - 0x2b29 - 0x2b29 + 0x2967 + 0x2967 + 0x6e + + + + .debug_abbrev + 0x29d5 + 0x29d5 + 0xf3 + + + + .debug_abbrev + 0x2ac8 + 0x2ac8 0x7f - - - - .debug_abbrev - 0x2ba8 - 0x2ba8 - 0x50 - - - - .debug_abbrev - 0x2bf8 - 0x2bf8 - 0x7c - - - - .debug_abbrev - 0x2c74 - 0x2c74 - 0x183 - + .debug_abbrev - 0x2df7 - 0x2df7 - 0x29 - - - - .debug_abbrev - 0x2e20 - 0x2e20 - 0x6c - - - - .debug_abbrev - 0x2e8c - 0x2e8c + 0x2b47 + 0x2b47 0x50 - - .debug_abbrev - 0x2edc - 0x2edc - 0x7a - - - - .debug_abbrev - 0x2f56 - 0x2f56 - 0x7a - - - - .debug_abbrev - 0x2fd0 - 0x2fd0 - 0x5e - - - - .debug_abbrev - 0x302e - 0x302e - 0x52 - - - - .debug_abbrev - 0x3080 - 0x3080 - 0x7c - - - - .debug_abbrev - 0x30fc - 0x30fc - 0x7a - - - - .debug_abbrev - 0x3176 - 0x3176 - 0x6e - - - - .debug_abbrev - 0x31e4 - 0x31e4 - 0x7a - - - - .debug_abbrev - 0x325e - 0x325e - 0x7a - - - - .debug_abbrev - 0x32d8 - 0x32d8 - 0x7c - - - - .debug_abbrev - 0x3354 - 0x3354 - 0x50 - - - - .debug_abbrev - 0x33a4 - 0x33a4 - 0x7a - - - - .debug_abbrev - 0x341e - 0x341e - 0x6c - - - - .debug_abbrev - 0x348a - 0x348a - 0x6c - - - - .debug_abbrev - 0x34f6 - 0x34f6 - 0x6c - - - - .debug_abbrev - 0x3562 - 0x3562 - 0x50 - - - - .debug_abbrev - 0x35b2 - 0x35b2 - 0x6c - - - - .debug_abbrev - 0x361e - 0x361e - 0xf5 - - - - .debug_abbrev - 0x3713 - 0x3713 - 0x6c - - - - .debug_abbrev - 0x377f - 0x377f - 0x6c - - - - .debug_abbrev - 0x37eb - 0x37eb - 0x6c - - - - .debug_abbrev - 0x3857 - 0x3857 - 0x6c - - .debug_abbrev - 0x38c3 - 0x38c3 - 0x6c + 0x2b97 + 0x2b97 + 0x7c + + + + .debug_abbrev + 0x2c13 + 0x2c13 + 0xef - + .debug_abbrev - 0x392f - 0x392f - 0x6c + 0x2d02 + 0x2d02 + 0x7c - + .debug_abbrev - 0x399b - 0x399b - 0x71 - - - - .debug_abbrev - 0x3a0c - 0x3a0c - 0x6c - - - - .debug_abbrev - 0x3a78 - 0x3a78 - 0x52 - - - - .debug_abbrev - 0x3aca - 0x3aca - 0x6c - - - - .debug_abbrev - 0x3b36 - 0x3b36 - 0x55 - - - - .debug_abbrev - 0x3b8b - 0x3b8b + 0x2d7e + 0x2d7e 0x50 - + .debug_abbrev - 0x3bdb - 0x3bdb - 0x6e - - - - .debug_abbrev - 0x3c49 - 0x3c49 - 0x6e - - - - .debug_abbrev - 0x3cb7 - 0x3cb7 - 0x6e - - - - .debug_abbrev - 0x3d25 - 0x3d25 - 0x6e - - - - .debug_abbrev - 0x3d93 - 0x3d93 - 0x6e - - - - .debug_abbrev - 0x3e01 - 0x3e01 - 0x6e - - - - .debug_abbrev - 0x3e6f - 0x3e6f - 0x71 - - - - .debug_abbrev - 0x3ee0 - 0x3ee0 + 0x2dce + 0x2dce 0x6c - + .debug_abbrev - 0x3f4c - 0x3f4c - 0x6e + 0x2e3a + 0x2e3a + 0x7d - + .debug_abbrev - 0x3fba - 0x3fba - 0x6e - + 0x2eb7 + 0x2eb7 + 0x199 + - + .debug_abbrev - 0x4028 - 0x4028 - 0x52 - + 0x3050 + 0x3050 + 0x3f + - + .debug_abbrev - 0x407a - 0x407a + 0x308f + 0x308f + 0x6c + + + + .debug_abbrev + 0x30fb + 0x30fb + 0x50 + + + + .debug_abbrev + 0x314b + 0x314b + 0x7a + + + + .debug_abbrev + 0x31c5 + 0x31c5 + 0x7a + + + + .debug_abbrev + 0x323f + 0x323f 0x5e - - - - .debug_abbrev - 0x40d8 - 0x40d8 - 0x61 - - - - .debug_abbrev - 0x4139 - 0x4139 - 0x61 - - - - .debug_abbrev - 0x419a - 0x419a - 0x61 - - - - .debug_abbrev - 0x41fb - 0x41fb - 0xd9 - - - - .debug_abbrev - 0x42d4 - 0x42d4 - 0x8f - - - - .debug_abbrev - 0x4363 - 0x4363 - 0x60 - - - - .debug_abbrev - 0x43c3 - 0x43c3 - 0xac - - - - .debug_abbrev - 0x446f - 0x446f - 0x1f - - - - .debug_abbrev - 0x448e - 0x448e - 0x24 - - - - .debug_abbrev - 0x44b2 - 0x44b2 - 0x24 - - - - .debug_abbrev - 0x44d6 - 0x44d6 - 0x64 - - - - .debug_abbrev - 0x453a - 0x453a - 0x63 - - - - .debug_abbrev - 0x459d - 0x459d - 0x166 - - - - .debug_abbrev - 0x4703 - 0x4703 - 0x6e - + .debug_abbrev - 0x4771 - 0x4771 - 0x7f - + 0x329d + 0x329d + 0x52 + - + .debug_abbrev - 0x47f0 - 0x47f0 - 0x6e - - - - .debug_abbrev - 0x485e - 0x485e - 0x6c - - - - .debug_abbrev - 0x48ca - 0x48ca - 0x6e - - - - .debug_abbrev - 0x4938 - 0x4938 + 0x32ef + 0x32ef 0x7c - + + + + .debug_abbrev + 0x336b + 0x336b + 0x7a + + + + .debug_abbrev + 0x33e5 + 0x33e5 + 0x6e + + + + .debug_abbrev + 0x3453 + 0x3453 + 0x7a + .debug_abbrev - 0x49b4 - 0x49b4 - 0x7c - - - - .debug_abbrev - 0x4a30 - 0x4a30 + 0x34cd + 0x34cd 0x7a - + - + .debug_abbrev - 0x4aaa - 0x4aaa + 0x3547 + 0x3547 + 0x7c + + + + .debug_abbrev + 0x35c3 + 0x35c3 + 0x50 + + + + .debug_abbrev + 0x3613 + 0x3613 + 0x7a + + + + .debug_abbrev + 0x368d + 0x368d 0x6c - + - + .debug_abbrev - 0x4b16 - 0x4b16 + 0x36f9 + 0x36f9 0x6c - + - + .debug_abbrev - 0x4b82 - 0x4b82 + 0x3765 + 0x3765 0x6c - + - + .debug_abbrev - 0x4bee - 0x4bee + 0x37d1 + 0x37d1 + 0x50 + + + + .debug_abbrev + 0x3821 + 0x3821 0x6c - + - + .debug_abbrev - 0x4c5a - 0x4c5a + 0x388d + 0x388d + 0xf5 + + + + .debug_abbrev + 0x3982 + 0x3982 0x6c - + - + .debug_abbrev - 0x4cc6 - 0x4cc6 - 0x10c - + 0x39ee + 0x39ee + 0x6c + - + .debug_abbrev - 0x4dd2 - 0x4dd2 - 0x29 - + 0x3a5a + 0x3a5a + 0x6c + - + .debug_abbrev - 0x4dfb - 0x4dfb - 0x29 - + 0x3ac6 + 0x3ac6 + 0x6c + - + .debug_abbrev - 0x4e24 - 0x4e24 - 0x29 - + 0x3b32 + 0x3b32 + 0x6c + - + .debug_abbrev - 0x4e4d - 0x4e4d + 0x3b9e + 0x3b9e + 0x6c + + + + .debug_abbrev + 0x3c0a + 0x3c0a + 0x71 + + + + .debug_abbrev + 0x3c7b + 0x3c7b + 0x6c + + + + .debug_abbrev + 0x3ce7 + 0x3ce7 + 0x52 + + + + .debug_abbrev + 0x3d39 + 0x3d39 + 0x6c + + + + .debug_abbrev + 0x3da5 + 0x3da5 + 0x55 + + + + .debug_abbrev + 0x3dfa + 0x3dfa + 0x50 + + + + .debug_abbrev + 0x3e4a + 0x3e4a 0x6e - + - + .debug_abbrev - 0x4ebb - 0x4ebb + 0x3eb8 + 0x3eb8 0x6e - + - + .debug_abbrev - 0x4f29 - 0x4f29 + 0x3f26 + 0x3f26 0x6e + + + + .debug_abbrev + 0x3f94 + 0x3f94 + 0x6e + + + + .debug_abbrev + 0x4002 + 0x4002 + 0x6e + + + + .debug_abbrev + 0x4070 + 0x4070 + 0x6e + + + + .debug_abbrev + 0x40de + 0x40de + 0x71 + + + + .debug_abbrev + 0x414f + 0x414f + 0x6c + + + + .debug_abbrev + 0x41bb + 0x41bb + 0x6e + + + + .debug_abbrev + 0x4229 + 0x4229 + 0x6e + + + + .debug_abbrev + 0x4297 + 0x4297 + 0x52 + + + + .debug_abbrev + 0x42e9 + 0x42e9 + 0x5e + + + + .debug_abbrev + 0x4347 + 0x4347 + 0x61 + + + + .debug_abbrev + 0x43a8 + 0x43a8 + 0x61 + + + + .debug_abbrev + 0x4409 + 0x4409 + 0x61 + + + + .debug_abbrev + 0x446a + 0x446a + 0xd9 + + + + .debug_abbrev + 0x4543 + 0x4543 + 0x8f + + + + .debug_abbrev + 0x45d2 + 0x45d2 + 0x60 + + + + .debug_abbrev + 0x4632 + 0x4632 + 0xac + + + + .debug_abbrev + 0x46de + 0x46de + 0x1f + + + + .debug_abbrev + 0x46fd + 0x46fd + 0x24 + + + + .debug_abbrev + 0x4721 + 0x4721 + 0x24 + + + + .debug_abbrev + 0x4745 + 0x4745 + 0x64 .debug_abbrev - 0x4f97 - 0x4f97 - 0x8b + 0x47a9 + 0x47a9 + 0x63 - + .debug_abbrev - 0x5022 - 0x5022 - 0x8b - + 0x480c + 0x480c + 0xb4 + - + .debug_abbrev - 0x50ad - 0x50ad - 0x7c - + 0x48c0 + 0x48c0 + 0x7d + - + .debug_abbrev - 0x5129 - 0x5129 + 0x493d + 0x493d + 0x7d + + + + .debug_abbrev + 0x49ba + 0x49ba + 0x6d + + + + .debug_abbrev + 0x4a27 + 0x4a27 + 0x7d + + + + .debug_abbrev + 0x4aa4 + 0x4aa4 + 0x7d + + + + .debug_abbrev + 0x4b21 + 0x4b21 + 0x73 + + + + .debug_abbrev + 0x4b94 + 0x4b94 + 0x17c + + + + .debug_abbrev + 0x4d10 + 0x4d10 0x6e - + - + .debug_abbrev - 0x5197 - 0x5197 - 0x7c - + 0x4d7e + 0x4d7e + 0x7f + - + .debug_abbrev - 0x5213 - 0x5213 + 0x4dfd + 0x4dfd 0x6e - + - + .debug_abbrev - 0x5281 - 0x5281 + 0x4e6b + 0x4e6b + 0x6c + + + + .debug_abbrev + 0x4ed7 + 0x4ed7 + 0x6e + + + + .debug_abbrev + 0x4f45 + 0x4f45 0x7c - + + + + .debug_abbrev + 0x4fc1 + 0x4fc1 + 0x7c + + + + .debug_abbrev + 0x503d + 0x503d + 0x7a + + + + .debug_abbrev + 0x50b7 + 0x50b7 + 0x6c + + + + .debug_abbrev + 0x5123 + 0x5123 + 0x6c + + + + .debug_abbrev + 0x518f + 0x518f + 0x6c + + + + .debug_abbrev + 0x51fb + 0x51fb + 0x6c + + + + .debug_abbrev + 0x5267 + 0x5267 + 0x6c + + + + .debug_abbrev + 0x52d3 + 0x52d3 + 0x115 + + + + .debug_abbrev + 0x53e8 + 0x53e8 + 0x29 + + + + .debug_abbrev + 0x5411 + 0x5411 + 0x29 + + + + .debug_abbrev + 0x543a + 0x543a + 0x29 + + + + .debug_abbrev + 0x5463 + 0x5463 + 0x6e + + + + .debug_abbrev + 0x54d1 + 0x54d1 + 0x6e + + + + .debug_abbrev + 0x553f + 0x553f + 0x6e + + + + .debug_abbrev + 0x55ad + 0x55ad + 0x8b + + + + .debug_abbrev + 0x5638 + 0x5638 + 0x8b + + + + .debug_abbrev + 0x56c3 + 0x56c3 + 0x7c + + + + .debug_abbrev + 0x573f + 0x573f + 0x6e + + + + .debug_abbrev + 0x57ad + 0x57ad + 0x7c + + + + .debug_abbrev + 0x5829 + 0x5829 + 0x6e + + + + .debug_abbrev + 0x5897 + 0x5897 + 0x7c + + + + .debug_abbrev + 0x5913 + 0x5913 + 0x6c + + + + .debug_abbrev + 0x597f + 0x597f + 0x7c + + + + .debug_abbrev + 0x59fb + 0x59fb + 0x168 + .debug_abbrev - 0x52fd - 0x52fd - 0x6c - - - - .debug_abbrev - 0x5369 - 0x5369 - 0x7c - - - - .debug_abbrev - 0x53e5 - 0x53e5 - 0x196 - - - - .debug_abbrev - 0x557b - 0x557b + 0x5b63 + 0x5b63 0x29 - + - + .debug_abbrev - 0x55a4 - 0x55a4 - 0x29 - - - - .debug_abbrev - 0x55cd - 0x55cd + 0x5b8c + 0x5b8c 0x7a - + - + .debug_abbrev - 0x5647 - 0x5647 - 0x5e - - - - .debug_abbrev - 0x56a5 - 0x56a5 - 0x7a - - - - .debug_abbrev - 0x571f - 0x571f + 0x5c06 + 0x5c06 0x7c - + - + .debug_abbrev - 0x579b - 0x579b - 0x7a - - - - .debug_abbrev - 0x5815 - 0x5815 - 0x7a - - - - .debug_abbrev - 0x588f - 0x588f + 0x5c82 + 0x5c82 0x7c - + - + .debug_abbrev - 0x590b - 0x590b + 0x5cfe + 0x5cfe 0x68 - + .debug_abbrev - 0x5973 - 0x5973 + 0x5d66 + 0x5d66 0x29 - + .debug_abbrev - 0x599c - 0x599c + 0x5d8f + 0x5d8f 0x4e - + - + .debug_abbrev - 0x59ea - 0x59ea + 0x5ddd + 0x5ddd 0x40 - + - + .debug_abbrev - 0x5a2a - 0x5a2a + 0x5e1d + 0x5e1d 0x40 - + - + .debug_abbrev - 0x5a6a - 0x5a6a + 0x5e5d + 0x5e5d 0x40 - + - + .debug_abbrev - 0x5aaa - 0x5aaa + 0x5e9d + 0x5e9d 0x5e - - - - .debug_abbrev - 0x5b08 - 0x5b08 - 0x5e - - - - .debug_abbrev - 0x5b66 - 0x5b66 - 0x6c - - - - .debug_abbrev - 0x5bd2 - 0x5bd2 - 0x7c - - - - .debug_abbrev - 0x5c4e - 0x5c4e - 0x7c - - - - .debug_abbrev - 0x5cca - 0x5cca - 0x6c - - - - .debug_abbrev - 0x5d36 - 0x5d36 - 0x71 - - - - .debug_abbrev - 0x5da7 - 0x5da7 - 0x8f - - - - .debug_abbrev - 0x5e36 - 0x5e36 - 0x4b - - - - .debug_abbrev - 0x5e81 - 0x5e81 - 0x6c - + .debug_abbrev - 0x5eed - 0x5eed - 0x6c - + 0x5efb + 0x5efb + 0x5e + - + .debug_abbrev 0x5f59 0x5f59 0x6c - + - + .debug_abbrev 0x5fc5 0x5fc5 + 0x7c + + + + .debug_abbrev + 0x6041 + 0x6041 + 0x7c + + + + .debug_abbrev + 0x60bd + 0x60bd 0x6c - + - + .debug_abbrev - 0x6031 - 0x6031 - 0x3c - + 0x6129 + 0x6129 + 0x71 + - + .debug_abbrev - 0x606d - 0x606d - 0x3c - + 0x619a + 0x619a + 0x8f + - + .debug_abbrev - 0x60a9 - 0x60a9 - 0x3c - + 0x6229 + 0x6229 + 0x4b + - + .debug_abbrev - 0x60e5 - 0x60e5 - 0x3c - + 0x6274 + 0x6274 + 0x6c + - + .debug_abbrev - 0x6121 - 0x6121 + 0x62e0 + 0x62e0 + 0x6c + + + + .debug_abbrev + 0x634c + 0x634c + 0x6c + + + + .debug_abbrev + 0x63b8 + 0x63b8 + 0x6c + + + + .debug_abbrev + 0x6424 + 0x6424 0x3c - + .debug_abbrev - 0x615d - 0x615d + 0x6460 + 0x6460 0x3c - + .debug_abbrev - 0x6199 - 0x6199 + 0x649c + 0x649c 0x3c - + .debug_abbrev - 0x61d5 - 0x61d5 - 0x3e + 0x64d8 + 0x64d8 + 0x3c + + .debug_abbrev + 0x6514 + 0x6514 + 0x3c + + + + .debug_abbrev + 0x6550 + 0x6550 + 0x3c + + + + .debug_abbrev + 0x658c + 0x658c + 0x3c + + + + .debug_abbrev + 0x65c8 + 0x65c8 + 0x3e + + .debug_abbrev - 0x6213 - 0x6213 + 0x6606 + 0x6606 0x3e - + - + .debug_abbrev - 0x6251 - 0x6251 + 0x6644 + 0x6644 0x4a - + - + .debug_abbrev - 0x629b - 0x629b + 0x668e + 0x668e 0x4f - + - + .debug_abbrev - 0x62ea - 0x62ea + 0x66dd + 0x66dd 0x5d - + .debug_abbrev - 0x6347 - 0x6347 + 0x673a + 0x673a 0x6f - + .debug_abbrev - 0x63b6 - 0x63b6 + 0x67a9 + 0x67a9 0x24 - + .debug_abbrev - 0x63da - 0x63da + 0x67cd + 0x67cd 0x37 - + .debug_abbrev - 0x6411 - 0x6411 + 0x6804 + 0x6804 0x74 - + .debug_abbrev - 0x6485 - 0x6485 + 0x6878 + 0x6878 0x24 - + .debug_abbrev - 0x64a9 - 0x64a9 + 0x689c + 0x689c 0x24 - + - + .debug_abbrev - 0x64cd - 0x64cd + 0x68c0 + 0x68c0 0x37 - + .debug_abbrev - 0x6504 - 0x6504 + 0x68f7 + 0x68f7 0x6f - + .debug_abbrev - 0x6573 - 0x6573 + 0x6966 + 0x6966 0x24 - + - + .debug_abbrev - 0x6597 - 0x6597 + 0x698a + 0x698a 0x35 - + .debug_abbrev - 0x65cc - 0x65cc + 0x69bf + 0x69bf 0x24 - + - + .debug_abbrev - 0x65f0 - 0x65f0 + 0x69e3 + 0x69e3 0xd6 - + .debug_abbrev - 0x66c6 - 0x66c6 + 0x6ab9 + 0x6ab9 0x29 - + - + .debug_abbrev - 0x66ef - 0x66ef + 0x6ae2 + 0x6ae2 0x27 - + - + .debug_abbrev - 0x6716 - 0x6716 + 0x6b09 + 0x6b09 0x76 - + - + .debug_abbrev - 0x678c - 0x678c + 0x6b7f + 0x6b7f 0x6d - + - + .debug_abbrev - 0x67f9 - 0x67f9 + 0x6bec + 0x6bec 0x6d - + - + .debug_abbrev - 0x6866 - 0x6866 + 0x6c59 + 0x6c59 0x8c - + - + .debug_abbrev - 0x68f2 - 0x68f2 + 0x6ce5 + 0x6ce5 0x7b - + - + .debug_abbrev - 0x696d - 0x696d + 0x6d60 + 0x6d60 0x8e - + - + .debug_abbrev - 0x69fb - 0x69fb + 0x6dee + 0x6dee 0x7f - - - - .debug_abbrev - 0x6a7a - 0x6a7a - 0x24 - - - - .debug_abbrev - 0x6a9e - 0x6a9e - 0x35 - - - - .debug_abbrev - 0x6ad3 - 0x6ad3 - 0x71 - - - - .debug_abbrev - 0x6b44 - 0x6b44 - 0x45 - - - - .debug_abbrev - 0x6b89 - 0x6b89 - 0x71 - - - - .debug_abbrev - 0x6bfa - 0x6bfa - 0x29 - - - - .debug_abbrev - 0x6c23 - 0x6c23 - 0x55 - - - - .debug_abbrev - 0x6c78 - 0x6c78 - 0xc0 - - .debug_abbrev - 0x6d38 - 0x6d38 - 0x7e - - - - .debug_abbrev - 0x6db6 - 0x6db6 - 0x24 - - - - .debug_abbrev - 0x6dda - 0x6dda - 0x24 - - - - .debug_abbrev - 0x6dfe - 0x6dfe - 0x24 - - - - .debug_abbrev - 0x6e22 - 0x6e22 - 0x4b - - - + .debug_abbrev 0x6e6d 0x6e6d - 0x55 + 0x24 + + + + .debug_abbrev + 0x6e91 + 0x6e91 + 0x35 - + .debug_abbrev - 0x6ec2 - 0x6ec2 + 0x6ec6 + 0x6ec6 + 0x71 + + + + .debug_abbrev + 0x6f37 + 0x6f37 0x45 + + + + .debug_abbrev + 0x6f7c + 0x6f7c + 0x71 + + + + .debug_abbrev + 0x6fed + 0x6fed + 0x29 - + .debug_abbrev - 0x6f07 - 0x6f07 + 0x7016 + 0x7016 + 0x55 + + + + .debug_abbrev + 0x706b + 0x706b + 0xc0 + + + + .debug_abbrev + 0x712b + 0x712b + 0x7e + + + + .debug_abbrev + 0x71a9 + 0x71a9 + 0x24 + + + + .debug_abbrev + 0x71cd + 0x71cd + 0x24 + + + + .debug_abbrev + 0x71f1 + 0x71f1 + 0x24 + + + + .debug_abbrev + 0x7215 + 0x7215 + 0x4b + + + + .debug_abbrev + 0x7260 + 0x7260 + 0x55 + + + + .debug_abbrev + 0x72b5 + 0x72b5 + 0x45 + + + + .debug_abbrev + 0x72fa + 0x72fa 0x50 - + - + .debug_abbrev - 0x6f57 - 0x6f57 + 0x734a + 0x734a 0x29 - + - + .debug_abbrev - 0x6f80 - 0x6f80 + 0x7373 + 0x7373 0x53 - + - + .debug_abbrev - 0x6fd3 - 0x6fd3 + 0x73c6 + 0x73c6 0xf - + .debug_str 0x0 0x0 - 0x2fb - - - - .debug_str - 0x2fb - 0x2fb - 0x555 - - - - .debug_str - 0x850 - 0x850 0x124 - + .debug_str - 0x974 - 0x974 + 0x124 + 0x124 0xc8 - + .debug_str - 0xa3c - 0xa3c + 0x1ec + 0x1ec 0x2ae - + .debug_str - 0xcea - 0xcea + 0x49a + 0x49a 0x108 - + .debug_str - 0xdf2 - 0xdf2 + 0x5a2 + 0x5a2 0xca - + .debug_str - 0xebc - 0xebc - 0x2b2 + 0x66c + 0x66c + 0x2fb - + .debug_str - 0x116e - 0x116e - 0xfd + 0x967 + 0x967 + 0x2b3 .debug_str - 0x126b - 0x126b + 0xc1a + 0xc1a 0xfd - + .debug_str - 0x1368 - 0x1368 + 0xd17 + 0xd17 0x344 .debug_str - 0x16ac - 0x16ac + 0x105b + 0x105b 0x146 - + .debug_str - 0x17f2 - 0x17f2 + 0x11a1 + 0x11a1 0xf4 - + .debug_str - 0x18e6 - 0x18e6 + 0x1295 + 0x1295 + 0x555 + + + + .debug_str + 0x17ea + 0x17ea + 0xfd + + + + .debug_str + 0x18e7 + 0x18e7 + 0x102 + + + + .debug_str + 0x19e9 + 0x19e9 0x2120 - + - + .debug_str - 0x3a06 - 0x3a06 + 0x3b09 + 0x3b09 0x594 - + - + .debug_str - 0x3f9a - 0x3f9a + 0x409d + 0x409d 0x567 - + - + .debug_str - 0x4501 - 0x4501 + 0x4604 + 0x4604 0x39d - + .debug_str - 0x489e - 0x489e + 0x49a1 + 0x49a1 0xfd - + - + .debug_str - 0x499b - 0x499b + 0x4a9e + 0x4a9e 0x107 - + - + .debug_str - 0x4aa2 - 0x4aa2 + 0x4ba5 + 0x4ba5 0xe0 - + - + .debug_str - 0x4b82 - 0x4b82 + 0x4c85 + 0x4c85 0x593 - + - + .debug_str - 0x5115 - 0x5115 + 0x5218 + 0x5218 0x5c0 - + .debug_str - 0x56d5 - 0x56d5 + 0x57d8 + 0x57d8 0x105 - + .debug_str - 0x57da - 0x57da + 0x58dd + 0x58dd 0x10b - + .debug_str - 0x58e5 - 0x58e5 + 0x59e8 + 0x59e8 0x140 - + .debug_str - 0x5a25 - 0x5a25 + 0x5b28 + 0x5b28 0x118 - + - + .debug_str - 0x5b3d - 0x5b3d + 0x5c40 + 0x5c40 0x16b - + .debug_str - 0x5ca8 - 0x5ca8 + 0x5dab + 0x5dab 0x158 - + - + .debug_str - 0x5e00 - 0x5e00 + 0x5f03 + 0x5f03 0x10a - + - + .debug_str - 0x5f0a - 0x5f0a + 0x600d + 0x600d 0x140 - + - + .debug_str - 0x604a - 0x604a + 0x614d + 0x614d 0xed - + - + .debug_str - 0x6137 - 0x6137 + 0x623a + 0x623a 0x157 - + - + .debug_str - 0x628e - 0x628e + 0x6391 + 0x6391 0x150 - + - + .debug_str - 0x63de - 0x63de + 0x64e1 + 0x64e1 0x197 - + - + .debug_aranges 0x0 0x0 0x20 - + .debug_aranges 0x20 0x20 0x20 - + .debug_aranges 0x40 0x40 0x20 - + .debug_aranges 0x60 0x60 0x20 - + - + .debug_aranges 0x80 0x80 0x20 - + - + .debug_aranges 0xa0 0xa0 0x20 - + - + .debug_aranges 0xc0 0xc0 0x20 - + - + .debug_aranges 0xe0 0xe0 0x20 - + - + .debug_aranges 0x100 0x100 0x20 - + - + .debug_aranges 0x120 0x120 0x20 - + - + .debug_aranges 0x140 0x140 0x20 - + - + .debug_aranges 0x160 0x160 0x20 - + - + .debug_aranges 0x180 0x180 0x20 - + - + .debug_aranges 0x1a0 0x1a0 0x20 - + - + .debug_aranges 0x1c0 0x1c0 0x20 - + - + .debug_aranges 0x1e0 0x1e0 0x20 - + - + .debug_aranges 0x200 0x200 0x20 - + - + .debug_aranges 0x220 0x220 0x20 - + - + .debug_aranges 0x240 0x240 0x20 - + - + .debug_aranges 0x260 0x260 0x20 - + - + .debug_aranges 0x280 0x280 0x20 - + - + .debug_aranges 0x2a0 0x2a0 0x20 - + - + .debug_aranges 0x2c0 0x2c0 0x20 - + - + .debug_aranges 0x2e0 0x2e0 0x20 - + - + .debug_aranges 0x300 0x300 0x20 - + - + .debug_aranges 0x320 0x320 0x20 - + - + .debug_aranges 0x340 0x340 0x20 - + - + .debug_aranges 0x360 0x360 0x20 - + - + .debug_aranges 0x380 0x380 0x20 - + - + .debug_aranges 0x3a0 0x3a0 0x20 - + - + .debug_aranges 0x3c0 0x3c0 0x20 - + - + .debug_aranges 0x3e0 0x3e0 0x20 - + - + .debug_aranges 0x400 0x400 0x20 - + - + .debug_aranges 0x420 0x420 0x20 - + - + .debug_aranges 0x440 0x440 0x20 - + - + .debug_aranges 0x460 0x460 0x20 - + - + .debug_aranges 0x480 0x480 0x20 - + - + .debug_aranges 0x4a0 0x4a0 0x20 - + - + .debug_aranges 0x4c0 0x4c0 0x20 - + - + .debug_aranges 0x4e0 0x4e0 0x20 - + - + .debug_aranges 0x500 0x500 0x20 - + - + .debug_aranges 0x520 0x520 0x20 - + - + .debug_aranges 0x540 0x540 0x20 - + - + .debug_aranges 0x560 0x560 0x20 - + - + .debug_aranges 0x580 0x580 0x20 - + - + .debug_aranges 0x5a0 0x5a0 0x20 - + - + .debug_aranges 0x5c0 0x5c0 0x20 - + - + .debug_aranges 0x5e0 0x5e0 0x20 - + - + .debug_aranges 0x600 0x600 0x20 - + - + .debug_aranges 0x620 0x620 0x20 - + - + .debug_aranges 0x640 0x640 0x20 - + - + .debug_aranges 0x660 0x660 0x20 - + - + .debug_aranges 0x680 0x680 0x20 - + - + .debug_aranges 0x6a0 0x6a0 0x20 - + - + .debug_aranges 0x6c0 0x6c0 0x20 - + - + .debug_aranges 0x6e0 0x6e0 0x20 - + - + .debug_aranges 0x700 0x700 0x20 - + - + .debug_aranges 0x720 0x720 0x20 - + - + .debug_aranges 0x740 0x740 0x20 - + - + .debug_aranges 0x760 0x760 0x20 - + - + .debug_aranges 0x780 0x780 0x20 - + - + .debug_aranges 0x7a0 0x7a0 0x20 - + - + .debug_aranges 0x7c0 0x7c0 0x20 - + - + .debug_aranges 0x7e0 0x7e0 0x20 - + - + .debug_aranges 0x800 0x800 0x20 - + - + .debug_aranges 0x820 0x820 0x20 - + - + .debug_aranges 0x840 0x840 0x20 - + - + .debug_aranges 0x860 0x860 0x20 - + - + .debug_aranges 0x880 0x880 0x20 - + - + .debug_aranges 0x8a0 0x8a0 0x20 - + - + .debug_aranges 0x8c0 0x8c0 0x20 - + - + .debug_aranges 0x8e0 0x8e0 0x20 - + - + .debug_aranges 0x900 0x900 0x20 - + - + .debug_aranges 0x920 0x920 0x20 - + - + .debug_aranges 0x940 0x940 0x20 - + - + .debug_aranges 0x960 0x960 0x20 - + - + .debug_aranges 0x980 0x980 0x20 - + - + .debug_aranges 0x9a0 0x9a0 0x20 - + - + .debug_aranges 0x9c0 0x9c0 0x20 - + - + .debug_aranges 0x9e0 0x9e0 0x20 - + - + .debug_aranges 0xa00 0xa00 0x20 - + - + .debug_aranges 0xa20 0xa20 0x20 - + - + .debug_aranges 0xa40 0xa40 0x20 - + - + .debug_aranges 0xa60 0xa60 0x20 - + - + .debug_aranges 0xa80 0xa80 0x20 - + - + .debug_aranges 0xaa0 0xaa0 0x20 - + - + .debug_aranges 0xac0 0xac0 0x20 - + - + .debug_aranges 0xae0 0xae0 0x20 - + - + .debug_aranges 0xb00 0xb00 0x20 - + - + .debug_aranges 0xb20 0xb20 0x20 - + - + .debug_aranges 0xb40 0xb40 0x20 - + - + .debug_aranges 0xb60 0xb60 0x20 - + - + .debug_aranges 0xb80 0xb80 0x20 - + - + .debug_aranges 0xba0 0xba0 0x20 - + .debug_aranges 0xbc0 0xbc0 0x20 - + - + .debug_aranges 0xbe0 0xbe0 0x20 - + - + .debug_aranges 0xc00 0xc00 0x20 - + - + .debug_aranges 0xc20 0xc20 0x20 - + - + .debug_aranges 0xc40 0xc40 0x20 - + - + .debug_aranges 0xc60 0xc60 0x20 - + - + .debug_aranges 0xc80 0xc80 0x20 - + - + .debug_aranges 0xca0 0xca0 0x20 - + - + .debug_aranges 0xcc0 0xcc0 0x20 - + - + .debug_aranges 0xce0 0xce0 0x20 - + - + .debug_aranges 0xd00 0xd00 0x20 - + - + .debug_aranges 0xd20 0xd20 0x20 - + - + .debug_aranges 0xd40 0xd40 0x20 - + - + .debug_aranges 0xd60 0xd60 0x20 - + - + .debug_aranges 0xd80 0xd80 0x20 - + - + .debug_aranges 0xda0 0xda0 0x20 - + - + .debug_aranges 0xdc0 0xdc0 0x20 - + - + .debug_aranges 0xde0 0xde0 0x20 - + - + .debug_aranges 0xe00 0xe00 0x20 - + - + .debug_aranges 0xe20 0xe20 0x20 - + - + .debug_aranges 0xe40 0xe40 0x20 - + - + .debug_aranges 0xe60 0xe60 0x20 - + - + .debug_aranges 0xe80 0xe80 0x20 - + - + .debug_aranges 0xea0 0xea0 0x20 - + - + .debug_aranges 0xec0 0xec0 0x20 - + - + .debug_aranges 0xee0 0xee0 0x20 - + - + .debug_aranges 0xf00 0xf00 0x20 - + - + .debug_aranges 0xf20 0xf20 0x20 - + - + .debug_aranges 0xf40 0xf40 0x20 - + - + .debug_aranges 0xf60 0xf60 0x20 - + - + .debug_aranges 0xf80 0xf80 0x20 - + - + .debug_aranges 0xfa0 0xfa0 0x20 - + - + .debug_aranges 0xfc0 0xfc0 0x20 - + - + .debug_aranges 0xfe0 0xfe0 0x20 - + - + .debug_aranges 0x1000 0x1000 0x20 - + - + .debug_aranges 0x1020 0x1020 0x20 - + - + .debug_aranges 0x1040 0x1040 0x20 - + - + .debug_aranges 0x1060 0x1060 0x20 - + - + .debug_aranges 0x1080 0x1080 0x20 - + - + .debug_aranges 0x10a0 0x10a0 0x20 - + - + .debug_aranges 0x10c0 0x10c0 0x20 - + - + .debug_aranges 0x10e0 0x10e0 0x20 - + - + .debug_aranges 0x1100 0x1100 0x20 - + - + .debug_aranges 0x1120 0x1120 0x20 - + - + .debug_aranges 0x1140 0x1140 0x20 - + - + .debug_aranges 0x1160 0x1160 0x20 - + - + .debug_aranges 0x1180 0x1180 0x20 - + - + .debug_aranges 0x11a0 0x11a0 0x20 - + - + .debug_aranges 0x11c0 0x11c0 0x20 - + - + .debug_aranges 0x11e0 0x11e0 0x20 - + - + .debug_aranges 0x1200 0x1200 0x20 - + - + .debug_aranges 0x1220 0x1220 0x20 - - - - .debug_aranges - 0x1240 - 0x1240 - 0x20 .debug_aranges - 0x1260 - 0x1260 + 0x1240 + 0x1240 0x20 - + + .debug_aranges + 0x1260 + 0x1260 + 0x20 + + + .debug_aranges 0x1280 0x1280 0x20 - + - + .debug_aranges 0x12a0 0x12a0 0x20 - + - + .debug_aranges 0x12c0 0x12c0 - 0x28 - - - - .debug_aranges - 0x12e8 - 0x12e8 0x20 - + .debug_aranges - 0x1308 - 0x1308 + 0x12e0 + 0x12e0 0x20 - + .debug_aranges - 0x1328 - 0x1328 + 0x1300 + 0x1300 0x20 - + + .debug_aranges + 0x1320 + 0x1320 + 0x28 + + + .debug_aranges 0x1348 0x1348 0x20 - + - + .debug_aranges 0x1368 0x1368 0x20 - + - + .debug_aranges 0x1388 0x1388 0x20 - + - + .debug_aranges 0x13a8 0x13a8 0x20 - + - + .debug_aranges 0x13c8 0x13c8 0x20 - + - + .debug_aranges 0x13e8 0x13e8 0x20 - + - + .debug_aranges 0x1408 0x1408 0x20 - + - + .debug_aranges 0x1428 0x1428 0x20 - + - + .debug_aranges 0x1448 0x1448 0x20 - + - + .debug_aranges 0x1468 0x1468 0x20 - + - + .debug_aranges 0x1488 0x1488 0x20 - + - + .debug_aranges 0x14a8 0x14a8 0x20 - + .debug_aranges 0x14c8 0x14c8 0x20 - + + .debug_aranges + 0x14e8 + 0x14e8 + 0x20 + + + + .debug_aranges + 0x1508 + 0x1508 + 0x20 + + + + .debug_aranges + 0x1528 + 0x1528 + 0x20 + + + .debug_pubnames 0x0 0x0 - 0x20 + 0x6c - + .debug_pubnames - 0x20 - 0x20 - 0x2b + 0x6c + 0x6c + 0x2e - + .debug_pubnames - 0x4b - 0x4b - 0x22 - - - - .debug_pubnames - 0x6d - 0x6d - 0x22 - - - - .debug_pubnames - 0x8f - 0x8f - 0x28 - - - - .debug_pubnames - 0xb7 - 0xb7 - 0x22 - - - - .debug_pubnames - 0xd9 - 0xd9 - 0x28 - - - - .debug_pubnames - 0x101 - 0x101 - 0x22 - - - - .debug_pubnames - 0x123 - 0x123 - 0x28 - - - - .debug_pubnames - 0x14b - 0x14b - 0x22 - - - - .debug_pubnames - 0x16d - 0x16d - 0x28 - - - - .debug_pubnames - 0x195 - 0x195 - 0x22 - - - - .debug_pubnames - 0x1b7 - 0x1b7 - 0x28 - - - - .debug_pubnames - 0x1df - 0x1df - 0x22 - - - - .debug_pubnames - 0x201 - 0x201 - 0x28 - - - - .debug_pubnames - 0x229 - 0x229 - 0x22 - - - - .debug_pubnames - 0x24b - 0x24b - 0x27 - - - - .debug_pubnames - 0x272 - 0x272 - 0x22 - - - - .debug_pubnames - 0x294 - 0x294 - 0x27 - - - - .debug_pubnames - 0x2bb - 0x2bb - 0x22 - - - - .debug_pubnames - 0x2dd - 0x2dd - 0x27 - - - - .debug_pubnames - 0x304 - 0x304 - 0x22 - - - - .debug_pubnames - 0x326 - 0x326 - 0x27 - - - - .debug_pubnames - 0x34d - 0x34d - 0x22 - - - - .debug_pubnames - 0x36f - 0x36f - 0x27 - - - - .debug_pubnames - 0x396 - 0x396 - 0x22 - - - - .debug_pubnames - 0x3b8 - 0x3b8 - 0x27 - - - - .debug_pubnames - 0x3df - 0x3df - 0x22 - - - - .debug_pubnames - 0x401 - 0x401 - 0x27 - - - - .debug_pubnames - 0x428 - 0x428 - 0x22 - - - - .debug_pubnames - 0x44a - 0x44a - 0x27 - - - - .debug_pubnames - 0x471 - 0x471 - 0x22 - - - - .debug_pubnames - 0x493 - 0x493 - 0x27 - - - - .debug_pubnames - 0x4ba - 0x4ba - 0x22 - - - - .debug_pubnames - 0x4dc - 0x4dc - 0x27 - - - - .debug_pubnames - 0x503 - 0x503 - 0x22 - - - - .debug_pubnames - 0x525 - 0x525 - 0x27 - - - - .debug_pubnames - 0x54c - 0x54c - 0x22 - - - - .debug_pubnames - 0x56e - 0x56e - 0x27 - - - - .debug_pubnames - 0x595 - 0x595 - 0x22 - - - - .debug_pubnames - 0x5b7 - 0x5b7 - 0x27 - - - - .debug_pubnames - 0x5de - 0x5de - 0x22 - - - - .debug_pubnames - 0x600 - 0x600 - 0x28 - - - - .debug_pubnames - 0x628 - 0x628 - 0x22 - - - - .debug_pubnames - 0x64a - 0x64a - 0x27 - - - - .debug_pubnames - 0x671 - 0x671 - 0x22 - - - - .debug_pubnames - 0x693 - 0x693 - 0x28 - - - - .debug_pubnames - 0x6bb - 0x6bb - 0x22 - - - - .debug_pubnames - 0x6dd - 0x6dd - 0x27 - - - - .debug_pubnames - 0x704 - 0x704 - 0x22 - - - - .debug_pubnames - 0x726 - 0x726 - 0x27 - - - - .debug_pubnames - 0x74d - 0x74d - 0x22 - - - - .debug_pubnames - 0x76f - 0x76f - 0x28 - - - - .debug_pubnames - 0x797 - 0x797 - 0x22 - - - - .debug_pubnames - 0x7b9 - 0x7b9 - 0x28 - - - - .debug_pubnames - 0x7e1 - 0x7e1 - 0x22 - - - - .debug_pubnames - 0x803 - 0x803 - 0x28 - - - - .debug_pubnames - 0x82b - 0x82b - 0x22 - - - - .debug_pubnames - 0x84d - 0x84d - 0x28 - - - - .debug_pubnames - 0x875 - 0x875 - 0x22 - - - - .debug_pubnames - 0x897 - 0x897 - 0x23 - - - - .debug_pubnames - 0x8ba - 0x8ba - 0x23 - - - - .debug_pubnames - 0x8dd - 0x8dd - 0x2c - - - - .debug_pubnames - 0x909 - 0x909 - 0x29 - - - - .debug_pubnames - 0x932 - 0x932 - 0x31 - - - - .debug_pubnames - 0x963 - 0x963 + 0x9a + 0x9a 0x2f - + .debug_pubnames - 0x992 - 0x992 - 0x2c - - - - .debug_pubnames - 0x9be - 0x9be - 0x28 - - - - .debug_pubnames - 0x9e6 - 0x9e6 - 0x2a - - - - .debug_pubnames - 0xa10 - 0xa10 - 0x22 - - - - .debug_pubnames - 0xa32 - 0xa32 - 0x2b - - - - .debug_pubnames - 0xa5d - 0xa5d - 0x2c - - - - .debug_pubnames - 0xa89 - 0xa89 - 0x1b - - - - .debug_pubnames - 0xaa4 - 0xaa4 - 0x22 - - - - .debug_pubnames - 0xac6 - 0xac6 - 0x2e - - - - .debug_pubnames - 0xaf4 - 0xaf4 - 0x2a - - - - .debug_pubnames - 0xb1e - 0xb1e - 0x28 - - - - .debug_pubnames - 0xb46 - 0xb46 - 0x30 - - - - .debug_pubnames - 0xb76 - 0xb76 - 0x29 - - - - .debug_pubnames - 0xb9f - 0xb9f - 0x2d - - - - .debug_pubnames - 0xbcc - 0xbcc - 0x2e - - - - .debug_pubnames - 0xbfa - 0xbfa - 0x2c - - - - .debug_pubnames - 0xc26 - 0xc26 - 0x2e - - - - .debug_pubnames - 0xc54 - 0xc54 - 0x2f - - - - .debug_pubnames - 0xc83 - 0xc83 - 0x2d - - - - .debug_pubnames - 0xcb0 - 0xcb0 - 0x29 - - - - .debug_pubnames - 0xcd9 - 0xcd9 - 0x28 - - - - .debug_pubnames - 0xd01 - 0xd01 + 0xc9 + 0xc9 0x27 - + .debug_pubnames - 0xd28 - 0xd28 - 0x27 - - - - .debug_pubnames - 0xd4f - 0xd4f - 0x27 - - - - .debug_pubnames - 0xd76 - 0xd76 - 0x43 - - - - .debug_pubnames - 0xdb9 - 0xdb9 - 0x59 - - - - .debug_pubnames - 0xe12 - 0xe12 - 0x27 - - - - .debug_pubnames - 0xe39 - 0xe39 - 0x22 - - - - .debug_pubnames - 0xe5b - 0xe5b - 0x27 - - - - .debug_pubnames - 0xe82 - 0xe82 - 0x22 - - - - .debug_pubnames - 0xea4 - 0xea4 - 0x23 - - - - .debug_pubnames - 0xec7 - 0xec7 - 0x27 - - - - .debug_pubnames - 0xeee - 0xeee - 0x22 - - - - .debug_pubnames - 0xf10 - 0xf10 - 0x28 - - - - .debug_pubnames - 0xf38 - 0xf38 - 0x27 - - - - .debug_pubnames - 0xf5f - 0xf5f - 0x22 - - - - .debug_pubnames - 0xf81 - 0xf81 - 0x28 - - - - .debug_pubnames - 0xfa9 - 0xfa9 - 0x27 - - - - .debug_pubnames - 0xfd0 - 0xfd0 - 0x22 - - - - .debug_pubnames - 0xff2 - 0xff2 + 0xf0 + 0xf0 0x20 - + .debug_pubnames - 0x1012 - 0x1012 - 0x28 + 0x110 + 0x110 + 0x2b - + .debug_pubnames - 0x103a - 0x103a + 0x13b + 0x13b 0x22 - - .debug_pubnames - 0x105c - 0x105c - 0x28 - - - - .debug_pubnames - 0x1084 - 0x1084 - 0x22 - - - - .debug_pubnames - 0x10a6 - 0x10a6 - 0x27 - - - - .debug_pubnames - 0x10cd - 0x10cd - 0x22 - - - - .debug_pubnames - 0x10ef - 0x10ef - 0x27 - - .debug_pubnames - 0x1116 - 0x1116 + 0x15d + 0x15d + 0x22 + + + + .debug_pubnames + 0x17f + 0x17f 0x28 + + .debug_pubnames + 0x1a7 + 0x1a7 + 0x22 + + + + .debug_pubnames + 0x1c9 + 0x1c9 + 0x28 + + + + .debug_pubnames + 0x1f1 + 0x1f1 + 0x22 + + + + .debug_pubnames + 0x213 + 0x213 + 0x28 + + + + .debug_pubnames + 0x23b + 0x23b + 0x22 + + + + .debug_pubnames + 0x25d + 0x25d + 0x28 + + + + .debug_pubnames + 0x285 + 0x285 + 0x22 + + + + .debug_pubnames + 0x2a7 + 0x2a7 + 0x28 + + + + .debug_pubnames + 0x2cf + 0x2cf + 0x22 + + + + .debug_pubnames + 0x2f1 + 0x2f1 + 0x28 + + + + .debug_pubnames + 0x319 + 0x319 + 0x22 + + + + .debug_pubnames + 0x33b + 0x33b + 0x27 + + + + .debug_pubnames + 0x362 + 0x362 + 0x22 + + + + .debug_pubnames + 0x384 + 0x384 + 0x27 + + + + .debug_pubnames + 0x3ab + 0x3ab + 0x22 + + + + .debug_pubnames + 0x3cd + 0x3cd + 0x27 + + + + .debug_pubnames + 0x3f4 + 0x3f4 + 0x22 + + + + .debug_pubnames + 0x416 + 0x416 + 0x27 + + + + .debug_pubnames + 0x43d + 0x43d + 0x22 + + + + .debug_pubnames + 0x45f + 0x45f + 0x27 + + + + .debug_pubnames + 0x486 + 0x486 + 0x22 + + + + .debug_pubnames + 0x4a8 + 0x4a8 + 0x27 + + + + .debug_pubnames + 0x4cf + 0x4cf + 0x22 + + + + .debug_pubnames + 0x4f1 + 0x4f1 + 0x27 + + + + .debug_pubnames + 0x518 + 0x518 + 0x22 + + + + .debug_pubnames + 0x53a + 0x53a + 0x27 + + + + .debug_pubnames + 0x561 + 0x561 + 0x22 + + + + .debug_pubnames + 0x583 + 0x583 + 0x27 + + + + .debug_pubnames + 0x5aa + 0x5aa + 0x22 + + + + .debug_pubnames + 0x5cc + 0x5cc + 0x27 + + + + .debug_pubnames + 0x5f3 + 0x5f3 + 0x22 + + + + .debug_pubnames + 0x615 + 0x615 + 0x27 + + + + .debug_pubnames + 0x63c + 0x63c + 0x22 + + + + .debug_pubnames + 0x65e + 0x65e + 0x27 + + + + .debug_pubnames + 0x685 + 0x685 + 0x22 + + + + .debug_pubnames + 0x6a7 + 0x6a7 + 0x27 + + + + .debug_pubnames + 0x6ce + 0x6ce + 0x22 + + + + .debug_pubnames + 0x6f0 + 0x6f0 + 0x28 + + + + .debug_pubnames + 0x718 + 0x718 + 0x22 + + + + .debug_pubnames + 0x73a + 0x73a + 0x27 + + + + .debug_pubnames + 0x761 + 0x761 + 0x22 + + + + .debug_pubnames + 0x783 + 0x783 + 0x28 + + + + .debug_pubnames + 0x7ab + 0x7ab + 0x22 + + + + .debug_pubnames + 0x7cd + 0x7cd + 0x27 + + + + .debug_pubnames + 0x7f4 + 0x7f4 + 0x22 + + + + .debug_pubnames + 0x816 + 0x816 + 0x27 + + + + .debug_pubnames + 0x83d + 0x83d + 0x22 + + .debug_pubnames - 0x113e - 0x113e - 0x22 + 0x85f + 0x85f + 0x28 - + .debug_pubnames - 0x1160 - 0x1160 - 0x28 + 0x887 + 0x887 + 0x22 .debug_pubnames - 0x1188 - 0x1188 - 0x22 + 0x8a9 + 0x8a9 + 0x28 .debug_pubnames - 0x11aa - 0x11aa + 0x8d1 + 0x8d1 0x22 - + .debug_pubnames - 0x11cc - 0x11cc - 0x20 - - - - .debug_pubnames - 0x11ec - 0x11ec + 0x8f3 + 0x8f3 0x28 - + .debug_pubnames - 0x1214 - 0x1214 - 0x21 - - - - .debug_pubnames - 0x1235 - 0x1235 - 0x30 - - - - .debug_pubnames - 0x1265 - 0x1265 - 0x29 - - - - .debug_pubnames - 0x128e - 0x128e - 0x29 - - - - .debug_pubnames - 0x12b7 - 0x12b7 - 0x30 - - - - .debug_pubnames - 0x12e7 - 0x12e7 - 0x2c - - - - .debug_pubnames - 0x1313 - 0x1313 - 0x2d - - - - .debug_pubnames - 0x1340 - 0x1340 + 0x91b + 0x91b 0x22 - + .debug_pubnames - 0x1362 - 0x1362 - 0x1f + 0x93d + 0x93d + 0x28 - + .debug_pubnames - 0x1381 - 0x1381 + 0x965 + 0x965 + 0x22 + + + + .debug_pubnames + 0x987 + 0x987 + 0x23 + + + + .debug_pubnames + 0x9aa + 0x9aa + 0x23 + + + + .debug_pubnames + 0x9cd + 0x9cd + 0x2c + + + + .debug_pubnames + 0x9f9 + 0x9f9 + 0x29 + + + + .debug_pubnames + 0xa22 + 0xa22 + 0x31 + + + + .debug_pubnames + 0xa53 + 0xa53 + 0x2f + + + + .debug_pubnames + 0xa82 + 0xa82 + 0x2c + + + + .debug_pubnames + 0xaae + 0xaae + 0x28 + + + + .debug_pubnames + 0xad6 + 0xad6 + 0x2a + + + + .debug_pubnames + 0xb00 + 0xb00 + 0x22 + + + + .debug_pubnames + 0xb22 + 0xb22 + 0x2b + + + + .debug_pubnames + 0xb4d + 0xb4d + 0x2c + + + + .debug_pubnames + 0xb79 + 0xb79 + 0x1b + + + + .debug_pubnames + 0xb94 + 0xb94 + 0x22 + + + + .debug_pubnames + 0xbb6 + 0xbb6 0x2e - + .debug_pubnames - 0x13af - 0x13af - 0x135 - + 0xbe4 + 0xbe4 + 0x2a + - + .debug_pubnames - 0x14e4 - 0x14e4 - 0x24 - + 0xc0e + 0xc0e + 0x30 + - + .debug_pubnames - 0x1508 - 0x1508 + 0xc3e + 0xc3e 0x29 + + + + .debug_pubnames + 0xc67 + 0xc67 + 0x2d + + + + .debug_pubnames + 0xc94 + 0xc94 + 0x2c + + + + .debug_pubnames + 0xcc0 + 0xcc0 + 0x2e + + + + .debug_pubnames + 0xcee + 0xcee + 0x2d + + + + .debug_pubnames + 0xd1b + 0xd1b + 0x29 + + + + .debug_pubnames + 0xd44 + 0xd44 + 0x28 + + + + .debug_pubnames + 0xd6c + 0xd6c + 0x27 + + + + .debug_pubnames + 0xd93 + 0xd93 + 0x43 - + .debug_pubnames - 0x1531 - 0x1531 + 0xdd6 + 0xdd6 + 0x59 + + + + .debug_pubnames + 0xe2f + 0xe2f 0x27 - + .debug_pubnames - 0x1558 - 0x1558 - 0x20 + 0xe56 + 0xe56 + 0x22 - + .debug_pubnames - 0x1578 - 0x1578 - 0x31 - - - - .debug_pubnames - 0x15a9 - 0x15a9 + 0xe78 + 0xe78 0x27 - + .debug_pubnames - 0x15d0 - 0x15d0 - 0x20 + 0xe9f + 0xe9f + 0x22 - + .debug_pubnames - 0x15f0 - 0x15f0 + 0xec1 + 0xec1 + 0x23 + + + + .debug_pubnames + 0xee4 + 0xee4 + 0x27 + + + + .debug_pubnames + 0xf0b + 0xf0b + 0x22 + + + + .debug_pubnames + 0xf2d + 0xf2d 0x28 - + .debug_pubnames - 0x1618 - 0x1618 - 0x1e + 0xf55 + 0xf55 + 0x27 - + .debug_pubnames - 0x1636 - 0x1636 - 0x2c + 0xf7c + 0xf7c + 0x22 - + .debug_pubnames - 0x1662 - 0x1662 - 0x26 + 0xf9e + 0xf9e + 0x28 - + .debug_pubnames - 0x1688 - 0x1688 - 0x1f + 0xfc6 + 0xfc6 + 0x27 - + .debug_pubnames - 0x16a7 - 0x16a7 - 0x1f + 0xfed + 0xfed + 0x22 + + + + .debug_pubnames + 0x100f + 0x100f + 0x20 + + + + .debug_pubnames + 0x102f + 0x102f + 0x28 + + + + .debug_pubnames + 0x1057 + 0x1057 + 0x22 + + + + .debug_pubnames + 0x1079 + 0x1079 + 0x28 + + + + .debug_pubnames + 0x10a1 + 0x10a1 + 0x22 + + + + .debug_pubnames + 0x10c3 + 0x10c3 + 0x27 + + + + .debug_pubnames + 0x10ea + 0x10ea + 0x22 + + + + .debug_pubnames + 0x110c + 0x110c + 0x27 + + + + .debug_pubnames + 0x1133 + 0x1133 + 0x28 + + + + .debug_pubnames + 0x115b + 0x115b + 0x22 + + + + .debug_pubnames + 0x117d + 0x117d + 0x28 + + + + .debug_pubnames + 0x11a5 + 0x11a5 + 0x22 + + + + .debug_pubnames + 0x11c7 + 0x11c7 + 0x22 + + + + .debug_pubnames + 0x11e9 + 0x11e9 + 0x20 + + + + .debug_pubnames + 0x1209 + 0x1209 + 0x28 + + + + .debug_pubnames + 0x1231 + 0x1231 + 0x21 + + + + .debug_pubnames + 0x1252 + 0x1252 + 0x30 + + + + .debug_pubnames + 0x1282 + 0x1282 + 0x29 + + + + .debug_pubnames + 0x12ab + 0x12ab + 0x29 .debug_pubnames - 0x16c6 - 0x16c6 - 0x25 + 0x12d4 + 0x12d4 + 0x30 + + + + .debug_pubnames + 0x1304 + 0x1304 + 0x2c + + + + .debug_pubnames + 0x1330 + 0x1330 + 0x2d + + + + .debug_pubnames + 0x135d + 0x135d + 0x22 + + + + .debug_pubnames + 0x137f + 0x137f + 0x1f + + + + .debug_pubnames + 0x139e + 0x139e + 0x2e + + + + .debug_pubnames + 0x13cc + 0x13cc + 0x1c5 - + .debug_pubnames - 0x16eb - 0x16eb - 0x25 + 0x1591 + 0x1591 + 0x24 - + .debug_pubnames - 0x1710 - 0x1710 + 0x15b5 + 0x15b5 + 0x29 + + + + .debug_pubnames + 0x15de + 0x15de + 0x27 + + + + .debug_pubnames + 0x1605 + 0x1605 + 0x20 + + + + .debug_pubnames + 0x1625 + 0x1625 + 0x31 + + + + .debug_pubnames + 0x1656 + 0x1656 + 0x27 + + + + .debug_pubnames + 0x167d + 0x167d + 0x20 + + + + .debug_pubnames + 0x169d + 0x169d + 0x28 + + + + .debug_pubnames + 0x16c5 + 0x16c5 + 0x1e + + + + .debug_pubnames + 0x16e3 + 0x16e3 + 0x2c + + + + .debug_pubnames + 0x170f + 0x170f + 0x26 + + + + .debug_pubnames + 0x1735 + 0x1735 0x1f - + .debug_pubnames - 0x172f - 0x172f - 0x26 + 0x1754 + 0x1754 + 0x1f + + .debug_pubnames + 0x1773 + 0x1773 + 0x25 + + + + .debug_pubnames + 0x1798 + 0x1798 + 0x25 + + + + .debug_pubnames + 0x17bd + 0x17bd + 0x1f + + + + .debug_pubnames + 0x17dc + 0x17dc + 0x26 + + + + .debug_pubnames + 0x1802 + 0x1802 + 0x8f + + + + .debug_pubnames + 0x1891 + 0x1891 + 0x25 + + + + .debug_pubnames + 0x18b6 + 0x18b6 + 0x1f + + + + .debug_pubnames + 0x18d5 + 0x18d5 + 0x26 + + .debug_pubnames - 0x1755 - 0x1755 - 0x34a - + 0x18fb + 0x18fb + 0x330 + - + .debug_pubnames - 0x1a9f - 0x1a9f + 0x1c2b + 0x1c2b 0x32 - + - + .debug_pubnames - 0x1ad1 - 0x1ad1 + 0x1c5d + 0x1c5d 0x2e - + - + .debug_pubnames - 0x1aff - 0x1aff + 0x1c8b + 0x1c8b 0x28 - + - + .debug_pubnames - 0x1b27 - 0x1b27 + 0x1cb3 + 0x1cb3 0x2c - + - + .debug_pubnames - 0x1b53 - 0x1b53 + 0x1cdf + 0x1cdf 0x27 - + - + .debug_pubnames - 0x1b7a - 0x1b7a + 0x1d06 + 0x1d06 0x27 - + - + .debug_pubnames - 0x1ba1 - 0x1ba1 + 0x1d2d + 0x1d2d 0x29 - + - + .debug_pubnames - 0x1bca - 0x1bca + 0x1d56 + 0x1d56 0x21 - + - + .debug_pubnames - 0x1beb - 0x1beb + 0x1d77 + 0x1d77 0x2b - + - + .debug_pubnames - 0x1c16 - 0x1c16 + 0x1da2 + 0x1da2 0x28 - + - + .debug_pubnames - 0x1c3e - 0x1c3e + 0x1dca + 0x1dca 0x22 - + - + .debug_pubnames - 0x1c60 - 0x1c60 + 0x1dec + 0x1dec 0x25 - - - - .debug_pubnames - 0x1c85 - 0x1c85 - 0x26 - - - - .debug_pubnames - 0x1cab - 0x1cab - 0x2b - - - - .debug_pubnames - 0x1cd6 - 0x1cd6 - 0x24 - - - - .debug_pubnames - 0x1cfa - 0x1cfa - 0x24 - - - - .debug_pubnames - 0x1d1e - 0x1d1e - 0x20 - - - - .debug_pubnames - 0x1d3e - 0x1d3e - 0x20 - - - - .debug_pubnames - 0x1d5e - 0x1d5e - 0x27 - - - - .debug_pubnames - 0x1d85 - 0x1d85 - 0x27 - - - - .debug_pubnames - 0x1dac - 0x1dac - 0x27 - - - - .debug_pubnames - 0x1dd3 - 0x1dd3 - 0x24 - - - - .debug_pubnames - 0x1df7 - 0x1df7 - 0x28 - - - - .debug_pubnames - 0x1e1f - 0x1e1f - 0x25 - - - - .debug_pubnames - 0x1e44 - 0x1e44 - 0x27 - - - - .debug_pubnames - 0x1e6b - 0x1e6b - 0x24 - - - - .debug_pubnames - 0x1e8f - 0x1e8f - 0x28 - - - - .debug_pubnames - 0x1eb7 - 0x1eb7 - 0x25 - - - - .debug_pubnames - 0x1edc - 0x1edc - 0x2e - - - - .debug_pubnames - 0x1f0a - 0x1f0a - 0x21 - - - - .debug_pubnames - 0x1f2b - 0x1f2b - 0x23 - - - - .debug_pubnames - 0x1f4e - 0x1f4e - 0x24 - - - - .debug_pubnames - 0x1f72 - 0x1f72 - 0x26 - - - - .debug_pubnames - 0x1f98 - 0x1f98 - 0x23 - - - - .debug_pubnames - 0x1fbb - 0x1fbb - 0x27 - - - - .debug_pubnames - 0x1fe2 - 0x1fe2 - 0x24 - - - - .debug_pubnames - 0x2006 - 0x2006 - 0x26 - - - - .debug_pubnames - 0x202c - 0x202c - 0x23 - - - - .debug_pubnames - 0x204f - 0x204f - 0x27 - - - - .debug_pubnames - 0x2076 - 0x2076 - 0x24 - - - - .debug_pubnames - 0x209a - 0x209a - 0x2c - - - - .debug_pubnames - 0x20c6 - 0x20c6 - 0x21 - - - - .debug_pubnames - 0x20e7 - 0x20e7 - 0x23 - - - - .debug_pubnames - 0x210a - 0x210a - 0x25 - - - - .debug_pubnames - 0x212f - 0x212f - 0x32 - - - - .debug_pubnames - 0x2161 - 0x2161 - 0x32 - - - - .debug_pubnames - 0x2193 - 0x2193 - 0x32 - - - - .debug_pubnames - 0x21c5 - 0x21c5 - 0x26 - - - - .debug_pubnames - 0x21eb - 0x21eb - 0x17d - - - - .debug_pubnames - 0x2368 - 0x2368 - 0x24 - - - - .debug_pubnames - 0x238c - 0x238c - 0x28 - - - - .debug_pubnames - 0x23b4 - 0x23b4 - 0x27 - - - - .debug_pubnames - 0x23db - 0x23db - 0x2d - - - - .debug_pubnames - 0x2408 - 0x2408 - 0x2e - - - - .debug_pubnames - 0x2436 - 0x2436 - 0x2c - + .debug_pubnames - 0x2462 - 0x2462 - 0x29 - - - - .debug_pubnames - 0x248b - 0x248b - 0x2a - - - - .debug_pubnames - 0x24b5 - 0x24b5 - 0x2e - - - - .debug_pubnames - 0x24e3 - 0x24e3 - 0x1f - - - - .debug_pubnames - 0x2502 - 0x2502 - 0x2b - - - - .debug_pubnames - 0x252d - 0x252d - 0x29 - - - - .debug_pubnames - 0x2556 - 0x2556 - 0x1f - - - - .debug_pubnames - 0x2575 - 0x2575 - 0x59 - - - - .debug_pubnames - 0x25ce - 0x25ce - 0x25 - - - - .debug_pubnames - 0x25f3 - 0x25f3 - 0x24 - - - - .debug_pubnames - 0x2617 - 0x2617 - 0x1f - - - - .debug_pubnames - 0x2636 - 0x2636 - 0x27 - - - - .debug_pubnames - 0x265d - 0x265d - 0x29 - - - - .debug_pubnames - 0x2686 - 0x2686 - 0x29 - - - - .debug_pubnames - 0x26af - 0x26af - 0x20 - - - - .debug_pubnames - 0x26cf - 0x26cf - 0x1f - - - - .debug_pubnames - 0x26ee - 0x26ee - 0x28 - - - - .debug_pubnames - 0x2716 - 0x2716 - 0x2a - - - - .debug_pubnames - 0x2740 - 0x2740 - 0x2a - - - - .debug_pubnames - 0x276a - 0x276a - 0x25 - - - - .debug_pubnames - 0x278f - 0x278f - 0x29 - - - - .debug_pubnames - 0x27b8 - 0x27b8 - 0x2d - - - - .debug_pubnames - 0x27e5 - 0x27e5 - 0x22 - - - - .debug_pubnames - 0x2807 - 0x2807 - 0x1c5 - - - - .debug_pubnames - 0x29cc - 0x29cc - 0x21 - - - - .debug_pubnames - 0x29ed - 0x29ed - 0x21 - - - - .debug_pubnames - 0x2a0e - 0x2a0e - 0x1d - - - - .debug_pubnames - 0x2a2b - 0x2a2b - 0x30 - - - - .debug_pubnames - 0x2a5b - 0x2a5b - 0x22 - - - - .debug_pubnames - 0x2a7d - 0x2a7d + 0x1e11 + 0x1e11 0x26 - + - + .debug_pubnames - 0x2aa3 - 0x2aa3 - 0x2c - + 0x1e37 + 0x1e37 + 0x2b + - + .debug_pubnames - 0x2acf - 0x2acf - 0x2a - + 0x1e62 + 0x1e62 + 0x24 + - + .debug_pubnames - 0x2af9 - 0x2af9 - 0x22 - + 0x1e86 + 0x1e86 + 0x24 + - + .debug_pubnames - 0x2b1b - 0x2b1b - 0x25 - + 0x1eaa + 0x1eaa + 0x20 + - + .debug_pubnames - 0x2b40 - 0x2b40 - 0x1f - + 0x1eca + 0x1eca + 0x20 + - + .debug_pubnames - 0x2b5f - 0x2b5f - 0x1d - - - - .debug_pubnames - 0x2b7c - 0x2b7c - 0x1f - - - - .debug_pubnames - 0x2b9b - 0x2b9b - 0x21 - - - - .debug_pubnames - 0x2bbc - 0x2bbc - 0x2e - - - - .debug_pubnames - 0x2bea - 0x2bea - 0x1e - - - - .debug_pubnames - 0x2c08 - 0x2c08 - 0x37 - - - - .debug_pubnames - 0x2c3f - 0x2c3f - 0x36 - - - - .debug_pubnames - 0x2c75 - 0x2c75 - 0x36 - - - - .debug_pubnames - 0x2cab - 0x2cab - 0x30 - - - - .debug_pubnames - 0x2cdb - 0x2cdb + 0x1eea + 0x1eea 0x27 - + - + .debug_pubnames - 0x2d02 - 0x2d02 - 0x30 - + 0x1f11 + 0x1f11 + 0x27 + - + .debug_pubnames - 0x2d32 - 0x2d32 - 0x2d - + 0x1f38 + 0x1f38 + 0x27 + + + + .debug_pubnames + 0x1f5f + 0x1f5f + 0x24 + + + + .debug_pubnames + 0x1f83 + 0x1f83 + 0x28 + + + + .debug_pubnames + 0x1fab + 0x1fab + 0x25 + + + + .debug_pubnames + 0x1fd0 + 0x1fd0 + 0x27 + + + + .debug_pubnames + 0x1ff7 + 0x1ff7 + 0x24 + .debug_pubnames - 0x2d5f - 0x2d5f + 0x201b + 0x201b + 0x28 + + + + .debug_pubnames + 0x2043 + 0x2043 + 0x25 + + + + .debug_pubnames + 0x2068 + 0x2068 0x2e - + - + .debug_pubnames - 0x2d8d - 0x2d8d + 0x2096 + 0x2096 + 0x21 + + + + .debug_pubnames + 0x20b7 + 0x20b7 0x23 - + - + .debug_pubnames - 0x2db0 - 0x2db0 - 0x23 - + 0x20da + 0x20da + 0x24 + - + .debug_pubnames - 0x2dd3 - 0x2dd3 - 0x23 - - - - .debug_pubnames - 0x2df6 - 0x2df6 + 0x20fe + 0x20fe 0x26 - + - + .debug_pubnames - 0x2e1c - 0x2e1c + 0x2124 + 0x2124 + 0x23 + + + + .debug_pubnames + 0x2147 + 0x2147 + 0x27 + + + + .debug_pubnames + 0x216e + 0x216e + 0x24 + + + + .debug_pubnames + 0x2192 + 0x2192 + 0x26 + + + + .debug_pubnames + 0x21b8 + 0x21b8 + 0x23 + + + + .debug_pubnames + 0x21db + 0x21db + 0x27 + + + + .debug_pubnames + 0x2202 + 0x2202 + 0x24 + + + + .debug_pubnames + 0x2226 + 0x2226 + 0x2c + + + + .debug_pubnames + 0x2252 + 0x2252 + 0x21 + + + + .debug_pubnames + 0x2273 + 0x2273 + 0x23 + + + + .debug_pubnames + 0x2296 + 0x2296 + 0x25 + + + + .debug_pubnames + 0x22bb + 0x22bb + 0x32 + + + + .debug_pubnames + 0x22ed + 0x22ed + 0x32 + + + + .debug_pubnames + 0x231f + 0x231f + 0x32 + + + + .debug_pubnames + 0x2351 + 0x2351 + 0x26 + + + + .debug_pubnames + 0x2377 + 0x2377 + 0x20 + + + + .debug_pubnames + 0x2397 + 0x2397 + 0x1f + + + + .debug_pubnames + 0x23b6 + 0x23b6 + 0x20 + + + + .debug_pubnames + 0x23d6 + 0x23d6 + 0x1f + + + + .debug_pubnames + 0x23f5 + 0x23f5 + 0x1e + + + + .debug_pubnames + 0x2413 + 0x2413 + 0x1f + + + + .debug_pubnames + 0x2432 + 0x2432 + 0x17d + + + + .debug_pubnames + 0x25af + 0x25af + 0x24 + + + + .debug_pubnames + 0x25d3 + 0x25d3 + 0x28 + + + + .debug_pubnames + 0x25fb + 0x25fb + 0x27 + + + + .debug_pubnames + 0x2622 + 0x2622 + 0x2d + + + + .debug_pubnames + 0x264f + 0x264f + 0x2e + + + + .debug_pubnames + 0x267d + 0x267d + 0x2c + + + + .debug_pubnames + 0x26a9 + 0x26a9 + 0x29 + + + + .debug_pubnames + 0x26d2 + 0x26d2 + 0x2a + + + + .debug_pubnames + 0x26fc + 0x26fc + 0x2e + + + + .debug_pubnames + 0x272a + 0x272a + 0x1f + + + + .debug_pubnames + 0x2749 + 0x2749 + 0x2b + + + + .debug_pubnames + 0x2774 + 0x2774 + 0x29 + + + + .debug_pubnames + 0x279d + 0x279d + 0x1f + + + + .debug_pubnames + 0x27bc + 0x27bc + 0x59 + + + + .debug_pubnames + 0x2815 + 0x2815 + 0x25 + + + + .debug_pubnames + 0x283a + 0x283a + 0x24 + + + + .debug_pubnames + 0x285e + 0x285e + 0x1f + + + + .debug_pubnames + 0x287d + 0x287d + 0x27 + + + + .debug_pubnames + 0x28a4 + 0x28a4 + 0x29 + + + + .debug_pubnames + 0x28cd + 0x28cd + 0x29 + + + + .debug_pubnames + 0x28f6 + 0x28f6 + 0x20 + + + + .debug_pubnames + 0x2916 + 0x2916 + 0x1f + + + + .debug_pubnames + 0x2935 + 0x2935 + 0x28 + + + + .debug_pubnames + 0x295d + 0x295d + 0x2a + + + + .debug_pubnames + 0x2987 + 0x2987 + 0x2a + + + + .debug_pubnames + 0x29b1 + 0x29b1 + 0x25 + + + + .debug_pubnames + 0x29d6 + 0x29d6 + 0x29 + + + + .debug_pubnames + 0x29ff + 0x29ff + 0x2d + + + + .debug_pubnames + 0x2a2c + 0x2a2c + 0x22 + + + + .debug_pubnames + 0x2a4e + 0x2a4e + 0x4c + + + + .debug_pubnames + 0x2a9a + 0x2a9a + 0x21 + + + + .debug_pubnames + 0x2abb + 0x2abb + 0x1d + + + + .debug_pubnames + 0x2ad8 + 0x2ad8 + 0x26 + + + + .debug_pubnames + 0x2afe + 0x2afe + 0x22 + + + + .debug_pubnames + 0x2b20 + 0x2b20 + 0x25 + + + + .debug_pubnames + 0x2b45 + 0x2b45 + 0x1f + + + + .debug_pubnames + 0x2b64 + 0x2b64 + 0x1d + + + + .debug_pubnames + 0x2b81 + 0x2b81 + 0x1f + + + + .debug_pubnames + 0x2ba0 + 0x2ba0 + 0x21 + + + + .debug_pubnames + 0x2bc1 + 0x2bc1 + 0x2e + + + + .debug_pubnames + 0x2bef + 0x2bef + 0x1e + + + + .debug_pubnames + 0x2c0d + 0x2c0d + 0x37 + + + + .debug_pubnames + 0x2c44 + 0x2c44 + 0x36 + + + + .debug_pubnames + 0x2c7a + 0x2c7a + 0x36 + + + + .debug_pubnames + 0x2cb0 + 0x2cb0 + 0x30 + + + + .debug_pubnames + 0x2ce0 + 0x2ce0 + 0x27 + + + + .debug_pubnames + 0x2d07 + 0x2d07 + 0x30 + + + + .debug_pubnames + 0x2d37 + 0x2d37 + 0x2d + + + + .debug_pubnames + 0x2d64 + 0x2d64 + 0x2e + + + + .debug_pubnames + 0x2d92 + 0x2d92 0x23 - + .debug_pubnames - 0x2e3f - 0x2e3f - 0x22 + 0x2db5 + 0x2db5 + 0x23 - + .debug_pubnames - 0x2e61 - 0x2e61 + 0x2dd8 + 0x2dd8 0x23 - + .debug_pubnames - 0x2e84 - 0x2e84 - 0x22 + 0x2dfb + 0x2dfb + 0x26 + + .debug_pubnames + 0x2e21 + 0x2e21 + 0x23 + + + + .debug_pubnames + 0x2e44 + 0x2e44 + 0x22 + + + + .debug_pubnames + 0x2e66 + 0x2e66 + 0x23 + + + + .debug_pubnames + 0x2e89 + 0x2e89 + 0x22 + + .debug_pubnames - 0x2ea6 - 0x2ea6 + 0x2eab + 0x2eab 0x1d - - - - .debug_pubnames - 0x2ec3 - 0x2ec3 - 0x23 - - - - .debug_pubnames - 0x2ee6 - 0x2ee6 - 0x37 - - - - .debug_pubnames - 0x2f1d - 0x2f1d - 0x2e - - - - .debug_pubnames - 0x2f4b - 0x2f4b - 0x2b - + .debug_pubnames - 0x2f76 - 0x2f76 - 0x2b + 0x2ec8 + 0x2ec8 + 0x23 + + .debug_pubnames + 0x2eeb + 0x2eeb + 0x37 + + + + .debug_pubnames + 0x2f22 + 0x2f22 + 0x2e + + + + .debug_pubnames + 0x2f50 + 0x2f50 + 0x2b + + + + .debug_pubnames + 0x2f7b + 0x2f7b + 0x2b + + .debug_pubnames - 0x2fa1 - 0x2fa1 + 0x2fa6 + 0x2fa6 0x22 - + - + .debug_pubnames - 0x2fc3 - 0x2fc3 + 0x2fc8 + 0x2fc8 0x39 - + - + .debug_pubnames - 0x2ffc - 0x2ffc + 0x3001 + 0x3001 0x1d - + - + .debug_pubnames - 0x3019 - 0x3019 + 0x301e + 0x301e 0x27 - + - + .debug_pubnames - 0x3040 - 0x3040 + 0x3045 + 0x3045 0x27 - + - + .debug_pubnames - 0x3067 - 0x3067 + 0x306c + 0x306c 0x1b - + - + .debug_pubnames - 0x3082 - 0x3082 + 0x3087 + 0x3087 0x1c - + - + .debug_pubnames - 0x309e - 0x309e + 0x30a3 + 0x30a3 0x24 - + - + .debug_pubnames - 0x30c2 - 0x30c2 + 0x30c7 + 0x30c7 0x1d - + - + .debug_pubnames - 0x30df - 0x30df + 0x30e4 + 0x30e4 0x1e - + .debug_pubnames - 0x30fd - 0x30fd + 0x3102 + 0x3102 0x1e - + .debug_pubnames - 0x311b - 0x311b + 0x3120 + 0x3120 0x26 - - - - .debug_pubnames - 0x3141 - 0x3141 - 0x35 - - - - .debug_pubnames - 0x3176 - 0x3176 - 0x27 - - - - .debug_pubnames - 0x319d - 0x319d - 0x1c - + .debug_pubnames - 0x31b9 - 0x31b9 + 0x3146 + 0x3146 + 0x35 + + + + .debug_pubnames + 0x317b + 0x317b + 0x27 + + + + .debug_pubnames + 0x31a2 + 0x31a2 + 0x1c + + + + .debug_pubnames + 0x31be + 0x31be 0x28 - + - + .debug_pubnames - 0x31e1 - 0x31e1 + 0x31e6 + 0x31e6 0x1b - + - + .debug_pubtypes 0x0 0x0 - 0x20b - - - - .debug_pubtypes - 0x20b - 0x20b - 0x16d - - - - .debug_pubtypes - 0x378 - 0x378 0x70 - + .debug_pubtypes - 0x3e8 - 0x3e8 + 0x70 + 0x70 0x1f - + .debug_pubtypes - 0x407 - 0x407 + 0x8f + 0x8f 0x25c - + .debug_pubtypes - 0x663 - 0x663 + 0x2eb + 0x2eb 0x38 - + .debug_pubtypes - 0x69b - 0x69b + 0x323 + 0x323 0x2d - + .debug_pubtypes - 0x6c8 - 0x6c8 - 0x58 + 0x350 + 0x350 + 0x20b - + .debug_pubtypes - 0x720 - 0x720 - 0x2c + 0x55b + 0x55b + 0x58 .debug_pubtypes - 0x74c - 0x74c + 0x5b3 + 0x5b3 0xed - + .debug_pubtypes - 0x839 - 0x839 + 0x6a0 + 0x6a0 0x330 .debug_pubtypes - 0xb69 - 0xb69 + 0x9d0 + 0x9d0 0xaa - + .debug_pubtypes - 0xc13 - 0xc13 + 0xa7a + 0xa7a 0x1f - + + .debug_pubtypes + 0xa99 + 0xa99 + 0x16d + + + + .debug_pubtypes + 0xc06 + 0xc06 + 0x2c + + + .debug_pubtypes 0xc32 0xc32 + 0x2d + + + + .debug_pubtypes + 0xc5f + 0xc5f 0x6f8 - + - + .debug_pubtypes - 0x132a - 0x132a + 0x1357 + 0x1357 0xc1 - + - + .debug_pubtypes - 0x13eb - 0x13eb + 0x1418 + 0x1418 0x8c - + - + .debug_pubtypes - 0x1477 - 0x1477 + 0x14a4 + 0x14a4 0xe0 - + .debug_pubtypes - 0x1557 - 0x1557 + 0x1584 + 0x1584 0xff - + - + .debug_pubtypes - 0x1656 - 0x1656 + 0x1683 + 0x1683 0x22 - + - + .debug_pubtypes - 0x1678 - 0x1678 + 0x16a5 + 0x16a5 0x1d - + - + .debug_pubtypes - 0x1695 - 0x1695 + 0x16c2 + 0x16c2 0x8c - + - + .debug_pubtypes - 0x1721 - 0x1721 + 0x174e + 0x174e 0xc1 - + .debug_pubtypes - 0x17e2 - 0x17e2 + 0x180f + 0x180f 0x48 - + .debug_pubtypes - 0x182a - 0x182a + 0x1857 + 0x1857 0x48 - + .debug_pubtypes - 0x1872 - 0x1872 + 0x189f + 0x189f 0x1d - + .debug_pubtypes - 0x188f - 0x188f + 0x18bc + 0x18bc 0x5d - + - + .debug_pubtypes - 0x18ec - 0x18ec + 0x1919 + 0x1919 0x48 - + .debug_pubtypes - 0x1934 - 0x1934 + 0x1961 + 0x1961 0x35 - + .debug_pubtypes - 0x1969 - 0x1969 + 0x1996 + 0x1996 0x1f - + - + .debug_pubtypes - 0x1988 - 0x1988 + 0x19b5 + 0x19b5 0x26 - + - + .debug_pubtypes - 0x19ae - 0x19ae + 0x19db + 0x19db 0x1d - + - + .debug_pubtypes - 0x19cb - 0x19cb + 0x19f8 + 0x19f8 0x32 - - - - .debug_pubtypes - 0x19fd - 0x19fd - 0x30 - - - - .debug_pubtypes - 0x1a2d - 0x1a2d - 0x2c - - - - .debug_pubtypes - 0x1a59 - 0x1a59 - 0x50 - - - - .debug_pubtypes - 0x1aa9 - 0x1aa9 - 0x1f + + .debug_pubtypes + 0x1a2a + 0x1a2a + 0x30 + + + + .debug_pubtypes + 0x1a5a + 0x1a5a + 0x2c + + + + .debug_pubtypes + 0x1a86 + 0x1a86 + 0x50 + + + + .debug_pubtypes + 0x1ad6 + 0x1ad6 + 0x1f + + @@ -14485,220 +14698,223 @@ - + .text.1 - 0x1fffc8dc - 0x1fffc8dc + 0x1fffc934 + 0x1fffc934 0x4 - + - + .text.2 - 0x1fffd738 - 0x1fffd738 - 0x8c6 + 0x1fffd790 + 0x1fffd790 + 0x86e - - - - + + + - + .text.3 0x1ffff000 0x1ffff000 0xffe - - - - - - + + + + + + + + + - + .text.4 0x20000808 0x20000808 0x3f8 - - - + + + + - + .text.5 0x20000d40 0x20000d40 - 0x3f5e + 0x3954 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + - - - + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + - + - - - - - - + + + + + + + - - - - - - + + + + + + + + + + + - + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - + - + - - - - + + + + - - - - - - - + + + + + + - + .text - - - - - + + + + + @@ -14710,14 +14926,14 @@ .cinit - 0x20004ca0 - 0x20004ca0 - 0x368 + 0x20004698 + 0x20004698 + 0x370 - - - - + + + + @@ -14740,16 +14956,16 @@ 0x1000 - + .stack - 0x1fffd538 + 0x1fffd590 0x200 - + @@ -14775,228 +14991,221 @@ .data - 0x1fffc8e0 + 0x1fffc938 0x86e - + + + + + + + + - - - - - - - - + + + + - - - - - - + + + - - - - + + + .bss - 0x1fffd150 - 0x3e6 + 0x1fffd1a8 + 0x3e7 - - - - - - - + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - + - - - - - - - - - - - - - - - - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + + + + - - + + + + + - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + + + + + .const 0x1fffc000 0x1fffc000 - 0x8da + 0x934 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15041,38 +15250,1460 @@ - + .TI.noinit 0x0 0x0 - + .TI.persistent 0x0 0x0 - + __llvm_prf_cnts 0x1fffc000 0x0 - + .debug_info 0x0 0x0 - 0x235e6 + 0x242a5 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .debug_line + 0x0 + 0x0 + 0x892d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .debug_frame + 0x0 + 0x0 + 0x2540 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .debug_abbrev + 0x0 + 0x0 + 0x73d5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .debug_str + 0x0 + 0x0 + 0x6678 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .debug_aranges + 0x0 + 0x0 + 0x1548 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + .debug_pubnames + 0x0 + 0x0 + 0x3201 + + + + + + + + + @@ -15108,11 +16739,11 @@ - - - + + + @@ -15120,1698 +16751,306 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .debug_line - 0x0 - 0x0 - 0x8cfe - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .debug_frame - 0x0 - 0x0 - 0x24d0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .debug_abbrev - 0x0 - 0x0 - 0x6fe2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .debug_str - 0x0 - 0x0 - 0x6575 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .debug_aranges - 0x0 - 0x0 - 0x14e8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .debug_pubnames - 0x0 - 0x0 - 0x31fc - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - - - - - + + + + + - + .debug_pubtypes 0x0 0x0 - 0x1ac8 + 0x1af5 - - - - - - - - - + + + + + + + - + - - - - - + + + + + + + + - - - - + + + + - + - - - - - - - + + + + + + + - + Veneer$$CMSE 0x0 0x0 - + SEGMENT_0 0x1fffc000 0x1fffc000 - 0x8e0 + 0x938 0x5 - + - + SEGMENT_1 - 0x1fffc8e0 + 0x1fffc938 0xe58 0x6 @@ -16820,17 +17059,17 @@ - + SEGMENT_2 - 0x1fffd738 - 0x1fffd738 - 0x8c6 + 0x1fffd790 + 0x1fffd790 + 0x86e 0x5 - + - + SEGMENT_3 0x1fffe000 0x1000 @@ -16839,27 +17078,27 @@ - + SEGMENT_4 0x1ffff000 0x1ffff000 0xffe 0x5 - + - + SEGMENT_5 0x20000800 0x20000800 - 0x4808 + 0x4208 0x5 - + - + @@ -17024,56 +17263,52 @@ 0x0 0x1fffc000 0x1fff - 0x1ff8 - 0x7 + 0x1ffb + 0x4 RWIX 0x1fffc000 0x0 - + 0x1fffc000 - 0x8da + 0x934 - - 0x1fffc8da - 0x2 - - 0x1fffc8dc + 0x1fffc934 0x4 - + - 0x1fffc8e0 + 0x1fffc938 0x86e - 0x1fffd14e + 0x1fffd1a6 0x2 - 0x1fffd150 - 0x3e6 + 0x1fffd1a8 + 0x3e7 - 0x1fffd536 - 0x2 + 0x1fffd58f + 0x1 - 0x1fffd538 + 0x1fffd590 0x200 - 0x1fffd738 - 0x8c6 - + 0x1fffd790 + 0x86e + 0x1fffdffe @@ -17098,7 +17333,7 @@ 0x1ffff000 0xffe - + 0x1ffffffe @@ -17142,14 +17377,14 @@ 0x0 0x20000808 0xb7f7 - 0x47fe - 0x6ff9 + 0x41fc + 0x75fb RWIX 0x20000808 0x3f8 - + 0x20000c00 @@ -17158,21 +17393,21 @@ 0x20000d40 - 0x3f5e - + 0x3954 + - 0x20004c9e - 0x2 + 0x20004694 + 0x4 - 0x20004ca0 - 0x368 + 0x20004698 + 0x370 - 0x20005008 - 0x6ff7 + 0x20004a08 + 0x75f7 @@ -17314,18 +17549,18 @@ __TI_cinit_table .data - 0x20004ca0 - 0x340 - 0x1fffc8e0 + 0x20004698 + 0x347 + 0x1fffc938 0x86e lzss .bss - 0x20004ff0 + 0x200049f0 0x8 - 0x1fffd150 - 0x3e6 + 0x1fffd1a8 + 0x3e7 zero_init @@ -17356,19 +17591,19 @@ __TI_CINIT_Base - 0x20004ff8 + 0x200049f8 __TI_CINIT_Limit - 0x20005008 + 0x20004a08 __TI_Handler_Table_Base - 0x20004fe0 + 0x200049e0 __TI_Handler_Table_Limit - 0x20004fec + 0x200049ec binit @@ -17384,7 +17619,7 @@ __STACK_END - 0x1fffd738 + 0x1fffd790 __SYSMEM_SIZE @@ -17406,1824 +17641,1820 @@ __TI_prof_data_size 0xffffffff - + + APPL_AckErrorInd + 0x1ffffef7 + + + + APPL_StopMailboxHandler + 0x2000467d + + + + APPL_StartMailboxHandler + 0x1fffc935 + + + LocalAxes - 0x1fffd150 + 0x1fffd1a8 - + aName0x6085 - 0x1fffc5fe - + 0x1fffc5e1 + - + aName0xF030 - 0x1fffc524 - - - - sEntryDesc0x6502 - 0x1fffc8d4 - - - - aName0x1C13 - 0x1fffc7c4 - - - - aName0x1C12 - 0x1fffc7b7 + 0x1fffc58e - - asEntryDesc0x60C2 - 0x1fffc6ec - - - - sEntryDesc0x6064 - 0x1fffc8b0 - - - - sEntryDesc0x6061 - 0x1fffc8aa - - - - sEntryDesc0x6060 - 0x1fffc8a4 - - - - sEntryDesc0x606C - 0x1fffc8b6 - - - - sEntryDesc0x6077 - 0x1fffc8bc - - - - sEntryDesc0x607A - 0x1fffc8c2 - - - - APPL_GetDeviceID - 0x1fffc8dd - - - - sDetectedModuleIdentList - 0x1fffd0fc - - - - sEntryDesc0x6041 - 0x1fffc886 - - - - sEntryDesc0x6040 - 0x1fffc880 - - - - CiA402_LocalError - 0x20004951 - - - - sEntryDesc0x605E - 0x1fffc89e - - - - sEntryDesc0x605A - 0x1fffc88c - - - - sEntryDesc0x605C - 0x1fffc898 - - - - sEntryDesc0x605B - 0x1fffc892 - - - - DefCiA402ObjectValues - 0x1fffcfc0 - - - - APPL_StartInputHandler - 0x20002eef - - - - asEntryDesc0xF050 - 0x1fffc734 - - - - sEntryDesc0x603F - 0x1fffc87a - - - - aName0x1602 - 0x1fffc802 - - - - aName0x1601 - 0x1fffc7f6 - - - - aName0x1600 - 0x1fffc768 - - - - asEntryDesc0xF030 - 0x1fffc722 - - - - ApplicationObjDic - 0x1fffcea8 - - - - asEntryDesc0xF000 - 0x1fffc6fe - - - - CiA402_Application - 0x200021b7 - - - - asEntryDesc0xF010 - 0x1fffc710 - - - - sEntryDesc0x60FF - 0x1fffc8ce - - - - CiA402_StateMachine - 0x200013a3 - - - - asEntryDesc0x1A01 - 0x1fffc58c - - - - asEntryDesc0x1A00 - 0x1fffc4a4 - - - - asEntryDesc0x1A02 - 0x1fffc5a4 - - - - DefCiA402AxisObjDic - 0x1fffc8e0 - - - - APPL_AckErrorInd - 0x1ffffffd - - - - sEntryDesc0x6085 - 0x1fffc8c8 - - - - APPL_StartOutputHandler - 0x20004c7f - - - - APPL_StopOutputHandler - 0x20004c8b - - - - aName0x1A02 - 0x1fffc81a - - - - aName0x1A01 - 0x1fffc80e - - - - aName0x1A00 - 0x1fffc778 - - - - main - 0x200044a5 - - - - aName0x60FF - 0x1fffc798 - - - - CiA402_TransitionAction - 0x20004bb1 - - - - APPL_Application - 0x20000be1 - - - - APPL_GenerateMapping - 0x20000d41 - - - - aName0x6502 - 0x1fffc614 - - - - APPL_StopInputHandler - 0x20004c83 - - - - sConfiguredModuleIdentList - 0x1fffd0f0 - - - - aName0x60C2 - 0x1fffc340 - - - - CiA402_DummyMotionControl - 0x200022b3 - - - - APPL_OutputMapping - 0x20003739 - - - - aName0x6041 - 0x1fffc826 - - - - aName0x6040 - 0x1fffc7d1 - - - - asEntryDesc0x607D - 0x1fffc6da - - - - aName0x605E - 0x1fffc654 - - - - aName0x605C - 0x1fffc4e8 - - - - aName0x605B - 0x1fffc62a - - - - aName0x605A - 0x1fffc5bc - - - - aName0x6064 - 0x1fffc5d2 - - - - aName0x6061 - 0x1fffc541 - - - - aName0x6060 - 0x1fffc6a3 - - - - sModulardeviceprofile - 0x1fffd0b2 - - - - CiA402_Init - 0x1ffffcc9 - - - - aName0x606C - 0x1fffc5e8 - - - - aName0x6077 - 0x1fffc668 - - - - APPL_InputMapping - 0x200037cf - - - - aName0x607D - 0x1fffc3c8 - - - - aName0x607A - 0x1fffc788 - - - - Write0xF030 - 0x20001ae7 - - - - sTxPDOassign - 0x1fffd148 - - - - aName0xF050 - 0x1fffc63f - - - - sModuleProfileInfo - 0x1fffd114 - - - - aName0x603F - 0x1fffc84a - - - - sRxPDOassign - 0x1fffd13c - - - - aName0xF000 - 0x1fffc386 - - - - asEntryDesc0x1601 - 0x1fffc55c - - - - asEntryDesc0x1600 - 0x1fffc480 - - - - asEntryDesc0x1602 - 0x1fffc574 - - - - CiA402_DeallocateAxis - 0x20004091 - - - - asPDOAssignEntryDesc - 0x1fffc83e - - - - APPL_StopMailboxHandler - 0x20004c87 - - - - aName0xF010 - 0x1fffc67c - - - - APPL_StartMailboxHandler - 0x1fffdffb - - - - u32LastDc32Value - 0x1fffd4c0 - - - u32CheckForDcOverrunCnt - 0x1fffd4b8 - - - acSoftwareversion - 0x1fffd09d - - - - aName0x1C00 - 0x1fffc6b6 - - - - sEntryDesc0x1009 - 0x1fffc868 - - - - sEntryDesc0x1008 - 0x1fffc862 - - - - sEntryDesc0x1001 - 0x1fffc85c - - - - sEntryDesc0x1000 - 0x1fffc856 - - - - sEntryDesc0x100A - 0x1fffc86e - - - - GenObjDic - 0x1fffccc8 - - - - COE_RemoveDicEntry - 0x20004569 - - - - aName0x1C33 - 0x1fffc100 - - - - aName0x1C32 - 0x1fffc000 - - - - sEntryDesc0x10F8 - 0x1fffc874 - - - - COE_AddObjectToDic - 0x20003ead - - - - u64Timestamp - 0x1fffd0b8 - - - - aName0x10F8 - 0x1fffc690 - - - - aName0x10F1 - 0x1fffc408 - - - - sSyncmanagertype - 0x1fffd142 - - - - COE_GetObjectDictionary - 0x20004ba5 - - - - COE_ObjDictionaryInit - 0x200047e9 - - - - aName0x1009 - 0x1fffc746 - - - - aName0x1008 - 0x1fffc7ea - - - - aName0x1001 - 0x1fffc7a8 - - - - aName0x1000 - 0x1fffc7de - - - - aName0x100A - 0x1fffc757 - - - - aName0x1018 - 0x1fffc447 - - - - COE_ClearObjDictionary - 0x200049e1 - - - - Read0x10F8 - 0x200042ad - - - - u32Devicetype - 0x1fffd0c0 - - - - acDevicename - 0x1fffd070 - - - - asEntryDesc0x1018 - 0x1fffc506 - - - - ObjDicList - 0x1fffd0c8 - - - - asEntryDesc0x10F1 - 0x1fffc6c8 - - - - COE_ObjInit - 0x200025a7 - - - - acHardwareversion - 0x1fffd089 - - - - asEntryDesc0x1C3x - 0x1fffc200 - - - - COE_SyncTimeStamp - 0x20003d5f - - - - asEntryDesc0x1C00 - 0x1fffc832 + + sEntryDesc0x6502 + 0x1fffc928 + + + + aName0x1C13 + 0x1fffc818 - - sIdentity - 0x1fffd0cc - - - - AddObjectsToObjDictionary - 0x2000492d - - - - COE_UpdateSyncErrorStatus - 0x200043d5 - - - - u16ErrorRegister - 0x1fffd0c4 - - - - COE_Main - 0x200032a1 - - - - bEtherCATRunLed - 0x1fffd519 - - - bEtherCATErrorLed - 0x1fffd518 - - - bRunApplication - 0x1fffd521 - - - pAPPL_MainLoop - 0x1fffd488 - - - u32CycleTimeStartValue - 0x1fffd4bc - - - u32MinCycleTimeStartValue - 0x1fffd4c4 - - - u32SystemTimeReadFailure - 0x1fffd4d0 - - - bMinCycleTimeMeasurementStarted - 0x1fffd51e - - - u32MinCycleTimeValue - 0x1fffd4c8 - - - aPdOutputData - 0x1fffd334 - - - aPdInputData - 0x1fffd2f0 - - - ECAT_Application - 0x2000452b - - - - MainLoop - 0x20002d35 - - - - Sync1_Isr - 0x2000441b - - - - PDI_Isr - 0x20000aa1 - - - - Sync0_Isr - 0x20001d91 - - - - MainInit - 0x20003afd - - - - ECAT_SetLedIndication - 0x20001771 - - - - HandleCycleTimeMeasurement - 0x2000425d - - - - PDO_InputMapping - 0x20003971 - - - - bInitFinished - 0x1fffd120 - - - - ECAT_CheckTimer - 0x2000385d - - - - GetSystemTimeDelay - 0x200046f9 - - - - PDO_OutputMapping - 0x20003559 - - - - pCoeSendStored - 0x1fffd48c - - - COE_Init - 0x20004b15 - - - - COE_ServiceInd - 0x20004869 - - - - COE_ContinueInd - 0x200044e9 - - - - bEcatOutputUpdateRunning - 0x1fffd515 - - - bEcatInputUpdateRunning - 0x1fffd514 - - - bEcatFirstOutputsReceived - 0x1fffd513 - - - bWdTrigger - 0x1fffd529 - - - bDcSyncActive - 0x1fffd512 - - - EsmTimeoutCounter - 0x1fffd4d6 - - - bDcRunning - 0x1fffd511 - - - u16SmSync0Counter - 0x1fffd508 - - - u16SmSync0Value - 0x1fffd50a - - - bSmSyncSequenceValid - 0x1fffd526 - - - i16WaitForPllRunningTimeout - 0x1fffd4e6 - - - i16WaitForPllRunningCnt - 0x1fffd4e4 - - - Sync0WdCounter - 0x1fffd4dc - - - Sync0WdValue - 0x1fffd4de - - - Sync1WdCounter - 0x1fffd4e0 - - - Sync1WdValue - 0x1fffd4e2 - - - LatchInputSync0Value - 0x1fffd4da - - - LatchInputSync0Counter - 0x1fffd4d8 - - - b32BitDc - 0x1fffd50e - - - bEscIntEnabled - 0x1fffd517 - - - b3BufferMode - 0x1fffd50f - - - bLocalErrorFlag - 0x1fffd51b - - - u16LocalErrorCode - 0x1fffd502 - - - bApplEsmPending - 0x1fffd510 - - - bEcatWaitForAlControlRes - 0x1fffd516 - - - nEcatStateTrans - 0x1fffd4e8 - - - u8EcatErrorLed - 0x1fffd52e - - - u8EcatRunLed - 0x1fffd52f - - - nPdInputSize - 0x1fffd4f0 - - - nPdOutputSize - 0x1fffd4f2 - - - nMaxSyncMan - 0x1fffd52b - - - nMaxEscAddress - 0x1fffd4ee - - - nAlStatus - 0x1fffd52a - - - bExplicitDevIdRequested - 0x1fffd51a - - - EcatWdValue - 0x1fffd4d4 - - - nEscAddrOutputData - 0x1fffd4ec - - - nEscAddrInputData - 0x1fffd4ea - - - u16ALEventMask - 0x1fffd4fc - - - u8dummy - 0x1fffd535 - - - SyncManInfo - 0x1fffd478 - - - ResetALEventMask - 0x20004a3b - - - - StartOutputHandler - 0x20003f73 - - - - EnableSyncManChannel - 0x2000478d - - - - StopOutputHandler - 0x20004b2d - - - - DisableSyncManChannel - 0x2000475f - - - - ECAT_Main + + aName0x1C12 + 0x1fffc80b + + + + asEntryDesc0x60C2 + 0x1fffc762 + + + + sEntryDesc0x6064 + 0x1fffc904 + + + + sEntryDesc0x6061 + 0x1fffc8fe + + + + sEntryDesc0x6060 + 0x1fffc8f8 + + + + sEntryDesc0x606C + 0x1fffc90a + + + + sEntryDesc0x6077 + 0x1fffc910 + + + + sEntryDesc0x607A + 0x1fffc916 + + + + sDetectedModuleIdentList + 0x1fffd154 + + + + sEntryDesc0x6041 + 0x1fffc8da + + + + sEntryDesc0x6040 + 0x1fffc8d4 + + + + sEntryDesc0x605E + 0x1fffc8f2 + + + + sEntryDesc0x605A + 0x1fffc8e0 + + + + sEntryDesc0x605C + 0x1fffc8ec + + + + sEntryDesc0x605B + 0x1fffc8e6 + + + + DefCiA402ObjectValues + 0x1fffd018 + + + + APPL_StartInputHandler + 0x20002919 + + + + asEntryDesc0xF050 + 0x1fffc7aa + + + + sEntryDesc0x603F + 0x1fffc8ce + + + + aName0x1602 + 0x1fffc856 + + + + aName0x1601 + 0x1fffc84a + + + + aName0x1600 + 0x1fffc7bc + + + + asEntryDesc0xF030 + 0x1fffc798 + + + + ApplicationObjDic + 0x1fffcf00 + + + + asEntryDesc0xF000 + 0x1fffc774 + + + + CiA402_Application 0x20001eab - - - - CheckSmSettings - 0x2000119b - - - - AL_ControlRes - 0x2000159f - - - - EepromLoaded - 0x1fffd0ee - - - - UpdateEEPROMLoadedState - 0x20004907 - - ECAT_Init - 0x20001c57 - + + asEntryDesc0xF010 + 0x1fffc786 + - - SetALStatus - 0x200035fb - + + sEntryDesc0x60FF + 0x1fffc922 + - - AL_ControlInd - 0x1ffff8ab - + + CiA402_StateMachine + 0x2000114d + - - StopInputHandler - 0x200020b9 - + + asEntryDesc0x1A01 + 0x1fffc62a + - - DC_CheckWatchdog - 0x20002797 - + + asEntryDesc0x1A00 + 0x1fffc4d2 + - - BackToInitTransition - 0x20004b7b - + + asEntryDesc0x1A02 + 0x1fffc642 + - - SetALEventMask - 0x20004a57 - + + DefCiA402AxisObjDic + 0x1fffc938 + - - CheckIfEcatError - 0x20003b7b - + + sEntryDesc0x6085 + 0x1fffc91c + - - SMActivate - 0x1fffd0ed - + + APPL_StartOutputHandler + 0x1ffffff9 + - - GetSyncMan - 0x20004a1f - + + APPL_StopOutputHandler + 0x20004681 + - - StartInputHandler - 0x1fffd739 - + + aName0x1A02 + 0x1fffc86e + - - ESC_readDWord - 0x20004be1 - + + aName0x1A01 + 0x1fffc862 + - - ESC_writeBlockISR - 0x20004b6b + + aName0x1A00 + 0x1fffc7cc + + + + main + 0x20003bef + + + + aName0x60FF + 0x1fffc7ec + + + + CiA402_TransitionAction + 0x200045a7 + + + + APPL_Application + 0x2000436b + + + + APPL_GenerateMapping + 0x1ffffcc5 + + + + aName0x6502 + 0x1fffc69d + + + + APPL_StopInputHandler + 0x20000bfb + + + + sConfiguredModuleIdentList + 0x1fffd148 + + + + aName0x60C2 + 0x1fffc350 + + + + CiA402_DummyMotionControl + 0x20001fa7 + + + + APPL_OutputMapping + 0x20002fe3 + + + + aName0x6041 + 0x1fffc87a + + + + aName0x6040 + 0x1fffc825 + + + + asEntryDesc0x607D + 0x1fffc750 + + + + aName0x605E + 0x1fffc5ab + + + + aName0x605C + 0x1fffc552 + + + + aName0x605B + 0x1fffc6b3 + + + + aName0x605A + 0x1fffc65a + + + + aName0x6064 + 0x1fffc671 + + + + aName0x6061 + 0x1fffc5c6 + + + + aName0x6060 + 0x1fffc718 + + + + sModulardeviceprofile + 0x1fffd10a + + + + CiA402_Init + 0x1ffff7cb + + + + aName0x606C + 0x1fffc687 + + + + aName0x6077 + 0x1fffc6dd + + + + APPL_InputMapping + 0x20003079 - - ESC_readDWordISR - 0x20004c33 - + + aName0x607D + 0x1fffc42e + - - ESC_applicationSync0Handler - 0x20004ac7 - + + aName0x607A + 0x1fffc7dc + - - ESC_getTimer - 0x20004b89 - + + Write0xF030 + 0x200017d5 + - - ESC_applicationLayerHandler - 0x20004aad - + + sTxPDOassign + 0x1fffd1a0 + - - ESC_writeDWordISR - 0x20004c5b - + + aName0xF050 + 0x1fffc6c8 + - - ESC_applicationSync1Handler - 0x20004ae1 - + + sModuleProfileInfo + 0x1fffd16c + - - ESC_writeWord - 0x20004c1d - + + aName0x603F + 0x1fffc89e + - - ESC_writeByte - 0x20004c05 - + + sRxPDOassign + 0x1fffd194 + - - ESC_clearTimer - 0x20004a01 - + + aName0xF000 + 0x1fffc3ec + - - ESC_initHW - 0x20002983 - + + asEntryDesc0x1601 + 0x1fffc5fa + - - ESC_writeWordISR - 0x20004c65 - + + asEntryDesc0x1600 + 0x1fffc4ae + - - ESC_readWordISR - 0x20004c3d - + + asEntryDesc0x1602 + 0x1fffc612 + - - ESC_readBlockISR - 0x20004bc9 - + + CiA402_DeallocateAxis + 0x20003927 + - - ESC_writeBlock - 0x20004bf9 - + + asPDOAssignEntryDesc + 0x1fffc892 + - - ESC_loadedCheckEEPROM - 0x20004891 - + + aName0xF010 + 0x1fffc6f1 + - - ESC_resetESC - 0x20004c6f - - - - ESC_setLed - 0x2000472d - - - - ESC_readBlock - 0x20004bbd - - - - ESC_writeByteISR - 0x20004c51 - - - - ESC_readByteISR - 0x20004c29 - - - - ESC_releaseHW - 0x20001fb7 - - - - ESC_writeDWord - 0x20004c11 - - - - ESC_readWord - 0x20004bed - - - - ESC_timerIncPerMilliSec - 0x20004c47 - - - - ESC_readByte - 0x20004bd5 - - - - F2838XCM_strcpy - 0x20004c8f - - - - bReceiveMbxIsLocked + + u32LastDc32Value 0x1fffd520 - - bSendMbxIsFull - 0x1fffd525 + + u32CheckForDcOverrunCnt + 0x1fffd514 - - bMbxRunning - 0x1fffd51d + + acSoftwareversion + 0x1fffd0f5 + - - bMbxRepeatToggle - 0x1fffd51c + + aName0x1C00 + 0x1fffc72b + - - u16SendMbxSize - 0x1fffd506 + + sEntryDesc0x1009 + 0x1fffc8bc + - - u16ReceiveMbxSize - 0x1fffd504 + + sEntryDesc0x1008 + 0x1fffc8b6 + - - u16EscAddrReceiveMbx - 0x1fffd4fe + + sEntryDesc0x1001 + 0x1fffc8b0 + - - u16EscAddrSendMbx - 0x1fffd500 + + sEntryDesc0x1000 + 0x1fffc8aa + - - u8MbxWriteCounter - 0x1fffd532 + + sEntryDesc0x100A + 0x1fffc8c2 + - - u8MbxReadCounter - 0x1fffd531 + + GenObjDic + 0x1fffcd20 + - - u8MailboxSendReqStored - 0x1fffd530 + + COE_RemoveDicEntry + 0x20003e73 + - - psWriteMbx - 0x1fffd4b4 + + aName0x1C33 + 0x1fffc108 + - - psReadMbx - 0x1fffd4a8 + + aName0x1C32 + 0x1fffc000 + - - psRepeatMbx - 0x1fffd4ac + + sEntryDesc0x10F8 + 0x1fffc8c8 + - - psStoreMbx - 0x1fffd4b0 + + COE_AddObjectToDic + 0x200037a3 + - - sMbxSendQueue - 0x1fffd434 + + u64Timestamp + 0x1fffd110 + - - sMbxReceiveQueue - 0x1fffd400 + + aName0x10F8 + 0x1fffc705 + - - bNoMbxMemoryAvailable - 0x1fffd51f + + aName0x10F1 + 0x1fffc46e + - - MBX_Main - 0x200042fb - + + sSyncmanagertype + 0x1fffd19a + - - MailboxServiceInd - 0x20004b59 - + + COE_GetObjectDictionary + 0x2000459b + - - MBX_CopyToSendMailbox - 0x2000340d - + + COE_ObjDictionaryInit + 0x20004125 + - - MBX_MailboxSendReq - 0x200039f7 - + + aName0x1009 + 0x1fffc516 + - - MBX_StartMailboxHandler - 0x200034b7 - + + aName0x1008 + 0x1fffc83e + - - MBX_Init - 0x20002e17 - + + aName0x1001 + 0x1fffc7fc + - - PutInMbxQueue - 0x20004815 - + + aName0x1000 + 0x1fffc832 + - - MBX_MailboxWriteInd - 0x20004201 - + + aName0x100A + 0x1fffc534 + - - MBX_MailboxRepeatReq - 0x20003f11 - + + aName0x1018 + 0x1fffc3a5 + - - MBX_StopMailboxHandler - 0x2000288d - + + COE_ClearObjDictionary + 0x2000438b + - - MBX_CheckAndCopyMailbox - 0x200023af - + + Read0x10F8 + 0x20003c3f + - - GetOutOfMbxQueue - 0x200048e1 - + + u32Devicetype + 0x1fffd118 + - - MBX_MailboxReadInd - 0x200038eb - + + acDevicename + 0x1fffd0c8 + - - bSyncSetByUser - 0x1fffd528 + + asEntryDesc0x1018 + 0x1fffc570 + - - sCycleDiag - 0x1fffd4fa + + ObjDicList + 0x1fffd120 + - - sSyncManOutPar - 0x1fffd3bc + + asEntryDesc0x10F1 + 0x1fffc73e + - - sSyncManInPar - 0x1fffd378 + + COE_ObjInit + 0x20002cbf + - - CheckSyncTypeValue - 0x20003075 - + + acHardwareversion + 0x1fffd0e1 + - - cBitMask - 0x1fffc4c8 - + + asEntryDesc0x1C3x + 0x1fffc210 + - - OBJ_GetObjDesc - 0x20004c93 - + + COE_SyncTimeStamp + 0x20003505 + - - OBJ_GetObjectList - 0x1fffdf5f - + + asEntryDesc0x1C00 + 0x1fffc886 + - - OBJ_CopyNumberToString - 0x200045df - + + sIdentity + 0x1fffd124 + - - OBJ_GetNoOfObjects - 0x20004033 - + + AddObjectsToObjDictionary + 0x200042b9 + - - OBJ_GetEntryDesc - 0x20004619 - + + COE_UpdateSyncErrorStatus + 0x20003d65 + - - OBJ_Read - 0x1fffdbe5 - + + u16ErrorRegister + 0x1fffd11c + - - OBJ_GetObjectHandle - 0x20004afb - + + COE_Main + 0x1ffffffd + - - aSubindexDesc - 0x1fffd0e0 - + + bEtherCATRunLed + 0x1fffd57b - - OBJ_GetEntryOffset - 0x2000269f - + + bEtherCATErrorLed + 0x1fffd57a - - OBJ_GetObjectLength - 0x2000312f - + + bRunApplication + 0x1fffd581 - - OBJ_GetDesc - 0x20002fb9 - + + pAPPL_FoeRead + 0x1fffd4e4 - - sErrorSettings - 0x1fffd108 - + + pAPPL_FoeReadData + 0x1fffd4e8 - - OBJ_Write - 0x1ffff001 - + + pAPPL_FoeError + 0x1fffd4e0 - - u8PendingSdo - 0x1fffd533 + + pAPPL_FoeWrite + 0x1fffd4ec - - bStoreCompleteAccess - 0x1fffd527 + + pAPPL_FoeWriteData + 0x1fffd4f0 - - u8StoreSubindex - 0x1fffd534 + + pAPPL_CoeReadInd + 0x1fffd4d8 - - u16StoreIndex - 0x1fffd50c + + pAPPL_CoeWriteInd + 0x1fffd4dc - - u32StoreDataSize - 0x1fffd4cc - - - pStoreData - 0x1fffd4a4 - - - pSdoPendFunc - 0x1fffd494 - - - aSdoInfoHeader - 0x1fffd468 - - - pSdoSegData - 0x1fffd49c - - - nSdoInfoFragmentsLeft + + pAPPL_MainLoop 0x1fffd4f4 - - nSdoInfoIndex - 0x1fffd4f6 + + u32CycleTimeStartValue + 0x1fffd518 - - pSdoInfoObjEntry - 0x1fffd490 + + u32MinCycleTimeStartValue + 0x1fffd528 - - pSdoResStored - 0x1fffd498 + + u32SystemTimeReadFailure + 0x1fffd534 - - nSdoSegService + + bMinCycleTimeMeasurementStarted + 0x1fffd57e + + + u32MinCycleTimeValue 0x1fffd52c - - bSdoSegFollows - 0x1fffd523 + + aPdOutputData + 0x1fffd38c - - bSdoSegAccess - 0x1fffd522 + + aPdInputData + 0x1fffd348 - - nSdoSegIndex + + ECAT_Application + 0x20004037 + + + + MainLoop + 0x2000266b + + + + Sync1_Isr + 0x20003b4d + + + + PDI_Isr + 0x200014ff + + + + Sync0_Isr + 0x20001a57 + + + + MainInit + 0x200029e3 + + + + ECAT_SetLedIndication + 0x20000a3b + + + + HandleCycleTimeMeasurement + 0x20003b9f + + + + PDO_InputMapping + 0x20003195 + + + + bInitFinished + 0x1fffd178 + + + + ECAT_CheckTimer + 0x20003107 + + + + GetSystemTimeDelay + 0x20004003 + + + + PDO_OutputMapping + 0x20002e09 + + + + pCoeSendStored 0x1fffd4f8 - - nSdoSegSubindex - 0x1fffd52d + + COE_Init + 0x20004571 + - - nSdoSegBytesToHandle - 0x1fffd480 + + COE_ServiceInd + 0x200041a5 + - - bSdoSegLastToggle + + COE_ContinueInd + 0x20003dab + + + + u32PacketNo + 0x1fffd530 + + + u32FileOffset + 0x1fffd51c + + + u32LastFileOffset 0x1fffd524 - - nSdoSegCompleteSize - 0x1fffd484 + + u16FileAccessState + 0x1fffd562 - - pSdoSegObjEntry - 0x1fffd4a0 + + pFoeSendStored + 0x1fffd4fc - - bSdoInWork - 0x1fffd0b1 - + + u16FoeMaxSendBlockSize + 0x1fffd564 - - SDOS_SdoRes - 0x20002b65 - + + FOE_ServiceInd + 0x1ffffa8f + - + + FOE_ContinueInd + 0x200043e7 + + + + FOE_Init + 0x20004349 + + + + bEcatOutputUpdateRunning + 0x1fffd577 + + + bEcatInputUpdateRunning + 0x1fffd576 + + + bEcatFirstOutputsReceived + 0x1fffd575 + + + bWdTrigger + 0x1fffd585 + + + bDcSyncActive + 0x1fffd574 + + + EsmTimeoutCounter + 0x1fffd53a + + + bDcRunning + 0x1fffd573 + + + u16SmSync0Counter + 0x1fffd56c + + + u16SmSync0Value + 0x1fffd56e + + + bSmSyncSequenceValid + 0x1fffd583 + + + i16WaitForPllRunningTimeout + 0x1fffd54a + + + i16WaitForPllRunningCnt + 0x1fffd548 + + + Sync0WdCounter + 0x1fffd540 + + + Sync0WdValue + 0x1fffd542 + + + Sync1WdCounter + 0x1fffd544 + + + Sync1WdValue + 0x1fffd546 + + + LatchInputSync0Value + 0x1fffd53e + + + LatchInputSync0Counter + 0x1fffd53c + + + b32BitDc + 0x1fffd570 + + + bEscIntEnabled + 0x1fffd579 + + + b3BufferMode + 0x1fffd571 + + + u16LocalErrorCode + 0x1fffd566 + + + u8LocalErrorState + 0x1fffd58a + + + bApplEsmPending + 0x1fffd572 + + + bEcatWaitForAlControlRes + 0x1fffd578 + + + nEcatStateTrans + 0x1fffd54c + + + u8EcatErrorLed + 0x1fffd588 + + + u8EcatRunLed + 0x1fffd589 + + + nPdInputSize + 0x1fffd554 + + + nPdOutputSize + 0x1fffd556 + + + nMaxSyncMan + 0x1fffd587 + + + nMaxEscAddress + 0x1fffd552 + + + nAlStatus + 0x1fffd586 + + + EcatWdValue + 0x1fffd538 + + + nEscAddrOutputData + 0x1fffd550 + + + nEscAddrInputData + 0x1fffd54e + + + u16ALEventMask + 0x1fffd55c + + + u8dummy + 0x1fffd58e + + + SyncManInfo + 0x1fffd4d0 + + + ResetALEventMask + 0x2000443b + + + + StartOutputHandler + 0x2000357b + + + + EnableSyncManChannel + 0x200040c9 + + + + StopOutputHandler + 0x20004515 + + + + DisableSyncManChannel + 0x2000409b + + + + ECAT_Main + 0x20001b87 + + + + CheckSmSettings + 0x20000d41 + + + + AL_ControlRes + 0x20000f49 + + + + EepromLoaded + 0x1fffd146 + + + + UpdateEEPROMLoadedState + 0x20004293 + + + + ECAT_Init + 0x20001927 + + + + SetALStatus + 0x200036cd + + + + AL_ControlInd + 0x1ffff001 + + + + StopInputHandler + 0x20001dad + + + + DC_CheckWatchdog + 0x2000229b + + + + BackToInitTransition + 0x20004563 + + + + SetALEventMask + 0x20004457 + + + + CheckIfEcatError + 0x20003321 + + + + SMActivate + 0x1fffd145 + + + + GetSyncMan + 0x20004403 + + + + StartInputHandler + 0x1fffd791 + + + + ESC_readDWord + 0x200045d7 + + + + ESC_writeBlockISR + 0x20004553 + + + + ESC_readDWordISR + 0x20004629 + + + + ESC_applicationSync0Handler + 0x200044c7 + + + + ESC_getTimer + 0x2000457f + + + + ESC_applicationLayerHandler + 0x200044ad + + + + ESC_writeDWordISR + 0x20004651 + + + + ESC_applicationSync1Handler + 0x200044e1 + + + + ESC_writeWord + 0x20004613 + + + + ESC_writeByte + 0x200045fb + + + + ESC_clearTimer + 0x200043ab + + + + ESC_initHW + 0x20002487 + + + + ESC_writeWordISR + 0x2000465b + + + + ESC_readWordISR + 0x20004633 + + + + ESC_readBlockISR + 0x200045bf + + + + ESC_writeBlock + 0x200045ef + + + + ESC_loadedCheckEEPROM + 0x200041cd + + + + ESC_resetESC + 0x20004665 + + + + ESC_setLed + 0x20004069 + + + + ESC_readBlock + 0x200045b3 + + + + ESC_writeByteISR + 0x20004647 + + + + ESC_readByteISR + 0x2000461f + + + + ESC_releaseHW + 0x20000bff + + + + ESC_writeDWord + 0x20004607 + + + + ESC_readWord + 0x200045e3 + + + + ESC_timerIncPerMilliSec + 0x2000463d + + + + ESC_readByte + 0x200045cb + + + + F2838XCM_strcpy + 0x20004685 + + + + FOE_Write + 0x200043c9 + + + + FOE_Busy + 0x2000466d + + + + FOE_Error + 0x20004541 + + + + FOE_Read + 0x2000421d + + + + FOE_Ack + 0x200041f5 + + + + FOE_Data + 0x20003e35 + + + + bReceiveMbxIsLocked + 0x1fffd580 + + + bSendMbxIsFull + 0x1fffd582 + + + bMbxRunning + 0x1fffd57d + + + bMbxRepeatToggle + 0x1fffd57c + + + u16SendMbxSize + 0x1fffd56a + + + u16ReceiveMbxSize + 0x1fffd568 + + + u16EscAddrReceiveMbx + 0x1fffd55e + + + u16EscAddrSendMbx + 0x1fffd560 + + + u8MbxWriteCounter + 0x1fffd58d + + + u8MbxReadCounter + 0x1fffd58c + + + u8MailboxSendReqStored + 0x1fffd58b + + + psWriteMbx + 0x1fffd510 + + + psReadMbx + 0x1fffd504 + + + psRepeatMbx + 0x1fffd508 + + + psStoreMbx + 0x1fffd50c + + + sMbxSendQueue + 0x1fffd48c + + + sMbxReceiveQueue + 0x1fffd458 + + + bNoMbxMemoryAvailable + 0x1fffd57f + + + MBX_Main + 0x20003c8d + + + + MailboxServiceInd + 0x2000441f + + + + MBX_CopyToSendMailbox + 0x20002579 + + + + MBX_MailboxSendReq + 0x2000321b + + + + MBX_StartMailboxHandler + 0x20002b63 + + + + MBX_Init + 0x20002841 + + + + PutInMbxQueue + 0x20004151 + + + + MBX_MailboxWriteInd + 0x20003a99 + + + + MBX_MailboxRepeatReq + 0x20003807 + + + + MBX_StopMailboxHandler + 0x20002391 + + + + MBX_CheckAndCopyMailbox + 0x200020a3 + + + + GetOutOfMbxQueue + 0x2000426d + + + + MBX_MailboxReadInd + 0x20002d65 + + + + bSyncSetByUser + 0x1fffd584 + + + sCycleDiag + 0x1fffd55a + + + sSyncManOutPar + 0x1fffd414 + + + sSyncManInPar + 0x1fffd3d0 + + + CheckSyncTypeValue + 0x1fffdf45 + + + + cBitMask + 0x1fffc4f6 + + + + OBJ_GetObjDesc + 0x20004689 + + + + OBJ_GetObjectList + 0x20002eab + + + + OBJ_CopyNumberToString + 0x20003ee9 + + + + OBJ_GetNoOfObjects + 0x200038c9 + + + + OBJ_GetEntryDesc + 0x20003f23 + + + + OBJ_Read + 0x1fffdc5b + + + + OBJ_GetObjectHandle + 0x200044fb + + + + aSubindexDesc + 0x1fffd138 + + + + OBJ_GetEntryOffset + 0x20001c9f + + + + OBJ_GetObjectLength + 0x20003af5 + + + + OBJ_GetDesc + 0x20002aa7 + + + + sErrorSettings + 0x1fffd160 + + + + OBJ_Write + 0x1ffff41f + + + + aSdoInfoHeader + 0x1fffd4c0 + + + nSdoInfoIndex + 0x1fffd558 + + + pSdoInfoObjEntry + 0x1fffd500 + + SDOS_SdoInfoInd 0x20000809 - + - + cAbortCode - 0x1fffc2c8 - + 0x1fffc2d8 + - + SDOS_SdoInd - 0x1ffff46f - + 0x20001679 + - + SdoRes - 0x20003357 - + 0x20002c11 + - - SODS_ClearPendingResponse - 0x200031e9 - - - + vectorTableRAM 0x20000c00 - + CM_enableAllPeripherals - 0x20003ce9 - + 0x2000348f + - + CM_init - 0x20004841 + 0x2000417d - + ESCSS_configureEEPROMSize - 0x200045a5 + 0x20003eaf - + ESCSS_configureSync0Connections - 0x200040ed + 0x20003985 - + ESCSS_configureSync1Connections - 0x20004149 + 0x200039e1 - + Interrupt_enable - 0x20003a7d + 0x200032a1 - + Interrupt_registerHandler - 0x200041a5 + 0x20003a3d - + SysCtl_enablePeripheral - 0x20004345 - + 0x20003cd5 + - + SysCtl_resetPeripheral - 0x1fffff8d - + 0x200035ed + - + __aeabi_dsub - 0x20001931 - + 0x20001349 + - + __aeabi_dadd - 0x2000193b - + 0x20001353 + + + + __aeabi_dmul + 0x2000219f + - __aeabi_dmul - 0x200024ab - - - __aeabi_d2iz - 0x2000438d - + 0x20003d1d + - + __aeabi_cfcmpeq - 0x20003fd3 - + 0x20003869 + + + + __aeabi_cfcmple + 0x20003869 + - __aeabi_cfcmple - 0x20003fd3 - - - __aeabi_fmul - 0x20003bf5 - + 0x2000339b + + + + __aeabi_f2d + 0x20003f5d + - __aeabi_f2d - 0x20004653 - + __aeabi_f2iz + 0x20003f95 + - __aeabi_f2iz - 0x2000468b - - - __aeabi_i2d - 0x200047bb - + 0x200040f7 + - + memcpy - 0x2000369d + 0x20002f47 - + __aeabi_memcpy - 0x2000369d + 0x20002f47 - + __aeabi_memcpy8 - 0x2000369d + 0x20002f47 - + __aeabi_memcpy4 - 0x2000369d + 0x20002f47 - + __aeabi_ui2f - 0x200049bd - + 0x20004325 + - + __aeabi_memset - 0x20003c71 + 0x20003417 - + memset - 0x20003c77 + 0x2000341d - + __aeabi_memset8 - 0x20003c71 + 0x20003417 - + __aeabi_memset4 - 0x20003c71 + 0x20003417 - + __aeabi_memclr8 - 0x20003c6f + 0x20003415 - + __aeabi_memclr4 - 0x20003c6f + 0x20003415 - + __aeabi_memclr - 0x20003c6f + 0x20003415 - + __TI_zero_init_nomemset - 0x20004a73 + 0x20004473 - + __TI_decompress_none - 0x20004b97 + 0x2000458d - + __TI_decompress_lzss - 0x20003e45 + 0x2000373b - + _sys_memory 0x1fffe000 - + free - 0x20002c51 - + 0x2000275d + - + memalign - 0x20001fb9 - + 0x1ffffef9 + - + malloc - 0x20004c77 - + 0x20004675 + - + aligned_alloc - 0x20001fb9 - + 0x1ffffef9 + - + strlen - 0x20004b45 - + 0x2000452d + - + strncpy - 0x200046c3 - + 0x20003fcd + - + __stack - 0x1fffd538 + 0x1fffd590 - + _c_int00_noargs - 0x20004999 + 0x20004301 - + __TI_auto_init_nobinit_nopinit - 0x20004461 - + 0x20003df1 + - + _system_pre_init - 0x20004c97 + 0x2000468d - + C$$EXIT - 0x20004c9b - + 0x20004691 + - + abort - 0x20004c9b - + 0x20004691 + - + _nop - 0x20002c4f - + 0x2000275b + - + _lock - 0x1fffd12c - + 0x1fffd184 + - + _unlock - 0x1fffd130 - + 0x1fffd188 + - + __TI_static_base__ - 0x20004ca0 + 0x20004698 - + + DebugP_log + 0x0 + + __mpu_init 0x0 - + _system_post_cinit 0x0 - Link successful + Link errors: red sections failed placement diff --git a/RAM/f2838x_cm_hw.d b/RAM/f2838x_cm_hw.d deleted file mode 100644 index 3f07b49..0000000 --- a/RAM/f2838x_cm_hw.d +++ /dev/null @@ -1,57 +0,0 @@ -# FIXED - -f2838x_cm_hw.obj: ../f2838x_cm_hw.c -f2838x_cm_hw.obj: ../f2838x_cm_hw.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -f2838x_cm_hw.obj: ../esc.h -f2838x_cm_hw.obj: ../ecat_def.h -f2838x_cm_hw.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -f2838x_cm_hw.obj: ../f2838x_cm_system.h - -../f2838x_cm_hw.c: - -../f2838x_cm_hw.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../esc.h: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -../f2838x_cm_system.h: - diff --git a/RAM/f2838x_cm_system.d b/RAM/f2838x_cm_system.d deleted file mode 100644 index e16f4c2..0000000 --- a/RAM/f2838x_cm_system.d +++ /dev/null @@ -1,24 +0,0 @@ -# FIXED - -f2838x_cm_system.obj: ../f2838x_cm_system.c -f2838x_cm_system.obj: ../f2838x_cm_system.h -f2838x_cm_system.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -f2838x_cm_system.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -f2838x_cm_system.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -f2838x_cm_system.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -f2838x_cm_system.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h - -../f2838x_cm_system.c: - -../f2838x_cm_system.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - diff --git a/RAM/mailbox.d b/RAM/mailbox.d deleted file mode 100644 index f58a0b3..0000000 --- a/RAM/mailbox.d +++ /dev/null @@ -1,81 +0,0 @@ -# FIXED - -mailbox.obj: ../mailbox.c -mailbox.obj: ../ecat_def.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -mailbox.obj: ../f2838x_cm_system.h -mailbox.obj: ../ecatslv.h -mailbox.obj: ../esc.h -mailbox.obj: ../f2838x_cm_hw.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -mailbox.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -mailbox.obj: ../esc.h -mailbox.obj: ../mailbox.h -mailbox.obj: ../ecatcoe.h -mailbox.obj: ../mailbox.h -mailbox.obj: ../sdoserv.h -mailbox.obj: ../ecatcoe.h -mailbox.obj: ../mailbox.h - -../mailbox.c: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../f2838x_cm_system.h: - -../ecatslv.h: - -../esc.h: - -../f2838x_cm_hw.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -../esc.h: - -../mailbox.h: - -../ecatcoe.h: - -../mailbox.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - diff --git a/RAM/makefile b/RAM/makefile index 7975068..2f0aec5 100644 --- a/RAM/makefile +++ b/RAM/makefile @@ -10,18 +10,22 @@ GEN_OPTS__FLAG := GEN_CMDS__FLAG := ORDERED_OBJS += \ +"./F2838x CM EtherCAT Slave.obj" \ "./cia402appl.obj" \ "./coeappl.obj" \ "./ecatappl.obj" \ "./ecatcoe.obj" \ +"./ecatfoe.obj" \ "./ecatslv.obj" \ "./ethercat_slave_cm_hal.obj" \ "./f2838x_cm_hw.obj" \ "./f2838x_cm_system.obj" \ +"./foeappl.obj" \ "./mailbox.obj" \ "./objdef.obj" \ "./sdoserv.obj" \ "./startup_cm.obj" \ +"./tiescfoe.obj" \ "./device/cm.obj" \ "../2838x_RAM_lnk_ecat_cm.cmd" \ "C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ccs/Debug/driverlib_cm.lib" \ @@ -156,8 +160,8 @@ f2838x_cm_cia402_solution.out: $(OBJS) $(CMD_SRCS) $(LIB_SRCS) $(GEN_CMDS) # Other Targets clean: -$(RM) $(EXE_OUTPUTS__QUOTED) - -$(RM) "cia402appl.obj" "coeappl.obj" "ecatappl.obj" "ecatcoe.obj" "ecatslv.obj" "ethercat_slave_cm_hal.obj" "f2838x_cm_hw.obj" "f2838x_cm_system.obj" "mailbox.obj" "objdef.obj" "sdoserv.obj" "startup_cm.obj" "device\cm.obj" - -$(RM) "cia402appl.d" "coeappl.d" "ecatappl.d" "ecatcoe.d" "ecatslv.d" "ethercat_slave_cm_hal.d" "f2838x_cm_hw.d" "f2838x_cm_system.d" "mailbox.d" "objdef.d" "sdoserv.d" "startup_cm.d" "device\cm.d" + -$(RM) "F2838x CM EtherCAT Slave.obj" "cia402appl.obj" "coeappl.obj" "ecatappl.obj" "ecatcoe.obj" "ecatfoe.obj" "ecatslv.obj" "ethercat_slave_cm_hal.obj" "f2838x_cm_hw.obj" "f2838x_cm_system.obj" "foeappl.obj" "mailbox.obj" "objdef.obj" "sdoserv.obj" "startup_cm.obj" "tiescfoe.obj" "device\cm.obj" + -$(RM) "F2838x CM EtherCAT Slave.d" "cia402appl.d" "coeappl.d" "ecatappl.d" "ecatcoe.d" "ecatfoe.d" "ecatslv.d" "ethercat_slave_cm_hal.d" "f2838x_cm_hw.d" "f2838x_cm_system.d" "foeappl.d" "mailbox.d" "objdef.d" "sdoserv.d" "startup_cm.d" "tiescfoe.d" "device\cm.d" -@echo 'Finished clean' -@echo ' ' diff --git a/RAM/objdef.d b/RAM/objdef.d deleted file mode 100644 index dc7efcc..0000000 --- a/RAM/objdef.d +++ /dev/null @@ -1,90 +0,0 @@ -# FIXED - -objdef.obj: ../objdef.c -objdef.obj: ../ecat_def.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -objdef.obj: ../f2838x_cm_system.h -objdef.obj: ../ecatslv.h -objdef.obj: ../esc.h -objdef.obj: ../f2838x_cm_hw.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -objdef.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -objdef.obj: ../esc.h -objdef.obj: ../coeappl.h -objdef.obj: ../objdef.h -objdef.obj: ../sdoserv.h -objdef.obj: ../ecatcoe.h -objdef.obj: ../mailbox.h -objdef.obj: ../objdef.h -objdef.obj: ../sdoserv.h -objdef.obj: ../ecatcoe.h -objdef.obj: ../mailbox.h - -../objdef.c: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../f2838x_cm_system.h: - -../ecatslv.h: - -../esc.h: - -../f2838x_cm_hw.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -../esc.h: - -../coeappl.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - diff --git a/RAM/sdoserv.d b/RAM/sdoserv.d deleted file mode 100644 index 1392bd2..0000000 --- a/RAM/sdoserv.d +++ /dev/null @@ -1,75 +0,0 @@ -# FIXED - -sdoserv.obj: ../sdoserv.c -sdoserv.obj: ../ecat_def.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h -sdoserv.obj: ../f2838x_cm_system.h -sdoserv.obj: ../ecatslv.h -sdoserv.obj: ../esc.h -sdoserv.obj: ../f2838x_cm_hw.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -sdoserv.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h -sdoserv.obj: ../esc.h -sdoserv.obj: ../objdef.h -sdoserv.obj: ../sdoserv.h -sdoserv.obj: ../ecatcoe.h -sdoserv.obj: ../mailbox.h - -../sdoserv.c: - -../ecat_def.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdlib.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/string.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/xlocale/_string.h: - -../f2838x_cm_system.h: - -../ecatslv.h: - -../esc.h: - -../f2838x_cm_hw.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - -../esc.h: - -../objdef.h: - -../sdoserv.h: - -../ecatcoe.h: - -../mailbox.h: - diff --git a/RAM/startup_cm.d b/RAM/startup_cm.d deleted file mode 100644 index eb73026..0000000 --- a/RAM/startup_cm.d +++ /dev/null @@ -1,36 +0,0 @@ -# FIXED - -startup_cm.obj: ../startup_cm.c -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h -startup_cm.obj: C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h - -../startup_cm.c: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_ti_config.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/linkage.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/_stdint40.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/cdefs.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_types.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/machine/_stdint.h: - -C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include/sys/_stdint.h: - diff --git a/RAM/subdir_rules.mk b/RAM/subdir_rules.mk index ccb0b73..79eafb8 100644 --- a/RAM/subdir_rules.mk +++ b/RAM/subdir_rules.mk @@ -5,6 +5,13 @@ SHELL = cmd.exe # Each subdirectory must supply rules for building sources it contributes +F2838x\ CM\ EtherCAT\ Slave.obj: ../F2838x\ CM\ EtherCAT\ Slave.c $(GEN_OPTS) | $(GEN_FILES) $(GEN_MISC_FILES) + @echo 'Building file: "$<"' + @echo 'Invoking: Arm Compiler' + "C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/bin/armcl" -mv7M4 --code_state=16 --float_support=none -me -O2 --include_path="C:/workspace_v12/f2838x_cm_cia402_solution" --include_path="C:/ti/c2000/C2000Ware_5_01_00_00/libraries/communications/Ethercat/f2838x/examples/f2838x_cm_cia402_solution" --include_path="C:/workspace_v12/f2838x_cm_cia402_solution/device" --include_path="C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm" --include_path="C:/ti/c2000/C2000Ware_5_01_00_00/device_support/f2838x/common/include" --include_path="C:/ti/c2000/C2000Ware_5_01_00_00/libraries/communications/Ethercat/f2838x/include" --include_path="C:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include" --define=ETHERCAT_STACK --define=RAM --diag_suppress=10063 --diag_warning=225 --diag_wrap=off --display_error_number --verbose_diagnostics --gen_func_subsections=on --embedded_constants=off --preproc_with_compile --preproc_dependency="F2838x CM EtherCAT Slave.d_raw" $(GEN_OPTS__FLAG) "$<" + @echo 'Finished building: "$<"' + @echo ' ' + %.obj: ../%.c $(GEN_OPTS) | $(GEN_FILES) $(GEN_MISC_FILES) @echo 'Building file: "$<"' @echo 'Invoking: Arm Compiler' diff --git a/RAM/subdir_vars.mk b/RAM/subdir_vars.mk index 5e19d13..b4c240b 100644 --- a/RAM/subdir_vars.mk +++ b/RAM/subdir_vars.mk @@ -12,87 +12,111 @@ LIB_SRCS += \ C:/ti/c2000/C2000Ware_5_01_00_00/driverlib/f2838x/driverlib_cm/ccs/Debug/driverlib_cm.lib C_SRCS += \ +../F2838x\ CM\ EtherCAT\ Slave.c \ ../cia402appl.c \ ../coeappl.c \ ../ecatappl.c \ ../ecatcoe.c \ +../ecatfoe.c \ ../ecatslv.c \ ../ethercat_slave_cm_hal.c \ ../f2838x_cm_hw.c \ ../f2838x_cm_system.c \ +../foeappl.c \ ../mailbox.c \ ../objdef.c \ ../sdoserv.c \ -../startup_cm.c +../startup_cm.c \ +../tiescfoe.c C_DEPS += \ +./F2838x\ CM\ EtherCAT\ Slave.d \ ./cia402appl.d \ ./coeappl.d \ ./ecatappl.d \ ./ecatcoe.d \ +./ecatfoe.d \ ./ecatslv.d \ ./ethercat_slave_cm_hal.d \ ./f2838x_cm_hw.d \ ./f2838x_cm_system.d \ +./foeappl.d \ ./mailbox.d \ ./objdef.d \ ./sdoserv.d \ -./startup_cm.d +./startup_cm.d \ +./tiescfoe.d OBJS += \ +./F2838x\ CM\ EtherCAT\ Slave.obj \ ./cia402appl.obj \ ./coeappl.obj \ ./ecatappl.obj \ ./ecatcoe.obj \ +./ecatfoe.obj \ ./ecatslv.obj \ ./ethercat_slave_cm_hal.obj \ ./f2838x_cm_hw.obj \ ./f2838x_cm_system.obj \ +./foeappl.obj \ ./mailbox.obj \ ./objdef.obj \ ./sdoserv.obj \ -./startup_cm.obj +./startup_cm.obj \ +./tiescfoe.obj OBJS__QUOTED += \ +"F2838x CM EtherCAT Slave.obj" \ "cia402appl.obj" \ "coeappl.obj" \ "ecatappl.obj" \ "ecatcoe.obj" \ +"ecatfoe.obj" \ "ecatslv.obj" \ "ethercat_slave_cm_hal.obj" \ "f2838x_cm_hw.obj" \ "f2838x_cm_system.obj" \ +"foeappl.obj" \ "mailbox.obj" \ "objdef.obj" \ "sdoserv.obj" \ -"startup_cm.obj" +"startup_cm.obj" \ +"tiescfoe.obj" C_DEPS__QUOTED += \ +"F2838x CM EtherCAT Slave.d" \ "cia402appl.d" \ "coeappl.d" \ "ecatappl.d" \ "ecatcoe.d" \ +"ecatfoe.d" \ "ecatslv.d" \ "ethercat_slave_cm_hal.d" \ "f2838x_cm_hw.d" \ "f2838x_cm_system.d" \ +"foeappl.d" \ "mailbox.d" \ "objdef.d" \ "sdoserv.d" \ -"startup_cm.d" +"startup_cm.d" \ +"tiescfoe.d" C_SRCS__QUOTED += \ +"../F2838x CM EtherCAT Slave.c" \ "../cia402appl.c" \ "../coeappl.c" \ "../ecatappl.c" \ "../ecatcoe.c" \ +"../ecatfoe.c" \ "../ecatslv.c" \ "../ethercat_slave_cm_hal.c" \ "../f2838x_cm_hw.c" \ "../f2838x_cm_system.c" \ +"../foeappl.c" \ "../mailbox.c" \ "../objdef.c" \ "../sdoserv.c" \ -"../startup_cm.c" +"../startup_cm.c" \ +"../tiescfoe.c" diff --git a/TMS320F28388D.ccxml b/TMS320F28388D.ccxml index b22c3f1..1e20d03 100644 --- a/TMS320F28388D.ccxml +++ b/TMS320F28388D.ccxml @@ -1,81 +1,107 @@ - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + diff --git a/applInterface.h b/applInterface.h index ede88f3..ca65371 100644 --- a/applInterface.h +++ b/applInterface.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -13,8 +14,10 @@ \author EthercatSSC@beckhoff.com \brief Definition of the application interface functions -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 COE4: update default entry name handling in case of 16Bit characters, add CoE Read/write indication functions

Changes to version V5.11:
V5.12 APPL1: add optional application function called from the main loop (after mbx and esm are executed)
V5.12 EEPROM3: implement a store EEPROM timeout handler
@@ -42,9 +45,12 @@ V5.10.1 : Start file change log #include "objdef.h" #include "ecatappl.h" +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 49 to 51 deleted*/ +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 54 to 56 deleted*/ +#include "foeappl.h" #endif /*#ifndef _APPL_INTERFACE_H_*/ @@ -60,18 +66,159 @@ V5.10.1 : Start file change log ------ -----------------------------------------------------------------------------------------*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 76 to 122 deleted*/ + + +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 125 to 152 deleted*/ +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param pName Pointer to the name of the file (the pointer is null if the function is called due to a previous busy state) +\param nameSize Length of the file name (the value is 0 if the function is called due to a previous busy state) +\param password Password for the file read (the value is 0 if the function is called due to a previous busy state) +\param maxBlockSize Maximum size of a data block (copied to pData) +\param pData Destination pointer for the first FoE fragment + -/*ECATCHANGE_START(V5.12) APPL1*/ +\return block size: + < FOE_MAXBUSY-101 (0x7F95) + busy: + FOE_MAXBUSY-100 (0%) (0x7FFA - 0x64) + ... + FOE_MAXBUSY (100%) (0x7FFA) + error: + ECAT_FOE_ERRCODE_NOTDEFINED (0x8000) + ECAT_FOE_ERRCODE_NOTFOUND (0x8001) + ECAT_FOE_ERRCODE_ACCESS (0x8002) + ECAT_FOE_ERRCODE_DISKFULL (0x8003) + ECAT_FOE_ERRCODE_ILLEGAL (0x8004) + ECAT_FOE_ERRCODE_EXISTS (0x8006) + ECAT_FOE_ERRCODE_NOUSER (0x8007) + +\brief The function is called when a file read request was received. The Foe fragments shall always have the length of "maxBlockSize" till the last file fragment. +\brief In case that the file size is a multiple of "maxBlockSize" 0 shall be returned after the last fragment. +\brief The function pointer is reset in MainInit() so it shall be set afterwards +*//////////////////////////////////////////////////////////////////////////////////////// +PROTO UINT16 (*pAPPL_FoeRead)(UINT16 MBXMEM * pName, UINT16 nameSize, UINT32 password, UINT16 maxBlockSize, UINT16 *pData); + + +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param offset File offset which shall be transmitted next +\param maxBlockSize Maximum size of a data block (copied to pData) +\param pData Destination pointer for the next foe fragment + + + +\return block size: + < FOE_MAXBUSY-101 (0x7F95) + busy: + FOE_MAXBUSY-100 (0%) (0x7FFA - 0x64) + ... + FOE_MAXBUSY (100%) (0x7FFA) + error: + ECAT_FOE_ERRCODE_NOTDEFINED (0x8000) + ECAT_FOE_ERRCODE_NOTFOUND (0x8001) + ECAT_FOE_ERRCODE_ACCESS (0x8002) + ECAT_FOE_ERRCODE_DISKFULL (0x8003) + ECAT_FOE_ERRCODE_ILLEGAL (0x8004) + ECAT_FOE_ERRCODE_EXISTS (0x8006) + ECAT_FOE_ERRCODE_NOUSER (0x8007) + +\brief The function is called to transmit FoE read data 2 .. n (the slave received an acknowledge on a previous accepted file read request). The Foe fragments shall always have the length of "maxBlockSize" till the last file fragment. +\brief In case that the file size is a multiple of "maxBlockSize" 0 shall be returned after the last fragment. +\brief The function pointer is reset in MainInit() so it shall be set afterwards +*//////////////////////////////////////////////////////////////////////////////////////// +PROTO UINT16(*pAPPL_FoeReadData)(UINT32 offset, UINT16 maxBlockSize, UINT16 *pData); + + +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param errorCode Error code send by the EtherCAT master + + +\brief The function is called when the master has send an FoE Abort. +\brief The function pointer is reset in MainInit() so it shall be set afterwards +*//////////////////////////////////////////////////////////////////////////////////////// +PROTO void(*pAPPL_FoeError)(UINT32 errorCode); + + + +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param pName Pointer to the name of the file +\param nameSize Length of the file name +\param password Password for the file read + +\return okay, or an error code + 0 (okay) + ECAT_FOE_ERRCODE_NOTDEFINED (0x8000) + ECAT_FOE_ERRCODE_NOTFOUND (0x8001) + ECAT_FOE_ERRCODE_ACCESS (0x8002) + ECAT_FOE_ERRCODE_DISKFULL (0x8003) + ECAT_FOE_ERRCODE_ILLEGAL (0x8004) + ECAT_FOE_ERRCODE_EXISTS (0x8006) + ECAT_FOE_ERRCODE_NOUSER (0x8007) + +\brief This function is called on a received FoE write request. +\brief (no busy response shall be returned by this function. If the slave requires some time to handle the incoming data the function pAPPL_FoeData() shall return a busy) +\brief The function pointer is reset in MainInit() so it shall be set afterwards +*//////////////////////////////////////////////////////////////////////////////////////// +PROTO UINT16 (*pAPPL_FoeWrite)(UINT16 MBXMEM * pName, UINT16 nameSize, UINT32 password); + + +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param pData Received file data +\param Size Length of received file data +\param bDataFollowing TRUE if more FoE Data requests are following + +\return okay, busy or an error code + 0 (okay) + FOE_MAXBUSY-100 (0%) (0x7FFa - 100) + FOE_MAXBUSY (100%) (0x7FFA) + ECAT_FOE_ERRCODE_NOTDEFINED (0x8000) + ECAT_FOE_ERRCODE_ACCESS (0x8002) + ECAT_FOE_ERRCODE_DISKFULL (0x8003) + ECAT_FOE_ERRCODE_ILLEGAL (0x8004) + ECAT_FOE_ERRCODE_NOUSER (0x8007) + +\brief This function is called on a FoE Data request +\brief The function pointer is reset in MainInit() so it shall be set afterwards +*//////////////////////////////////////////////////////////////////////////////////////// +PROTO UINT16(*pAPPL_FoeWriteData)(UINT16 MBXMEM * pData, UINT16 Size, BOOL bDataFollowing); + +/* ECATCHANGE_START(V5.13) COE4*/ +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param Index Index of the object to be read +\param Subindex Subindex of the object entry to be read +\param CompleteAccess Indicates if the object is read with complete access + +\brief The function is called before an object/entry is read +*//////////////////////////////////////////////////////////////////////////////////////// +PROTO void(*pAPPL_CoeReadInd)(UINT16 Index, UINT8 Subindex, BOOL CompleteAccess); + +///////////////////////////////////////////////////////////////////////////////////////// +/** +\param Index Index of the object which was written +\param Subindex Subindex of the object entry which was written +\param CompleteAccess Indicates if the object was written with complete access + +\brief The function is called after an object/entry was successfully written +*//////////////////////////////////////////////////////////////////////////////////////// +PROTO void(*pAPPL_CoeWriteInd)(UINT16 Index, UINT8 Subindex, BOOL CompleteAccess); + +/* ECATCHANGE_END(V5.13) COE4*/ ///////////////////////////////////////////////////////////////////////////////////////// /** \brief This function is called by the SSC from the main loop +\brief The function pointer is reset in MainInit() so it shall be set afterwards *//////////////////////////////////////////////////////////////////////////////////////// PROTO void(*pAPPL_MainLoop)(); -/*ECATCHANGE_END(V5.12) APPL1*/ /*----------------------------------------------------------------------------------------- ------ @@ -114,5 +261,6 @@ PROTO void MainLoop(void); PROTO void ECAT_StateChange(UINT8 alStatus, UINT16 alStatusCode); +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 348 to 361 deleted*/ #undef PROTO diff --git a/cia402appl.c b/cia402appl.c index 335f4d7..effaa02 100644 --- a/cia402appl.c +++ b/cia402appl.c @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -14,8 +15,11 @@ \brief Implementation This file contains all ciA402 specific functions -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 CIA402 2: write profile info to 0xF010.x bit15-0 (was bit16-31 before)
+V5.13 CIA402 3: change define "CIA402_DEVICE" to "CiA402_SAMPLE_APPLICATION"

Changes to version V5.11:
V5.12 COE3: update entry access right handling

Changes to version V5.10:
@@ -45,6 +49,8 @@ V4.30 : create file (state machine; handling state transition options; input fee -----------------------------------------------------------------------------------------*/ #include "ecat_def.h" +/*ECATCHANGE_START(V5.13) CIA402 3*/ +/*ECATCHANGE_END(V5.13) CIA402 3*/ #include "applInterface.h" @@ -55,6 +61,7 @@ V4.30 : create file (state machine; handling state transition options; input fee #include "cia402appl.h" #undef _CiA402_ +//#include /*-------------------------------------------------------------------------------------- ------ @@ -809,23 +816,9 @@ UINT8 Write0xF030( UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM UINT16 i = subindex; UINT16 maxSubindex = sConfiguredModuleIdentList.u16SubIndex0; OBJCONST TSDOINFOENTRYDESC OBJMEM *pEntry; - /* lastSubindex is used for complete access to make loop over the requested entries - to be read, we initialize this variable with the requested subindex that only - one loop will be done for a single access */ - UINT8 lastSubindex = subindex; +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 818 to 823 deleted*/ - if ( bCompleteAccess ) - { - if ( subindex == 0 ) - { - /* we change the subindex 0 */ - maxSubindex = (UINT8) pData[0]; - } - - /* we write until the maximum subindex */ - lastSubindex = (UINT8)maxSubindex; - } - else +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 825 to 838 deleted*/ if (subindex > maxSubindex) { /* the maximum subindex is reached */ @@ -841,9 +834,7 @@ UINT8 Write0xF030( UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM /* check if we have write access (bits 3-5 (PREOP, SAFEOP, OP) of ObjAccess) by comparing with the actual state (bits 1-3 (PREOP, SAFEOP, OP) of AL Status) */ -/*ECATCHANGE_START(V5.12) COE3*/ if (0 == (((UINT8) ((pEntry->ObjAccess & ACCESS_WRITE) >> 2)) & (nAlStatus & STATE_MASK) )) -/*ECATCHANGE_END(V5.12) COE3*/ { /* we don't have write access */ if ( (pEntry->ObjAccess & ACCESS_WRITE) == 0 ) @@ -860,7 +851,7 @@ UINT8 Write0xF030( UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM } /* we use the standard write function */ - for (i = subindex; i <= lastSubindex; i++) +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 871 to 873 deleted*/ { /* we have to copy the entry */ if (i == 0) @@ -882,6 +873,7 @@ UINT8 Write0xF030( UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM UINT32 CurValue = sConfiguredModuleIdentList.aEntries[(i-1)]; UINT16 MBXMEM *pVarPtr = (UINT16 MBXMEM *) &sConfiguredModuleIdentList.aEntries[(i-1)]; +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT || BIG_ENDIAN_FORMAT) lines 895 to 898 deleted*/ pVarPtr[0] = pData[0]; pVarPtr[1] = pData[1]; pData += 2; @@ -926,7 +918,9 @@ UINT8 Write0xF030( UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM for (cnt = 0 ; cnt < sConfiguredModuleIdentList.u16SubIndex0; cnt++) { /*all Modules have the same profile number*/ - sModuleProfileInfo.aEntries[cnt] = DEVICE_PROFILE_TYPE; +/*ECATCHANGE_START(V5.13) CIA402 2*/ + sModuleProfileInfo.aEntries[cnt] = (DEVICE_PROFILE_TYPE >> 16); +/*ECATCHANGE_END(V5.13) CIA402 2*/ switch(sConfiguredModuleIdentList.aEntries[cnt]) { @@ -955,56 +949,6 @@ UINT8 Write0xF030( UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM return 0; } -/*----------------------------------------------------------------------------------------- ------- ------- generic functions ------- ------------------------------------------------------------------------------------------*/ -///////////////////////////////////////////////////////////////////////////////////////// -/** - \brief The function is called when an error state was acknowledged by the master - -*//////////////////////////////////////////////////////////////////////////////////////// - -void APPL_AckErrorInd(UINT16 stateTrans) -{ -} - -///////////////////////////////////////////////////////////////////////////////////////// -/** - \return AL Status Code (see ecatslv.h ALSTATUSCODE_....) - - \brief The function is called in the state transition from INIT to PREOP when - all general settings were checked to start the mailbox handler. This function - informs the application about the state transition, the application can refuse - the state transition when returning an AL Status error code. - The return code NOERROR_INWORK can be used, if the application cannot confirm - the state transition immediately, in that case the application need to be complete - the transition by calling ECAT_StateChange. - -*//////////////////////////////////////////////////////////////////////////////////////// - -UINT16 APPL_StartMailboxHandler(void) -{ - return ALSTATUSCODE_NOERROR; -} - -///////////////////////////////////////////////////////////////////////////////////////// -/** - \return 0, NOERROR_INWORK - - \brief The function is called in the state transition from PREEOP to INIT - to stop the mailbox handler. This functions informs the application - about the state transition, the application cannot refuse - the state transition. - -*//////////////////////////////////////////////////////////////////////////////////////// - -UINT16 APPL_StopMailboxHandler(void) -{ - return ALSTATUSCODE_NOERROR; -} - ///////////////////////////////////////////////////////////////////////////////////////// /** \param pIntMask pointer to the AL Event Mask which will be written to the AL event Mask @@ -1041,7 +985,9 @@ UINT16 APPL_StartInputHandler(UINT16 *pIntMask) for (cnt = 0 ; cnt < sRxPDOassign.u16SubIndex0; cnt++) { /*all Modules have the same profile number*/ - sModuleProfileInfo.aEntries[cnt] = DEVICE_PROFILE_TYPE; +/*ECATCHANGE_START(V5.13) CIA402 2*/ + sModuleProfileInfo.aEntries[cnt] = (DEVICE_PROFILE_TYPE >> 16); +/*ECATCHANGE_END(V5.13) CIA402 2*/ switch((sRxPDOassign.aEntries[cnt] & 0x000F)) //get only identification of the PDO mapping object { @@ -1077,6 +1023,7 @@ UINT16 APPL_StartInputHandler(UINT16 *pIntMask) } } } +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1099 to 1105 deleted*/ return ALSTATUSCODE_NOERROR; } @@ -1156,7 +1103,7 @@ UINT16 APPL_GenerateMapping(UINT16* pInputSize,UINT16* pOutputSize) return ALSTATUSCODE_NOVALIDOUTPUTS; } - /** Update object dictionary according to activated axis + /*Update object dictionary according to activated axis which axes are activated is calculated by object 0x1C12*/ for(PDOAssignEntryCnt = 0; PDOAssignEntryCnt < sRxPDOassign.u16SubIndex0; PDOAssignEntryCnt++) { @@ -1432,16 +1379,9 @@ void APPL_Application(void) } } -///////////////////////////////////////////////////////////////////////////////////////// -/** - \return The Explicit Device ID of the EtherCAT slave +/*ET9300 Project Handler :(#if EXPLICIT_DEVICE_ID) lines 1461 to 1472 deleted*/ - \brief Calculate the Explicit Device ID -*//////////////////////////////////////////////////////////////////////////////////////// -UINT16 APPL_GetDeviceID(void) -{ - return 0x0005; -} +/*ET9300 Project Handler :(#if USE_DEFAULT_MAIN) lines 1474 to 1505 deleted*/ ///////////////////////////////////////////////////////////////////////////////////////// /** @@ -1454,6 +1394,8 @@ int main(void) /* initialize the Hardware and the EtherCAT Slave Controller */ HW_Init(); + DebugP_log((char*)"--\n"); + MainInit(); /*Initialize Axes structures*/ @@ -1464,7 +1406,7 @@ int main(void) bRunApplication = TRUE; do { - MainLoop(); +// MainLoop(); } while (bRunApplication == TRUE); diff --git a/cia402appl.h b/cia402appl.h index e0e4a55..5f7bba8 100644 --- a/cia402appl.h +++ b/cia402appl.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -13,8 +14,10 @@ \author EthercatSSC@beckhoff.com \brief CiA402 specific defines; objects; Axes structure -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 CIA402 1: update names and pdo mapping flags according ETG.6010

Changes to version V5.11:
V5.12 CIA402 1: change define value STATUSWORD_STATE_SWITCHEDONDISABLED
V5.12 CIA402 2: update control word mask for transition 3 (Ready to switch on to Switched on)
@@ -45,9 +48,7 @@ V5.01 : Start file change log - ControlWord Commands Mask (IEC61800_184e) -----------------------------------------------*/ #define CONTROLWORD_COMMAND_SHUTDOWN_MASK 0x0087 /**< \brief Shutdown command mask*/ -/*ECATCHANGE_START(V5.12) CIA402 2*/ #define CONTROLWORD_COMMAND_SWITCHON_MASK 0x008F /**< \brief Switch on command mask*/ -/*ECATCHANGE_END(V5.12) CIA402 2*/ #define CONTROLWORD_COMMAND_SWITCHON_ENABLEOPERATION_MASK 0x008F /**< \brief Switch on & Enable command mask*/ #define CONTROLWORD_COMMAND_DISABLEVOLTAGE_MASK 0x0082 /**< \brief Disable voltage command mask*/ #define CONTROLWORD_COMMAND_QUICKSTOP_MASK 0x0086 /**< \brief Quickstop command mask*/ @@ -87,9 +88,7 @@ V5.01 : Start file change log - StatusWord -----------------------------------------------*/ #define STATUSWORD_STATE_NOTREADYTOSWITCHON 0x0000 /**< \brief Not ready to switch on*/ -/* ECATCHANGE_START(V5.12) CIA402 1*/ #define STATUSWORD_STATE_SWITCHEDONDISABLED 0x0040 /**< \brief Switched on but disabled*/ -/* ECATCHANGE_END(V5.12) CIA402 1*/ #define STATUSWORD_STATE_READYTOSWITCHON 0x0021 /**< \brief Ready to switch on*/ #define STATUSWORD_STATE_SWITCHEDON 0x0023 /**< \brief Switched on*/ #define STATUSWORD_STATE_OPERATIONENABLED 0x0027 /**< \brief Operation enabled*/ @@ -327,6 +326,7 @@ V5.01 : Start file change log #define MAX_AXES 2 /**< \brief Number of supported axes*/ +/*ET9300 Project Handler :(#if FC1100_HW) lines 329 to 331 deleted*/ /*--------------------------------------------- @@ -358,9 +358,7 @@ TOBJ1600; /** \brief 0x1601 (csp RxPDO) data structure*/ typedef struct OBJ_STRUCT_PACKED_START { UINT16 u16SubIndex0; /**< \brief SubIndex 0*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ UINT32 aEntries[3]; /**< \brief Entry buffer*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ } OBJ_STRUCT_PACKED_END TOBJ1601; @@ -368,9 +366,7 @@ TOBJ1601; /** \brief 0x1602 (csv RxPDO) data structure*/ typedef struct OBJ_STRUCT_PACKED_START { UINT16 u16SubIndex0; /**< \brief SubIndex 0*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ UINT32 aEntries[3]; /**< \brief Entry buffer*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ } OBJ_STRUCT_PACKED_END TOBJ1602; @@ -386,9 +382,7 @@ TOBJ1A00; /** \brief 0x1A01 (csp TxPDO) data structure*/ typedef struct OBJ_STRUCT_PACKED_START { UINT16 u16SubIndex0; /**< \brief SubIndex 0*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ UINT32 aEntries[3]; /**< \brief Entry buffer*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ } OBJ_STRUCT_PACKED_END TOBJ1A01; @@ -396,9 +390,7 @@ TOBJ1A01; /** \brief 0x1A02 (csv TxPDO) data structure*/ typedef struct OBJ_STRUCT_PACKED_START { UINT16 u16SubIndex0; /**< \brief SubIndex 0*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ UINT32 aEntries[3]; /**< \brief Entry buffer*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ } OBJ_STRUCT_PACKED_END TOBJ1A02; /** @}*/ @@ -527,9 +519,7 @@ typedef struct STRUCT_PACKED_START { UINT16 ObjStatusWord; /**< \brief Status word (0x6041)*/ INT32 ObjPositionActualValue; /**< \brief Actual position (0x6064)*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ UINT16 Padding16Bit; /**< \brief 16bit padding*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ }STRUCT_PACKED_END TCiA402PDO1A01; @@ -539,9 +529,7 @@ typedef struct STRUCT_PACKED_START { UINT16 ObjStatusWord; /**< \brief Status word (0x6041)*/ INT32 ObjPositionActualValue; /**< \brief Actual position (0x6064)*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ UINT16 Padding16Bit; /**< \brief 16bit padding*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ }STRUCT_PACKED_END TCiA402PDO1A02; @@ -562,9 +550,7 @@ typedef struct STRUCT_PACKED_START { UINT16 ObjControlWord; /**< \brief Control word (0x6040)*/ INT32 ObjTargetPosition; /**< \brief Target position (0x607A)*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ UINT16 Padding16Bit; /**< \brief 16bit padding*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ }STRUCT_PACKED_END TCiA402PDO1601; @@ -574,14 +560,13 @@ typedef struct STRUCT_PACKED_START { UINT16 ObjControlWord; /**< \brief Control word (0x6040)*/ INT32 ObjTargetVelocity; /**< \brief Target velocity (0x60FF)*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ UINT16 Padding16Bit; /**< \brief 16bit padding*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ }STRUCT_PACKED_END TCiA402PDO1602; /** @}*/ +/*ET9300 Project Handler :(#if FC1100_HW) lines 573 to 575 deleted*/ /** * \addtogroup CiA402Objects CiA402 Axis Objects @@ -720,9 +705,7 @@ OBJCONST UCHAR OBJMEM aName0x1600[] = "csp/csv RxPDO\000\377"; OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1601[] = { {DEFTYPE_UNSIGNED8, 0x8, ACCESS_READ }, /* Subindex 000 */ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}, /* SubIndex 001*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ { DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ }, /* SubIndex 002*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}}; /* SubIndex 003*/ @@ -740,9 +723,7 @@ OBJCONST UCHAR OBJMEM aName0x1601[] = "csp RxPDO\000\377"; OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1602[] = { {DEFTYPE_UNSIGNED8, 0x8, ACCESS_READ }, /* Subindex 000 */ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}, /* SubIndex 001*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ { DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ }, /* SubIndex 002*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}}; /* SubIndex 003*/ @@ -781,9 +762,7 @@ OBJCONST UCHAR OBJMEM aName0x1A00[] = "csp/csv TxPDO\000\377"; OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1A01[] = { {DEFTYPE_UNSIGNED8, 0x8, ACCESS_READ }, /* Subindex 000 */ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}, /* SubIndex 001*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ { DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ }, /* SubIndex 002*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}}; /* SubIndex 003 */ @@ -802,9 +781,7 @@ OBJCONST UCHAR OBJMEM aName0x1A01[] = "csp TxPDO\000\377"; OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1A02[] = { {DEFTYPE_UNSIGNED8, 0x8, ACCESS_READ }, /* Subindex 000 */ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}, /* SubIndex 001*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ { DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ }, /* SubIndex 002*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}}; /* SubIndex 003*/ @@ -822,9 +799,10 @@ OBJCONST UCHAR OBJMEM aName0x1A02[] = "csv TxPDO\000\377"; * \addtogroup CiA402Objects CiA402 Axis Objects * @{ */ + /*ECATCHANGE_START(V5.13) CIA402 1*/ /** \brief Object 0x603F (Error Code) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x603F = {DEFTYPE_UNSIGNED16, 0x10, ACCESS_READ}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x603F = {DEFTYPE_UNSIGNED16, 0x10, (ACCESS_READ | OBJACCESS_TXPDOMAPPING) }; /** \brief Object 0x603F (Error Code) object name*/ OBJCONST UCHAR OBJMEM aName0x603F[] = "Error Code"; @@ -845,7 +823,7 @@ OBJCONST UCHAR OBJMEM aName0x6041[] = "Status Word"; OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x605A = {DEFTYPE_INTEGER16, 0x10, ACCESS_READWRITE}; /** \brief Object 0x605A (Quickstop Option Code) object name*/ -OBJCONST UCHAR OBJMEM aName0x605A[] = "Quickstop Option Code"; +OBJCONST UCHAR OBJMEM aName0x605A[] = "Quick stop option code"; /** \brief Object 0x605B (Shutdown Option Code) entry description*/ OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x605B = {DEFTYPE_INTEGER16, 0x10, ACCESS_READWRITE}; @@ -864,7 +842,7 @@ OBJCONST UCHAR OBJMEM aName0x605C[] = "Disable Operation Option Code"; OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x605E = {DEFTYPE_INTEGER16, 0x10, ACCESS_READWRITE}; /** \brief Object 0x605E (Fault Reaction Code) object name*/ -OBJCONST UCHAR OBJMEM aName0x605E[] = "Fault Reaction Code"; +OBJCONST UCHAR OBJMEM aName0x605E[] = "Fault reaction option code"; /** \brief Object 0x6060 (Modes of Operation) entry description*/ OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6060 = {DEFTYPE_INTEGER8, 0x08, (ACCESS_READWRITE|OBJACCESS_RXPDOMAPPING)}; @@ -873,31 +851,31 @@ OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6060 = {DEFTYPE_INTEGER8, 0x08, OBJCONST UCHAR OBJMEM aName0x6060[] = "Modes of Operation"; /** \brief Object 0x6061 (Modes of Operation Display) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6061 = {DEFTYPE_INTEGER8, 0x08, (ACCESS_READ|OBJACCESS_TXPDOMAPPING)}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6061 = {DEFTYPE_INTEGER8, 0x08, (ACCESS_READ | OBJACCESS_TXPDOMAPPING)}; /** \brief Object 0x6061 (Modes of Operation Display) object name*/ OBJCONST UCHAR OBJMEM aName0x6061[] = "Modes of Operation Display"; /** \brief Object 0x6064 (Position Actual Value) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6064 = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READ|OBJACCESS_TXPDOMAPPING)}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6064 = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READ | OBJACCESS_TXPDOMAPPING)}; /** \brief Object 0x6064 (Position Actual Value) object name*/ OBJCONST UCHAR OBJMEM aName0x6064[] = "Position Actual Value"; /** \brief Object 0x606C (Velocity Actual Value) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x606C = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READ|OBJACCESS_TXPDOMAPPING)}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x606C = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READ | OBJACCESS_TXPDOMAPPING)}; /** \brief Object 0x606C (Velocity Actual Value) object name*/ OBJCONST UCHAR OBJMEM aName0x606C[] = "Velocity Actual Value"; /** \brief Object 0x6077 (Torque Actual Value) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6077 = {DEFTYPE_INTEGER16, 0x10, ACCESS_READ}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6077 = {DEFTYPE_INTEGER16, 0x10, (ACCESS_READ | OBJACCESS_TXPDOMAPPING) }; /** \brief Object 0x6077 (Torque Actual Value) object name*/ OBJCONST UCHAR OBJMEM aName0x6077[] = "Torque Actual Value"; /** \brief Object 0x607A (Target Position) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x607A = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READWRITE|OBJACCESS_RXPDOMAPPING)}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x607A = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READWRITE | OBJACCESS_RXPDOMAPPING)}; /** \brief Object 0x607A (Target Position) object name*/ OBJCONST UCHAR OBJMEM aName0x607A[] = "Target Position"; @@ -911,8 +889,8 @@ OBJCONST UCHAR OBJMEM aName0x607A[] = "Target Position"; */ OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x607D[] = { {DEFTYPE_UNSIGNED8, 0x08, ACCESS_READ}, - {DEFTYPE_INTEGER32, 0x20, ACCESS_READWRITE}, - {DEFTYPE_INTEGER32, 0x20, ACCESS_READWRITE}}; + {DEFTYPE_INTEGER32, 0x20, (ACCESS_READWRITE | OBJACCESS_RXPDOMAPPING)}, + {DEFTYPE_INTEGER32, 0x20, (ACCESS_READWRITE | OBJACCESS_RXPDOMAPPING)}}; /** \brief Object 0x607D (Software Position Limit) object and entry names*/ @@ -920,10 +898,10 @@ OBJCONST UCHAR OBJMEM aName0x607D[] = "Software Position Limit\000Min position l /** \brief Object 0x6085 (Quickstop Declaration) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6085 = {DEFTYPE_INTEGER32, 0x20, ACCESS_READWRITE}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6085 = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READWRITE | OBJACCESS_RXPDOMAPPING)}; /** \brief Object 0x6085 (Quickstop Declaration) object name*/ -OBJCONST UCHAR OBJMEM aName0x6085[] = "Quickstop Declaration"; +OBJCONST UCHAR OBJMEM aName0x6085[] = "Quick stop deceleration"; /** @@ -935,23 +913,24 @@ OBJCONST UCHAR OBJMEM aName0x6085[] = "Quickstop Declaration"; */ OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x60C2[] = { {DEFTYPE_UNSIGNED8, 0x08, ACCESS_READ}, - {DEFTYPE_UNSIGNED8, 0x08, ACCESS_READWRITE}, - {DEFTYPE_INTEGER8, 0x08, ACCESS_READWRITE}}; + {DEFTYPE_UNSIGNED8, 0x08, (ACCESS_READWRITE | OBJACCESS_RXPDOMAPPING)}, + {DEFTYPE_INTEGER8, 0x08, (ACCESS_READWRITE | OBJACCESS_RXPDOMAPPING)}}; /** \brief Object 0x60C2 (Interpolation Time Period) object and entry names*/ -OBJCONST UCHAR OBJMEM aName0x60C2[] = "Interpolation Time Period\000Interpolation period \000Interpolation Index\000\377"; +OBJCONST UCHAR OBJMEM aName0x60C2[] = "Interpolation Time Period\000Interpolation time period value\000Interpolation time index\000\377"; /** \brief Object 0x60FF (Target Velocity) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x60FF = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READWRITE|OBJACCESS_RXPDOMAPPING)}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x60FF = {DEFTYPE_INTEGER32, 0x20, (ACCESS_READWRITE | OBJACCESS_RXPDOMAPPING)}; /** \brief Object 0x60FF (Target Velocity) object name*/ OBJCONST UCHAR OBJMEM aName0x60FF[] = "Target Velocity"; /** \brief Object 0x6502 (Supported Drive Modes) entry description*/ -OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6502 = {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}; +OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x6502 = {DEFTYPE_UNSIGNED32, 0x20, (ACCESS_READ | OBJACCESS_TXPDOMAPPING )}; +/*ECATCHANGE_END(V5.13) CIA402 1*/ /** \brief Object 0x6502 (Supported Drive Modes) object name*/ OBJCONST UCHAR OBJMEM aName0x6502[] = "Supported Drive Modes"; /** @}*/ @@ -1004,7 +983,7 @@ OBJCONST UCHAR OBJMEM aName0xF010[] = "Module Profile List"; * SubIndex x * (x > 0) */ -OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0xF030[3] = { +OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0xF030[] = { {DEFTYPE_UNSIGNED8, 0x08, (ACCESS_READ|ACCESS_WRITE_PREOP)}, {DEFTYPE_UNSIGNED32, 0x20, (ACCESS_READ|ACCESS_WRITE_PREOP)}, {DEFTYPE_UNSIGNED32, 0x20, (ACCESS_READ|ACCESS_WRITE_PREOP)}}; @@ -1014,7 +993,7 @@ OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0xF030[3] = { * * no entry names defined because the object is an array (for every entry > 0 "SubIndex xxx" is returned) */ -OBJCONST UCHAR OBJMEM aName0xF030[] = "Configured module Ident list"; +OBJCONST UCHAR OBJMEM aName0xF030[] = "Configured Module Ident List"; /** @@ -1148,15 +1127,11 @@ PROTO CiA402Objects DefCiA402ObjectValues #ifdef _CiA402_ = { {5, {0x60400010,0x607A0020,0x60FF0020,0x60600008,0x00000008}}, /* TOBJ1600*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ {3, {0x60400010,0x607A0020,0x00000010 }}, /*TOBJ1601*/ {3, {0x60400010,0x60FF0020,0x00000010 }}, /*TOBJ1602*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ {5, {0x60410010,0x60640020,0x606C0020,0x60610008,0x00000008}}, /*TOBJ1A00*/ -/*ECATCHANGE_START(V5.12) CiA402 3*/ {3, {0x60410010,0x60640020,0x00000010 }}, /*TOBJ1A01*/ {3, {0x60410010,0x60640020,0x00000010 }},/*TOBJ1A02*/ -/*ECATCHANGE_END(V5.12) CiA402 3*/ 0x0,/*(UINT16) ErrorCode 0x1001*/ 0x0,/*(UINT16) ControlWord 0x6040*/ 0x0,/*(UINT16) StatusWord 0x6041*/ @@ -1213,19 +1188,15 @@ PROTO TOBJECT OBJMEM DefCiA402AxisObjDic[] /* Object 0x1600 */ {NULL,NULL, 0x1600, {DEFTYPE_PDOMAPPING, 5 | (OBJCODE_REC << 8)}, asEntryDesc0x1600, aName0x1600, NULL, NULL, NULL, 0x0000 }, /* Object 0x1601 */ -/*ECATCHANGE_START(V5.12) CiA402 3*/ {NULL,NULL, 0x1601, {DEFTYPE_PDOMAPPING, 3 | (OBJCODE_REC << 8)}, asEntryDesc0x1601, aName0x1601,NULL, NULL, NULL, 0x0000 }, /* Object 0x1602 */ {NULL,NULL, 0x1602, {DEFTYPE_PDOMAPPING, 3 | (OBJCODE_REC << 8)}, asEntryDesc0x1602, aName0x1602, NULL, NULL, NULL, 0x0000 }, -/*ECATCHANGE_END(V5.12) CiA402 3*/ /* Object 0x1A00 */ {NULL,NULL, 0x1A00, {DEFTYPE_PDOMAPPING, 5 | (OBJCODE_REC << 8)}, asEntryDesc0x1A00, aName0x1A00, NULL, NULL, NULL, 0x0000 }, /* Object 0x1A01 */ -/*ECATCHANGE_START(V5.12) CiA402 3*/ {NULL,NULL, 0x1A01, {DEFTYPE_PDOMAPPING, 3 | (OBJCODE_REC << 8)}, asEntryDesc0x1A01, aName0x1A01, NULL, NULL, NULL, 0x0000 }, /* Object 0x1A02 */ {NULL,NULL, 0x1A02, {DEFTYPE_PDOMAPPING, 3 | (OBJCODE_REC << 8)}, asEntryDesc0x1A02, aName0x1A02, NULL, NULL, NULL, 0x0000 }, -/*ECATCHANGE_END(V5.12) CiA402 3*/ /* Object 0x603F */ {NULL,NULL, 0x603F, {DEFTYPE_UNSIGNED16 , 0 | (OBJCODE_VAR << 8)}, &sEntryDesc0x603F, aName0x603F, NULL, NULL, NULL, 0x0000 }, /* Object 0x6040 */ @@ -1267,7 +1238,7 @@ PROTO TOBJECT OBJMEM DefCiA402AxisObjDic[] ; PROTO void APPL_Application(void); -PROTO UINT16 APPL_GetDeviceID(void); +/*ET9300 Project Handler :(#if EXPLICIT_DEVICE_ID) lines 1248 to 1250 deleted*/ PROTO void APPL_AckErrorInd(UINT16 stateTrans); PROTO UINT16 APPL_StartMailboxHandler(void); diff --git a/coeappl.c b/coeappl.c index 8d4578c..baf3073 100644 --- a/coeappl.c +++ b/coeappl.c @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -14,12 +15,19 @@ \brief Implementation This file contains an example for CoE services and the CoE object dictionary -\version 5.12.1 +\version 5.13 +
Changes to version V5.12:
+V5.13 CIA402 3: change define "CIA402_DEVICE" to "CiA402_SAMPLE_APPLICATION"
+V5.13 COE1: handling objects with 255 entries
+V5.13 COE10: change 0x10F1.1 access from "rw" to "ro"
+V5.13 COE2: handle Backup entries with the code VAR
+V5.13 COE6: add 0x10F0.2 (Backup parameter changed)
+V5.13 COE7: define 0x1C3x.13 Shift Time too short, just define variable because expected in DC mode but shift mode is not supported by the SSC

Changes to version V5.11:
V5.12 COE1: load backup value after the complete OD was initialized
-V5.12 COE4: add timestamp object (0x10F8) and update diagnosis handling
-V5.12 COE8: fix invalid sizecalculation to init backup entries
+V5.12 COE4: add time stamp object (0x10F8) and update diagnosis handling
+V5.12 COE8: fix invalid size calculation to init backup entries
V5.12 ECAT1: update SM Parameter measurement (based on the system time), enhancement for input only devices and no mailbox support, use only 16Bit pointer in process data length caluclation
V5.12 ECAT5: update Sync error counter/flag handling,check enum memory alignment depending on the processor,in case of a polled timer disable ESC interrupts during DC_CheckWatchdog

Changes to version V5.10:
@@ -31,7 +39,7 @@ V5.11 ECAT4: enhance SM/Sync monitoring for input/output only slaves
V5.10 COE1: Define one entry description for all 0x1C3x objects and change data type of SI11,12,13 to UINT16 (according ETG.1020)
V5.10 COE2: Change return value of Get ObjectSize to UINT32
Change object size to UINT32
-V5.10 ECAT13: Update Synchronisation handling (FreeRun,SM Sync, Sync0, Sync1)
+V5.10 ECAT13: Update Synchronization handling (FreeRun,SM Sync, Sync0, Sync1)
Compare DC UINT configuration (by ESC Config data) vs. DC activation register settings
Update 0x1C3x entries

Changes to version V5.0:
@@ -119,10 +127,14 @@ V4.00 ECAT 1: The handling of the Sync Manager Parameter was included according /*remove definition of _COEAPPL_ (#ifdef is used in coeappl.h)*/ #define _OBJD_ +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED && !TEST_APPLICATION) lines 130 to 133 deleted*/ /*Add Application specific Objects*/ +/*ECATCHANGE_START(V5.13) CIA402 3*/ +/*ECATCHANGE_END(V5.13) CIA402 3*/ #include "cia402appl.h" +/*ET9300 Project Handler :(#elif EL9800_APPLICATION) lines 141 to 152 deleted*/ #undef _OBJD_ @@ -131,6 +143,7 @@ V4.00 ECAT 1: The handling of the Sync Manager Parameter was included according ------ Backup Parameter ------ -----------------------------------------------------------------------------------------*/ +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 161 to 168 deleted*/ /*----------------------------------------------------------------------------------------- ------ @@ -211,7 +224,7 @@ OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x1009 = {DEFTYPE_VISIBLESTRING,B /** * \brief 0x1009 (Hardware version) object name */ -OBJCONST UCHAR OBJMEM aName0x1009[] = "Hardware version"; +OBJCONST UCHAR OBJMEM aName0x1009[] = "Manufacturer Hardware version"; /*--------------------------------------------- @@ -223,16 +236,17 @@ OBJCONST UCHAR OBJMEM aName0x1009[] = "Hardware version"; CHAR acSoftwareversion[] = DEVICE_SW_VERSION; /** - * \brief 0x1009 (Hardware version) entry description + * \brief 0x100A (Software version) entry description */ OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x100A = {DEFTYPE_VISIBLESTRING,BYTE2BIT(DEVICE_SW_VERSION_LEN), ACCESS_READ}; /** - * \brief 0x1009 (Hardware version) object name + * \brief 0x100A (Software version) object name */ -OBJCONST UCHAR OBJMEM aName0x100A[] = "Software version"; +OBJCONST UCHAR OBJMEM aName0x100A[] = "Manufacturer Software version"; +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 271 to 397 deleted*/ /*--------------------------------------------- @@ -263,9 +277,10 @@ OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1018[] = { /** * \brief 0x1018 (Identity) object and entry names */ -OBJCONST UCHAR OBJMEM aName0x1018[] = "Identity\000Vendor ID\000Product code\000Revision\000Serial number\000\377"; +OBJCONST UCHAR OBJMEM aName0x1018[] = "Identity Object\000Vendor ID\000Product Code\000Revision Number\000Serial Number\000\377"; +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 431 to 456 deleted*/ /*--------------------------------------------- - 0x10F1 @@ -278,7 +293,9 @@ OBJCONST UCHAR OBJMEM aName0x1018[] = "Identity\000Vendor ID\000Product code\000 */ OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x10F1[] = { {DEFTYPE_UNSIGNED8, 0x8, ACCESS_READ }, - {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READWRITE}, +/*ECATCHANGE_START(V5.13) COE10*/ + {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}, +/*ECATCHANGE_END(V5.13) COE10*/ {DEFTYPE_UNSIGNED16, 0x10, ACCESS_READWRITE}}; /** @@ -290,7 +307,6 @@ OBJCONST UCHAR OBJMEM aName0x10F1[] = "Error Settings\000Local Error Reaction\00 //object declaration and initialization in objdef.h -/*ECATCHANGE_START(V5.12) COE4*/ /*--------------------------------------------- - 0x10F8 (Timestamp object) -----------------------------------------------*/ @@ -298,7 +314,6 @@ OBJCONST UCHAR OBJMEM aName0x10F1[] = "Error Settings\000Local Error Reaction\00 * \brief 0x10F8 (Timestamp object) entry description */ OBJCONST TSDOINFOENTRYDESC OBJMEM sEntryDesc0x10F8 = { DEFTYPE_UNSIGNED64, 0x40, ACCESS_READWRITE | OBJACCESS_TXPDOMAPPING } ; - /** * \brief 0x10F8 (Timestamp object) object name */ @@ -352,9 +367,10 @@ UINT8 Read0x10F8(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * return 0; } + ///////////////////////////////////////////////////////////////////////////////////////// /** -\brief This function updates the local timestamp object (0x10F8) and has to be called at least every 4.2sec to detect an 32Bit DC unit overrun. +\brief This function updates the local time stamp object (0x10F8) and has to be called at least every 4.2sec to detect an 32Bit DC unit overrun. Called from the Timer handler *//////////////////////////////////////////////////////////////////////////////////////// void COE_SyncTimeStamp(void) @@ -388,7 +404,6 @@ void COE_SyncTimeStamp(void) u32CheckForDcOverrunCnt = 0; } -/*ECATCHANGE_END(V5.12) COE4*/ @@ -406,9 +421,9 @@ void COE_SyncTimeStamp(void) * SI4 (SM3): Process data In (0x4) * */ - /*ECATCHANGE_START(V5.12)*/ + /*ECATCHANGE_START(V5.13)*/ TOBJ1C00 sSyncmanagertype = {0x04, {0x0201, 0x0403}}; -/*ECATCHANGE_END(V5.12)*/ +/*ECATCHANGE_END(V5.13)*/ /** @@ -436,6 +451,7 @@ OBJCONST UCHAR OBJMEM aName0x1C00[] = "Sync manager type"; */ OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1C3x[] = { {DEFTYPE_UNSIGNED8, 0x8, ACCESS_READ }, /* Subindex 000 */ +/*ET9300 Project Handler :(#if !AL_EVENT_ENABLED && !DC_SUPPORTED) lines 635 to 637 deleted*/ {DEFTYPE_UNSIGNED16, 0x10, (ACCESS_READ | ACCESS_WRITE_PREOP)}, /* SubIndex 001: Synchronization Type */ {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READ}, /* SubIndex 002: Cycle Time */ {0x0000, 0x20, 0}, /* SubIndex 003: Shift Time (not supported)*/ @@ -448,7 +464,9 @@ OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1C3x[] = { {DEFTYPE_UNSIGNED32, 0x20, ACCESS_READWRITE}, /* SubIndex 010: Sync0 Cycle Time */ {DEFTYPE_UNSIGNED16, 0x10, ACCESS_READ}, /* SubIndex 011: SM-Event Missed */ {DEFTYPE_UNSIGNED16, 0x10, ACCESS_READ}, /* SubIndex 012: Cycle Time Too Small */ - {0x0000, 0x10, 0}, /* SubIndex 013: Shift Too Short Counter (not supported)*/ + /*ECATCHANGE_START(V5.13) COE7*/ + {DEFTYPE_UNSIGNED16, 0x10, ACCESS_READ}, /* SubIndex 013: Shift Too Short Counter*/ + /*ECATCHANGE_END(V5.13) COE7*/ {0x0000, 0x10, 0}, /* Subindex 014: RxPDO Toggle Failed (not supported)*/ {0x0000, 0x20, 0}, /* Subindex 015: Minimum Cycle Distance (not supported)*/ {0x0000, 0x20, 0}, /* Subindex 016: Maximum Cycle Distance (not supported)*/ @@ -472,12 +490,12 @@ OBJCONST TSDOINFOENTRYDESC OBJMEM asEntryDesc0x1C3x[] = { /** * \brief 0x1C32 (SyncManager 2 parameter) object and entry names */ -OBJCONST UCHAR OBJMEM aName0x1C32[] = "SM output parameter\000Synchronization Type\000Cycle Time\000\000Synchronization Types supported\000Minimum Cycle Time\000Calc and Copy Time\000\000Get Cycle Time\000Delay Time\000Sync0 Cycle Time\000SM-Event Missed\000Cycle Time Too Small\000Shift Time Too Short\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Sync Error\000\377"; +OBJCONST UCHAR OBJMEM aName0x1C32[] = "SM output parameter\000Synchronization Type\000Cycle Time\000\000Synchronization Types supported\000Minimum Cycle Time\000Calc and Copy Time\000\000Get Cycle Time\000Delay Time\000Sync0 Cycle Time\000SM-Event Missed\000Cycle Time Too Small\000Shift Time Too Short Counter\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Sync Error\000\377"; /** * \brief 0x1C33 (SyncManager 3 parameter) object and entry names */ -OBJCONST UCHAR OBJMEM aName0x1C33[] = "SM input parameter\000Synchronization Type\000Cycle Time\000\000Synchronization Types supported\000Minimum Cycle Time\000Calc and Copy Time\000\000Get Cycle Time\000Delay Time\000Sync0 Cycle Time\000SM-Event Missed\000Cycle Time Too Small\000Shift Time Too Short\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Sync Error\000\377"; +OBJCONST UCHAR OBJMEM aName0x1C33[] = "SM input parameter\000Synchronization Type\000Cycle Time\000\000Synchronization Types supported\000Minimum Cycle Time\000Calc and Copy Time\000\000Get Cycle Time\000Delay Time\000Sync0 Cycle Time\000SM-Event Missed\000Cycle Time Too Small\000Shift Time Too Short Counter\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Sync Error\000\377"; /****************************************************************************** ** Object Dictionary @@ -485,7 +503,7 @@ OBJCONST UCHAR OBJMEM aName0x1C33[] = "SM input parameter\000Synchronization Typ /** * \brief Object dictionary pointer */ -TOBJECT OBJMEM * ObjDicList = NULL; +TOBJECT OBJMEM * ObjDicList = NULL; /** * \brief List of generic application independent objects @@ -501,14 +519,15 @@ TOBJECT OBJMEM GenObjDic[] = { {NULL,NULL, 0x1009, {DEFTYPE_VISIBLESTRING, 0 | (OBJCODE_VAR << 8)}, &sEntryDesc0x1009, aName0x1009, acHardwareversion, NULL, NULL, 0x0000 }, /* Object 0x100A */ {NULL,NULL, 0x100A, {DEFTYPE_VISIBLESTRING, 0 | (OBJCODE_VAR << 8)}, &sEntryDesc0x100A, aName0x100A, acSoftwareversion, NULL, NULL, 0x0000 }, +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 711 to 716 deleted*/ /* Object 0x1018 */ {NULL,NULL, 0x1018, {DEFTYPE_IDENTITY, 4 | (OBJCODE_REC << 8)}, asEntryDesc0x1018, aName0x1018, &sIdentity, NULL, NULL, 0x0000 }, +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 719 to 724 deleted*/ /* Object 0x10F1 */ {NULL,NULL, 0x10F1, {DEFTYPE_RECORD, 2 | (OBJCODE_REC << 8)}, asEntryDesc0x10F1, aName0x10F1, &sErrorSettings, NULL, NULL, 0x0000 }, -/*ECATCHANGE_START(V5.12) COE4*/ /* Object 0x10F8 */ { NULL,NULL, 0x10F8,{ DEFTYPE_UNSIGNED64, 0 | (OBJCODE_VAR << 8) }, &sEntryDesc0x10F8, aName0x10F8, &u64Timestamp, Read0x10F8, NULL , 0x0000 }, -/*ECATCHANGE_END(V5.12) COE4*/ +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 730 to 733 deleted*/ /* Object 0x1C00 */ {NULL,NULL, 0x1C00, {DEFTYPE_UNSIGNED8, 4 | (OBJCODE_ARR << 8)}, asEntryDesc0x1C00, aName0x1C00, &sSyncmanagertype, NULL, NULL, 0x0000 }, /* Object 0x1C32 */ @@ -519,6 +538,7 @@ TOBJECT OBJMEM GenObjDic[] = { /*end of entries*/ {NULL,NULL, 0xFFFF, {0, 0}, NULL, NULL, NULL, NULL, NULL, 0x000}}; +/*ET9300 Project Handler :(#if !STATIC_OBJECT_DIC #else) lines 749 to 820 deleted*/ /*----------------------------------------------------------------------------------------- ------ @@ -536,8 +556,8 @@ OBJCONST TOBJECT OBJMEM * COE_GetObjectDictionary(void) return (OBJCONST TOBJECT OBJMEM *) ObjDicList; } +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 838 to 1048 deleted*/ -/*ECATCHANGE_START(V5.12) ECAT5*/ ///////////////////////////////////////////////////////////////////////////////////////// /** \brief Update the Sync Error Indication @@ -545,6 +565,7 @@ OBJCONST TOBJECT OBJMEM * COE_GetObjectDictionary(void) void COE_UpdateSyncErrorStatus(void) { if (sSyncManOutPar.u16CycleExceededCounter > 0 || sSyncManOutPar.u16SmEventMissedCounter > sErrorSettings.u16SyncErrorCounterLimit) +/*ET9300 Project Handler :(#if !_PIC18 #else) lines 1059 to 1061 deleted*/ { sSyncManOutPar.u8SyncError = 1; } @@ -555,6 +576,7 @@ void COE_UpdateSyncErrorStatus(void) if (sSyncManInPar.u16CycleExceededCounter > 0 || sSyncManInPar.u16SmEventMissedCounter > sErrorSettings.u16SyncErrorCounterLimit) +/*ET9300 Project Handler :(#if !_PIC18 #else) lines 1075 to 1077 deleted*/ { sSyncManInPar.u8SyncError = 1; } @@ -564,7 +586,6 @@ void COE_UpdateSyncErrorStatus(void) } } -/*ECATCHANGE_END(V5.12) ECAT5*/ ///////////////////////////////////////////////////////////////////////////////////////// /** @@ -573,6 +594,7 @@ void COE_UpdateSyncErrorStatus(void) void COE_ObjInit(void) { + /* initialize the Sync Manager Output parameter object 0x1C32 */ sSyncManOutPar.subindex0 = 32; @@ -597,9 +619,7 @@ void COE_ObjInit(void) sSyncManOutPar.u16SyncTypesSupported = SYNCTYPE_FREERUNSUPP /* ECAT FreeRun Mode is supported */ #if (PD_OUTPUT_CALC_AND_COPY_TIME == 0) || (PD_INPUT_CALC_AND_COPY_TIME == 0) || (MIN_PD_CYCLE_TIME == 0) -/*ECATCHANGE_START(V5.12) ECAT1*/ | SYNCTYPE_TIMESVARIABLE /* the execution times depend on the connected modules */ -/*ECATCHANGE_END(V5.12) ECAT1*/ #endif | SYNCTYPE_SYNCHRONSUPP /* ECAT Synchron Mode is supported */ | SYNCTYPE_DCSYNC0SUPP /* DC Sync0 Mode is supported */ @@ -624,13 +644,11 @@ void COE_ObjInit(void) /*subindex 9: time from start driving outputs until outputs are valid*/ sSyncManOutPar.u32DelayTime = (PD_OUTPUT_DELAY_TIME); -/*ECATCHANGE_START(V5.12) ECAT5*/ /*subindex 11: reset the sm missed error counter*/ sSyncManOutPar.u16SmEventMissedCounter = 0; /*subindex 12: reset the cycle exceed error counter*/ sSyncManOutPar.u16CycleExceededCounter = 0; -/*ECATCHANGE_END(V5.12) ECAT5*/ /*subindex 32: indicates if a synchronisation error has occurred*/ sSyncManOutPar.u8SyncError = 0; @@ -643,29 +661,26 @@ void COE_ObjInit(void) /* subindex 2: same as 0x1C32:02 */ sSyncManInPar.u32CycleTime = sSyncManOutPar.u32CycleTime; +/*ET9300 Project Handler :(#if MAX_PD_OUTPUT_SIZE > 0 #else) lines 1173 to 1175 deleted*/ /* subindex 4: same as 0x1C32:04 */ sSyncManInPar.u16SyncTypesSupported = sSyncManOutPar.u16SyncTypesSupported; +/*ET9300 Project Handler :(#elif MAX_PD_INPUT_SIZE > 0) lines 1180 to 1198 deleted*/ /* subindex 5: same as 0x1C32:05 */ sSyncManInPar.u32MinCycleTime = MIN_PD_CYCLE_TIME; - /* subindex 6: delay read inputs, calculation and copy to SM buffer*/ sSyncManInPar.u32CalcAndCopyTime = (PD_INPUT_CALC_AND_COPY_TIME); - /*subindex 8: trigger cycle time measurement*/ sSyncManInPar.u16GetCycleTime = 0; - /*subindex 9: delay to prepare input latch*/ sSyncManInPar.u32DelayTime = (PD_INPUT_DELAY_TIME); -/*ECATCHANGE_START(V5.12) ECAT5*/ /*subindex 11: reset the sm missed error counter*/ sSyncManInPar.u16SmEventMissedCounter = 0; /*subindex 12: reset the cycle exceed error counter*/ sSyncManInPar.u16CycleExceededCounter = 0; -/*ECATCHANGE_END(V5.12) ECAT5*/ /*subindex 32: incremented if a synchronisation error has occurred*/ sSyncManInPar.u8SyncError = 0; @@ -682,36 +697,30 @@ void COE_ObjInit(void) } } - u8PendingSdo = 0; - bStoreCompleteAccess = FALSE; - u16StoreIndex = 0; - u8StoreSubindex = 0; - u32StoreDataSize = 0; - pStoreData = NULL; - pSdoPendFunc = NULL; +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 1233 to 1241 deleted*/ - pSdoSegData = NULL; +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1243 to 1245 deleted*/ +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 1247 to 1259 deleted*/ -/*ECATCHANGE_START(V5.12) COE4*/ - UINT32 EscFeature = 0; - HW_EscReadDWord(EscFeature, ESC_FEATURES_OFFSET); - EscFeature = SWAPDWORD(EscFeature); - - if ((EscFeature & ESC_DC_32BIT_MASK) > 0) { - b32BitDc = FALSE; + UINT32 EscFeature = 0; + HW_EscReadDWord(EscFeature, ESC_FEATURES_OFFSET); + EscFeature = SWAPDWORD(EscFeature); + + if ((EscFeature & ESC_DC_32BIT_MASK) > 0) + { + b32BitDc = FALSE; + } + else + { + b32BitDc = TRUE; + + HW_EscReadDWord(u32LastDc32Value, ESC_SYSTEMTIME_OFFSET); + } + + u32CheckForDcOverrunCnt = CHECK_DC_OVERRUN_IN_MS; } - else - { - b32BitDc = TRUE; - - HW_EscReadDWord(u32LastDc32Value, ESC_SYSTEMTIME_OFFSET); - } - - u32CheckForDcOverrunCnt = CHECK_DC_OVERRUN_IN_MS; - - /*ECATCHANGE_END(V5.12) COE4*/ } ///////////////////////////////////////////////////////////////////////////////////////// @@ -903,45 +912,7 @@ UINT16 COE_ObjDictionaryInit(void) void COE_Main(void) { - UINT8 abort = 0; - - if(pSdoPendFunc != NULL) - { - abort = pSdoPendFunc(u16StoreIndex,u8StoreSubindex,u32StoreDataSize,pStoreData,bStoreCompleteAccess); - - if(abort != ABORTIDX_WORKING) - { - switch(u8PendingSdo) - { - case SDO_PENDING_SEG_WRITE: - if(pSdoSegData) - { - /* the allocated buffer can be released */ - FREEMEM( (UINT16 VARMEM *) pSdoSegData ); - pSdoSegData = NULL; - } - case SDO_PENDING_WRITE: - /*send SDO Download Response*/ - SDOS_SdoRes(abort, 0, NULL); - break; - - case SDO_PENDING_SEG_READ: - case SDO_PENDING_READ: - /* send SDO upload response */ - SDOS_SdoRes(abort, u32StoreDataSize, pStoreData); - break; - - } - - u8PendingSdo = 0; - u16StoreIndex = 0; - u8StoreSubindex = 0; - u32StoreDataSize = 0; - pStoreData = NULL; - bStoreCompleteAccess = 0; - pSdoPendFunc = NULL; - } - } +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 1474 to 1516 deleted*/ } /** @} */ diff --git a/coeappl.h b/coeappl.h index 6b7685d..da7200c 100644 --- a/coeappl.h +++ b/coeappl.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -12,8 +13,10 @@ \file coeappl.h \author EthercatSSC@beckhoff.com -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 COE6: add 0x10F0.2 (Backup parameter changed)

Changes to version V5.11:
V5.12 COE4: add timestamp object (0x10F8) and update diagnosis handling
V5.12 ECAT5: update Sync error counter/flag handling,check enum memory alignment depending on the processor,in case of a polled timer disable ESC interrupts during DC_CheckWatchdog
@@ -29,7 +32,7 @@ V5.01 : Start file change log ------ -----------------------------------------------------------------------------------------*/ #include "objdef.h" - +#include "ecatappl.h" #ifndef _COEAPPL_H_ #define _COEAPPL_H_ @@ -39,6 +42,7 @@ V5.01 : Start file change log ------ Defines and Types ------ -----------------------------------------------------------------------------------------*/ +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 44 to 69 deleted*/ /*--------------------------------------------- @@ -58,6 +62,7 @@ TOBJ1018; +/*ET9300 Project Handler :(#if BACKUP_PARAMETER_SUPPORTED) lines 89 to 105 deleted*/ /*--------------------------------------------- @@ -68,9 +73,7 @@ TOBJ1018; */ typedef struct OBJ_STRUCT_PACKED_START { UINT16 u16SubIndex0; /**< \brief SubIndex 0*/ -/*ECATCHANGE_START(V5.12)*/ UINT16 aEntries[2]; /**< \brief Entry buffer (one for two SyncManagers)*/ -/*ECATCHANGE_END(V5.12)*/ } OBJ_STRUCT_PACKED_END TOBJ1C00; @@ -90,13 +93,11 @@ TOBJ1C00; ------ -----------------------------------------------------------------------------------------*/ -/*ECATCHANGE_START(V5.12) COE4*/ PROTO UINT64 u64Timestamp #ifdef _COEAPPL_ = { 0 } #endif ; -/*ECATCHANGE_END(V5.12) COE4*/ PROTO UINT32 u32LastDc32Value; PROTO UINT32 u32CheckForDcOverrunCnt; @@ -105,9 +106,7 @@ PROTO UINT32 u32CheckForDcOverrunCnt; ------ Global functions ------ -----------------------------------------------------------------------------------------*/ -/*ECATCHANGE_START(V5.12) ECAT5*/ PROTO void COE_UpdateSyncErrorStatus(void); -/*ECATCHANGE_END(V5.12) ECAT5*/ PROTO void COE_ObjInit(void); PROTO void COE_Main(void); @@ -116,9 +115,7 @@ PROTO UINT16 COE_AddObjectToDic(TOBJECT OBJMEM * pNewObjEntry); PROTO void COE_RemoveDicEntry(UINT16 index); PROTO void COE_ClearObjDictionary(void); PROTO OBJCONST TOBJECT OBJMEM * COE_GetObjectDictionary(void); -/*ECATCHANGE_START(V5.12) COE4*/ PROTO void COE_SyncTimeStamp(void); -/*ECATCHANGE_END(V5.12) COE4*/ #undef PROTO /** @}*/ diff --git a/ecat_def.h b/ecat_def.h index 2ace97f..48f8acf 100644 --- a/ecat_def.h +++ b/ecat_def.h @@ -1,13 +1,14 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /*----------------------------------------------------------------------------------------- ------ ------ ecat_def.h ------- SSC version : 5.12 +------ SSC version : 5.13 -----------------------------------------------------------------------------------------*/ #ifndef _ECATDEF_H_ @@ -28,7 +29,7 @@ ------ -----------------------------------------------------------------------------------------*/ #define SSC_VERSION_MAJOR 5 -#define SSC_VERSION_MINOR 12 +#define SSC_VERSION_MINOR 13 /** @@ -37,7 +38,7 @@ EL9800_HW: Shall be set if the Slave code is executed on the PIC mounted on the This settings should also be enabled if the ESC is connected via a serial interface and no specific hardware access files are avilable yet.
NOTE: The PDI type needs also to be configured in the "ESC_CONFIG_DATA". */ #ifndef EL9800_HW -#define EL9800_HW 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define EL9800_HW 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -45,72 +46,78 @@ MCI_HW: Shall be set if the MCI of the ESC is connected.
This settings should also be enabled if the ESC is connected via a parallel interface and no specific hardware access files are avilable yet.
NOTE: The PDI type needs also to be configured in the "ESC_CONFIG_DATA". */ #ifndef MCI_HW -#define MCI_HW 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define MCI_HW 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** FC1100_HW: Shall be set if the EtherCAT slave controller is located on an FC1100 PCI card.
NOTE: The PDI type needs also to be configured in the "ESC_CONFIG_DATA". */ #ifndef FC1100_HW -#define FC1100_HW 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define FC1100_HW 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** TIESC_HW: Temporary define to support TI ICE/IDK development board (Shall be set if the Slave code shall executed on an AM335X ICE/IDK Evaluation Board
from Texas Instruments) */ #ifndef TIESC_HW -#define TIESC_HW 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define TIESC_HW 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** CONTROLLER_16BIT: Shall be set if the host controller is a 16Bit architecture */ #ifndef CONTROLLER_16BIT -#define CONTROLLER_16BIT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define CONTROLLER_16BIT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** CONTROLLER_32BIT: Shall be set if the host controller is a 32Bit architecture */ #ifndef CONTROLLER_32BIT -#define CONTROLLER_32BIT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define CONTROLLER_32BIT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! +#endif + +/** +MEMORY_UNIT_16BIT: Shall be set if the smallest controller memory unit is 16bit */ +#ifndef MEMORY_UNIT_16BIT +#define MEMORY_UNIT_16BIT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** _PIC18: Microchip PIC18F452 Specific Code
This processor is mounted on the Beckhoff Slave Evaluation Board (Hardware version up to EL9800_2). */ #ifndef _PIC18 -#define _PIC18 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define _PIC18 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** _PIC24: Microchip PIC24HJ128GP306 Specific Code
This processor is mounted on the Beckhoff Slave Evaluation Board (Hardware version up to EL9800_4A). */ #ifndef _PIC24 -#define _PIC24 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define _PIC24 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** ESC_16BIT_ACCESS: If the microcontroller only supports 16Bit access to the ESC. */ #ifndef ESC_16BIT_ACCESS -#define ESC_16BIT_ACCESS 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define ESC_16BIT_ACCESS 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** ESC_32BIT_ACCESS: If the microcontroller only supports 32Bit access to the ESC. */ #ifndef ESC_32BIT_ACCESS -#define ESC_32BIT_ACCESS 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define ESC_32BIT_ACCESS 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** MBX_16BIT_ACCESS: If the microcontroller only supports 16Bit access to local mailbox memory(access to ESC DPRAM is controlled by "ESC_16BIT_ACCESS"). If reset 8Bit access is used. */ #ifndef MBX_16BIT_ACCESS -#define MBX_16BIT_ACCESS 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define MBX_16BIT_ACCESS 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** BIG_ENDIAN_16BIT: If the microcontroller always make 16 bit access to external memory, operates in BigEndian format
and the switching of the high and low byte is done in hardware. */ #ifndef BIG_ENDIAN_16BIT -#define BIG_ENDIAN_16BIT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define BIG_ENDIAN_16BIT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -118,32 +125,32 @@ BIG_ENDIAN_FORMAT: If the microcontroller works with BigEndian format, then this and DWORD-accesses will make a BYTE- or WORD-swapping, the macros SWAPWORD and SWAPDWORD in ecatslv.h might be adapted.
If this switch is set, then BIG_ENDIAN_16BIT shall be reset. */ #ifndef BIG_ENDIAN_FORMAT -#define BIG_ENDIAN_FORMAT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define BIG_ENDIAN_FORMAT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** EXT_DEBUGER_INTERFACE: If this switch is set, the external debugger interface on the EL9800_4A (_PIC24) will be activated.
This define will be ignored if _PIC24 is not set. */ #ifndef EXT_DEBUGER_INTERFACE -#define EXT_DEBUGER_INTERFACE 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define EXT_DEBUGER_INTERFACE 0 #endif /** UC_SET_ECAT_LED: If set the EtherCAT Run and Error LEDs are set by the uController. If set ESC_SUPPORT_ECAT_LED shall be reset. */ #ifndef UC_SET_ECAT_LED -#define UC_SET_ECAT_LED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define UC_SET_ECAT_LED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** ESC_SUPPORT_ECAT_LED: This switch can be enabled if the connected ESC support Error and Run LED indication. See the ESC datasheet if the LED indication is supported. If set UC_SET_ECAT_LED shall be reset. */ #ifndef ESC_SUPPORT_ECAT_LED -#define ESC_SUPPORT_ECAT_LED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define ESC_SUPPORT_ECAT_LED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** ESC_EEPROM_EMULATION: If this switch is set EEPROM emulation is supported. Not all ESC types support EEPROM emulation. See ESC datasheet for more information. */ #ifndef ESC_EEPROM_EMULATION -#define ESC_EEPROM_EMULATION 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define ESC_EEPROM_EMULATION 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -163,106 +170,111 @@ AL_EVENT_ENABLED: If an interrupt routine shall be called when one of the Events this switch has to be defined to 1 (synchronous modes are supported).
If the AL Event register shall only be polled, this switch has to be defined to 0 (only free run mode is supported). */ #ifndef AL_EVENT_ENABLED -#define AL_EVENT_ENABLED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define AL_EVENT_ENABLED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** -DC_SUPPORTED: If distributed clocks should be supported by the slave, then this switch shall be set.
-If this switch is set, then also AL_EVENT_ENABLED shall be set.
+DC_SUPPORTED: If distributed clocks should be supported by the slave, this switch shall be set.
NOTE: The DC support needs also be set in the "ESC_CONFIG_DATA" settings. */ #ifndef DC_SUPPORTED -#define DC_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define DC_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** ECAT_TIMER_INT: If this switch is set, then the watchdog time for the EtherCAT watchdog will be checked in a timer interrupt routine. */ #ifndef ECAT_TIMER_INT -#define ECAT_TIMER_INT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define ECAT_TIMER_INT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** INTERRUPTS_SUPPORTED: If this switch is set the slave stack provides interrupt handling.
NOTE: value will be evaluated automatically!! */ #ifndef INTERRUPTS_SUPPORTED -#define INTERRUPTS_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define INTERRUPTS_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** TEST_APPLICATION: NOTE: THIS SETTING SHALL NOT BE USED TO CREATE A USER SPECIFIC APPLICATION!
Select this setting to test the slave stack or a master implementation. For further information about this application see the SSC Application Node. */ #ifndef TEST_APPLICATION -#define TEST_APPLICATION 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define TEST_APPLICATION 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! +#endif + +/** +TEST_APPLICATION_REDUCED_MEMORY: This define reduces the memory footprint of the test application (should only be used if the default test application generates no memory errors when accessing the OD or FoE files) */ +#ifndef TEST_APPLICATION_REDUCED_MEMORY +#define TEST_APPLICATION_REDUCED_MEMORY //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** EL9800_APPLICATION: Should be set if the Slave Sample Code runs on an EL9800_x Evaluation Board. */ #ifndef EL9800_APPLICATION -#define EL9800_APPLICATION 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define EL9800_APPLICATION 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** -CiA402_DEVICE: If this switch is set, then the sample implementation of CiA402 device profile will be activated. */ -#ifndef CiA402_DEVICE -#define CiA402_DEVICE 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +CiA402_SAMPLE_APPLICATION: If this switch is set, then the sample implementation of CiA402 device profile will be activated. */ +#ifndef CiA402_SAMPLE_APPLICATION +#define CiA402_SAMPLE_APPLICATION 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** SAMPLE_APPLICATION: Select this define if the hardware independent sample application shall be activated. */ #ifndef SAMPLE_APPLICATION -#define SAMPLE_APPLICATION 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define SAMPLE_APPLICATION 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** SAMPLE_APPLICATION_INTERFACE: Select this define to activate the Sample Application Interface. This provides an simple interface to create a static library and used in an external application.
NOTE: The file "EtherCATSampleLibrary.h" includes the library interface (maybe need to be adapted). */ #ifndef SAMPLE_APPLICATION_INTERFACE -#define SAMPLE_APPLICATION_INTERFACE 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define SAMPLE_APPLICATION_INTERFACE 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** BOOTLOADER_SAMPLE: Select this define to enable a small footprint application which only supports the BOOT state and FoE mailbox protocol. */ #ifndef BOOTLOADER_SAMPLE -#define BOOTLOADER_SAMPLE 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define BOOTLOADER_SAMPLE 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** USE_DEFAULT_MAIN: Set to 1 if the main function of a default application shall be used.
-Otherwise the Init functions and the mainloop handler shall be called for a user specific function (see ET9300 Application Note for further details www.beckhoff.com/english.asp?download/ethercat_development_products.htm?id=71003127100387). */ +Otherwise the Init functions and the mainloop handler shall be called for a user specific function (see ET9300 Application Note for further details https://www.beckhoff.com/de-de/support/downloadfinder/technische-dokumentationen/?q=ET1100). */ #ifndef USE_DEFAULT_MAIN -#define USE_DEFAULT_MAIN 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define USE_DEFAULT_MAIN 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** MAILBOX_QUEUE: If this switch is set, the mailbox services will be stored in a queue.
With this switch reset only one mailbox service can be processed in parallel. */ #ifndef MAILBOX_QUEUE -#define MAILBOX_QUEUE 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define MAILBOX_QUEUE 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** AOE_SUPPORTED: If the AoE services are supported, then this switch shall be set. */ #ifndef AOE_SUPPORTED -#define AOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define AOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** COE_SUPPORTED: If the CoE services are supported, then his switch shall be set. */ #ifndef COE_SUPPORTED -#define COE_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define COE_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** COMPLETE_ACCESS_SUPPORTED: If the complete SDO access (accessing all entries of an object with one SDO service, then this
switch shall be set. Furthermore,COE_SUPPORTED shall be set. */ #ifndef COMPLETE_ACCESS_SUPPORTED -#define COMPLETE_ACCESS_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define COMPLETE_ACCESS_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** SEGMENTED_SDO_SUPPORTED: If the segmented SDO services should be supported, then this switch shall be set.
Furthermore, COE_SUPPORTED shall be set. */ #ifndef SEGMENTED_SDO_SUPPORTED -#define SEGMENTED_SDO_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define SEGMENTED_SDO_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -271,26 +283,26 @@ a serial interface is needed), this switch should be set. In that case ABORTIDX_ returned from OBJ_Read or OBJ_Write and the response shall be sent by calling SDOS_SdoRes, when
the response is available. */ #ifndef SDO_RES_INTERFACE -#define SDO_RES_INTERFACE 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define SDO_RES_INTERFACE 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** USE_SINGLE_PDO_MAPPING_ENTRY_DESCR: If this setting is set a PDO mapping entry description just need to be defined for the first entry. For all furher entries the same description is used. */ #ifndef USE_SINGLE_PDO_MAPPING_ENTRY_DESCR -#define USE_SINGLE_PDO_MAPPING_ENTRY_DESCR 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define USE_SINGLE_PDO_MAPPING_ENTRY_DESCR 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** BACKUP_PARAMETER_SUPPORTED: If this switch is set, then the functions in the application example to load and
store backup parameter will be compiled. Furthermore, COE_SUPPORTED shall be set. */ #ifndef BACKUP_PARAMETER_SUPPORTED -#define BACKUP_PARAMETER_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define BACKUP_PARAMETER_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** STORE_BACKUP_PARAMETER_IMMEDIATELY: Objet values will be stored when they are written.This switch is only evaluated if "BACKUP_PARAMETER_SUPPORTED" is set. */ #ifndef STORE_BACKUP_PARAMETER_IMMEDIATELY -#define STORE_BACKUP_PARAMETER_IMMEDIATELY 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define STORE_BACKUP_PARAMETER_IMMEDIATELY 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -298,13 +310,13 @@ DIAGNOSIS_SUPPORTED: If this define is set the slave stack supports diagnosis me To support diagnosis messages COE_SUPPORTED shall be enabled and the platform shall support dynamic memory allocation.
NOTE: this feature is implemented according to ETG.1020 */ #ifndef DIAGNOSIS_SUPPORTED -#define DIAGNOSIS_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define DIAGNOSIS_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** EMERGENCY_SUPPORTED: If this define is set the slave stack supports emergency messages. COE_SUPPORTED or SOE_SUPPORTED shall be enabled */ #ifndef EMERGENCY_SUPPORTED -#define EMERGENCY_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define EMERGENCY_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -312,7 +324,7 @@ VOE_SUPPORTED: If the VoE services should be supported, then this switch shall b VoE functions in mailbox.c are implemented, but the VoE service functions have to be added. Furthermore, the example code cannot be linked
correctly, because these functions are missing. */ #ifndef VOE_SUPPORTED -#define VOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define VOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -320,44 +332,44 @@ SOE_SUPPORTED: If the SoE services should be supported, then this switch shall b SoE functions in mailbox.c are implemented, but the SoE service functions have to be added. Furthermore, the example code cannot be linked
correctly, because these functions are missing. */ #ifndef SOE_SUPPORTED -#define SOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define SOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** EOE_SUPPORTED: If the EoE services should be supported, then this switch shall be set. */ #ifndef EOE_SUPPORTED -#define EOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define EOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** STATIC_ETHERNET_BUFFER: If this switch is set a static buffer is used to store ethernet frames, otherwise the buffer is allocated on demand */ #ifndef STATIC_ETHERNET_BUFFER -#define STATIC_ETHERNET_BUFFER 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define STATIC_ETHERNET_BUFFER 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** FOE_SUPPORTED: If the FoE services should be supported, then this switch shall be set. */ #ifndef FOE_SUPPORTED -#define FOE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define FOE_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** MAILBOX_SUPPORTED: This switch is set automatically if at least one mailbox protocol is enabled. */ #ifndef MAILBOX_SUPPORTED -#define MAILBOX_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define MAILBOX_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** BOOTSTRAPMODE_SUPPORTED: If the firmware update over FoE services should be supported, then this switch shall be set.
If this switch is set, then also "FOE_SUPPORTED" shall be set. */ #ifndef BOOTSTRAPMODE_SUPPORTED -#define BOOTSTRAPMODE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define BOOTSTRAPMODE_SUPPORTED 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** OP_PD_REQUIRED: If this switch is reset the state transition SAFEOP_2_OP will also successful if no process data was received. The watchdog will only be active when first process data was received (bEcatFirstOutputsReceived) */ #ifndef OP_PD_REQUIRED -#define OP_PD_REQUIRED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define OP_PD_REQUIRED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -378,31 +390,31 @@ NOTE: Within the stack this value - 50ms will be used to react before the master CHECK_SM_PARAM_ALIGNMENT: If true the SyncManager length and start address will be checked according the ESC Access.
e.g. ESC_32BIT_ACCESS is set the length and address shall be to an even 4Byte address. */ #ifndef CHECK_SM_PARAM_ALIGNMENT -#define CHECK_SM_PARAM_ALIGNMENT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define CHECK_SM_PARAM_ALIGNMENT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** EXPLICIT_DEVICE_ID: If this switch is set Explicit device ID requests are handled. For further information about Explicit Device ID see ETG.1020 specification: www.ethercat.org/MemberArea/download_protocolenhancements.asp */ #ifndef EXPLICIT_DEVICE_ID -#define EXPLICIT_DEVICE_ID 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define EXPLICIT_DEVICE_ID 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** ESC_SM_WD_SUPPORTED: This switch should be set if the SyncManger watchdog provided by the ESC should be used. If reset the process data watchdog is triggered by a local timer */ #ifndef ESC_SM_WD_SUPPORTED -#define ESC_SM_WD_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define ESC_SM_WD_SUPPORTED 1 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** STATIC_OBJECT_DIC: If this switch is set, the object dictionary is "build" static (by default only PIC18 objects are added static) */ #ifndef STATIC_OBJECT_DIC -#define STATIC_OBJECT_DIC 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define STATIC_OBJECT_DIC 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** ESC_EEPROM_ACCESS_SUPPORT: If this switch is set the slave stack provides functions to access the EEPROM. */ #ifndef ESC_EEPROM_ACCESS_SUPPORT -#define ESC_EEPROM_ACCESS_SUPPORT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define ESC_EEPROM_ACCESS_SUPPORT 0 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif @@ -821,37 +833,37 @@ OBJ_WORD_ALIGN: Shall be set if the object structures are not Byte aligned and 1 #endif /** -ENTER_MBX_CRITICAL: Marco which is called when a critical mailbox section is entered */ +ENTER_MBX_CRITICAL: Macro which is called when a critical mailbox section is entered */ #ifndef ENTER_MBX_CRITICAL #define ENTER_MBX_CRITICAL #endif /** -LEAVE_MBX_CRITICAL: Marco which is called when a critical mailbox section is left */ +LEAVE_MBX_CRITICAL: Macro which is called when a critical mailbox section is left */ #ifndef LEAVE_MBX_CRITICAL #define LEAVE_MBX_CRITICAL #endif /** -ENTER_AOE_CRITICAL: Marco which is called when a critical AoE section is entered */ +ENTER_AOE_CRITICAL: Macro which is called when a critical AoE section is entered */ #ifndef ENTER_AOE_CRITICAL #define ENTER_AOE_CRITICAL #endif /** -LEAVE_AOE_CRITICAL: Marco which is called when a critical AoE section is left */ +LEAVE_AOE_CRITICAL: Macro which is called when a critical AoE section is left */ #ifndef LEAVE_AOE_CRITICAL #define LEAVE_AOE_CRITICAL #endif /** -ENTER_EMCY_CRITICAL: Marco which is called when a critical emergency section is entered */ +ENTER_EMCY_CRITICAL: Macro which is called when a critical emergency section is entered */ #ifndef ENTER_EMCY_CRITICAL #define ENTER_EMCY_CRITICAL #endif /** -LEAVE_EMCY_CRITICAL: Marco which is called when a critical emergency section is left */ +LEAVE_EMCY_CRITICAL: Macro which is called when a critical emergency section is left */ #ifndef LEAVE_EMCY_CRITICAL #define LEAVE_EMCY_CRITICAL #endif @@ -898,7 +910,7 @@ REVISION_NUMBER: Object 0x1018 SI3 (EtherCAT product revision number) */ /** SERIAL_NUMBER: Object 0x1018 SI4 (EtherCAT product serial number) */ #ifndef SERIAL_NUMBER -#define SERIAL_NUMBER 0x00001419 +#define SERIAL_NUMBER 0x00001234 #endif /** @@ -998,7 +1010,7 @@ MAX_MBX_WRITE_ADDRESS: Maximum address for the write (receive) mailbox (Sync Man /** MAX_PD_INPUT_SIZE: Maximum size of the process input data (Sync Manager 3) for cyclic exchange. */ #ifndef MAX_PD_INPUT_SIZE -#define MAX_PD_INPUT_SIZE 0x0044 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define MAX_PD_INPUT_SIZE 0x0044 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** @@ -1016,7 +1028,7 @@ MAX_MBX_READ_ADDRESS: Maximum address for the read (send) mailbox (Sync Manager /** MAX_PD_OUTPUT_SIZE: Maximum size of the process output data (Sync Manager 2) for cyclic exchange. */ #ifndef MAX_PD_OUTPUT_SIZE -#define MAX_PD_OUTPUT_SIZE 0x044 //This define was already evaluated by ET9300 Project Handler(V. 1.4.1.0)! +#define MAX_PD_OUTPUT_SIZE 0x044 //This define was already evaluated by ET9300 Project Handler(V. 1.5.3.0)! #endif /** diff --git a/ecatappl.c b/ecatappl.c index fb13e1b..b3b0322 100644 --- a/ecatappl.c +++ b/ecatappl.c @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -15,8 +16,18 @@ \brief Implementation This file contains the Process Data interface -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 CIA402 3: change define "CIA402_DEVICE" to "CiA402_SAMPLE_APPLICATION"
+V5.13 CIA402 4: decouple CIA402 state machine and application from ESM (according ETG.6010, clause 4)
+V5.13 COE4: update default entry name handling in case of 16Bit characters, add CoE Read/write indication functions
+V5.13 ECAT 5: check inputsize before calling PDO_InputMappingdo not call PDO_InputMapping in case of no available process data
+V5.13 ECAT 6: change input mapping trigger in case of DC Sync
+V5.13 ECAT1: handle Sync mapped to AL Event
+V5.13 ECAT4: set delay between EEPROM access retries to 10ms
+V5.13 EEPROM1: update eeprom reload in case of ESC 32Bit access (and the small eeprom emulation)
+V5.13 TEST6: add 0xA002 monitoring ob function calls

Changes to version V5.11:
V5.12 APPL1: add optional application function called from the main loop (after mbx and esm are executed)
V5.12 BOOT1: add a bootloader sample application (only the ESM and FoE is supported)
@@ -51,7 +62,7 @@ V5.10 ECAT13: Update Synchronisation handling (FreeRun,SM Sync, Sync0, Sync1)
V5.10 ECAT2: Prevent EEPROM data null pointer access (if the pointer is null an command error is set)
EEPROM emulation return command error if unknown command was received
-V5.10 ECAT4: Update alignment marco for 8 to 15 bit alignments (16 and 32 Bit controllers)
+V5.10 ECAT4: Update alignment macro for 8 to 15 bit alignments (16 and 32 Bit controllers)
Bugfix calculate LED blink frequency
V5.10 ECAT7: Add "bInitFinished" to indicate if the initialization is complete
V5.10 HW2: Change HW_GetTimer return value to UINT32
@@ -133,12 +144,16 @@ V4.00 APPL 6: The main function was split in MainInit and MainLoop #include "coeappl.h" +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 148 to 150 deleted*/ #define _APPL_INTERFACE_ 1 #include "applInterface.h" #undef _APPL_INTERFACE_ +/*ECATCHANGE_START(V5.13) CIA402 3*/ +/*ECATCHANGE_END(V5.13) CIA402 3*/ #include "cia402appl.h" +/*ET9300 Project Handler :(#elif EL9800_APPLICATION) lines 160 to 173 deleted*/ @@ -148,6 +163,7 @@ V4.00 APPL 6: The main function was split in MainInit and MainLoop ------ --------------------------------------------------------------------------------------*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_ACCESS_SUPPORT) lines 185 to 187 deleted*/ #ifndef ECAT_TIMER_INC_P_MS /** @@ -158,16 +174,14 @@ V4.00 APPL 6: The main function was split in MainInit and MainLoop -/*ECATCHANGE_START(V5.12) ECAT1*/ #define MEASUREMENT_ACTIVE (((sSyncManOutPar.u16GetCycleTime & 0x1) == 0x1) || ((sSyncManInPar.u16GetCycleTime & 0x1) == 0x1)) -/*ECATCHANGE_END(V5.12) ECAT1*/ +/*ET9300 Project Handler :(#elif MAX_PD_OUTPUT_SIZE > 0) lines 204 to 210 deleted*/ /*----------------------------------------------------------------------------------------- ------ ------ local variables and constants ------ -----------------------------------------------------------------------------------------*/ -/*ECATCHANGE_START(V5.12) ECAT1*/ /*variables required to calculate values for SM Synchronisation objects (0x1C3x)*/ UINT32 u32CycleTimeStartValue; /** <\brief contains the timer start value to measure the application cycle (used in freerun and SM2 sync)*/ @@ -180,15 +194,16 @@ BOOL bMinCycleTimeMeasurementStarted; /** <\brief Indicates if the min cycle mea UINT32 u32MinCycleTimeValue; /** <\brief tmp value of the min cycle time during measurement*/ -/*ECATCHANGE_END(V5.12) ECAT1*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 237 to 241 deleted*/ UINT16 aPdOutputData[(MAX_PD_OUTPUT_SIZE>>1)]; UINT16 aPdInputData[(MAX_PD_INPUT_SIZE>>1)]; /*variables are declared in ecatslv.c*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 252 to 256 deleted*/ extern VARVOLATILE UINT8 u8dummy; BOOL bInitFinished = FALSE; /** < \brief indicates if the initialization is finished*/ @@ -198,10 +213,8 @@ BOOL bInitFinished = FALSE; /** < \brief indicates if the initialization is fini ------ local functions ------ -----------------------------------------------------------------------------------------*/ -/*ECATCHANGE_START(V5.12) ECAT1*/ UINT32 GetSystemTimeDelay(UINT32 u32StartTime); void HandleCycleTimeMeasurement(void); -/*ECATCHANGE_END(V5.12) ECAT1*/ /*----------------------------------------------------------------------------------------- ------ @@ -212,21 +225,19 @@ void HandleCycleTimeMeasurement(void); /** \brief This function will copies the inputs from the local memory to the ESC memory *//////////////////////////////////////////////////////////////////////////////////////// +/*ET9300 Project Handler :(#if _PIC18 && AL_EVENT_ENABLED) lines 284 to 288 deleted*/ void PDO_InputMapping(void) { #if ((MIN_PD_CYCLE_TIME == 0) || (PD_INPUT_CALC_AND_COPY_TIME == 0)) - /*ECATCHANGE_START(V5.12) ECAT1*/ UINT32 u32TimeValue = 0; UINT16 ALEvent = HW_GetALEventRegister_Isr(); ALEvent = SWAPWORD(ALEvent); - if (MEASUREMENT_ACTIVE) { u32TimeValue = GetSystemTimeDelay(0); } - /*ECATCHANGE_END(V5.12) ECAT1*/ #endif /* ((MIN_PD_CYCLE_TIME == 0) || (PD_INPUT_CALC_AND_COPY_TIME == 0)) */ @@ -241,7 +252,6 @@ void PDO_InputMapping(void) #if ((MIN_PD_CYCLE_TIME == 0) || (PD_INPUT_CALC_AND_COPY_TIME == 0)) - /*ECATCHANGE_START(V5.12) ECAT1*/ if (MEASUREMENT_ACTIVE) { @@ -278,7 +288,6 @@ void PDO_InputMapping(void) #endif /* (MIN_PD_CYCLE_TIME == 0) */ } - /*ECATCHANGE_END(V5.12) ECAT1*/ #endif /* ((MIN_PD_CYCLE_TIME == 0) || (PD_INPUT_CALC_AND_COPY_TIME == 0)) */ } @@ -287,9 +296,9 @@ void PDO_InputMapping(void) \brief This function will copies the outputs from the ESC memory to the local memory. This function is only called in case of an SM2 (output process data) event. *//////////////////////////////////////////////////////////////////////////////////////// +/*ET9300 Project Handler :(#if _PIC18 && AL_EVENT_ENABLED) lines 371 to 375 deleted*/ void PDO_OutputMapping(void) { -/*ECATCHANGE_START(V5.12) ECAT1*/ UINT32 u32TimeValue = 0; if (MEASUREMENT_ACTIVE) { @@ -305,13 +314,11 @@ void PDO_OutputMapping(void) HandleCycleTimeMeasurement(); } -/*ECATCHANGE_END(V5.12) ECAT1*/ HW_EscReadIsr(((MEM_ADDR *)aPdOutputData), nEscAddrOutputData, nPdOutputSize ); APPL_OutputMapping((UINT16*) aPdOutputData); -/*ECATCHANGE_START(V5.12) ECAT1*/ #if ((MIN_PD_CYCLE_TIME == 0) || (PD_OUTPUT_CALC_AND_COPY_TIME == 0)) if (MEASUREMENT_ACTIVE) { @@ -330,7 +337,6 @@ void PDO_OutputMapping(void) #endif } #endif /* #if ((MIN_PD_CYCLE_TIME == 0) || (PD_OUTPUT_CALC_AND_COPY_TIME == 0)) */ -/*ECATCHANGE_END(V5.12) ECAT1*/ } ///////////////////////////////////////////////////////////////////////////////////////// @@ -350,16 +356,19 @@ void ECAT_CheckTimer(void) EsmTimeoutCounter--; } +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 444 to 449 deleted*/ ECAT_SetLedIndication(); DC_CheckWatchdog(); +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 459 to 478 deleted*/ -/*ECATCHANGE_START(V5.12) COE4*/ +/*ECATCHANGE_START(V5.13) */ /* Increment the counter every ms between two updates based on the system time (32Bit overrun is handled in COE_SyncTimeStamp) */ - if (!b32BitDc || ((u64Timestamp & 0xFFFFFFFF) <= 4293000000)) + if (!b32BitDc || ((u64Timestamp & 0xFFFFFFFF) <= 4293000000UL)) +/*ECATCHANGE_END(V5.13) */ { /* the timestamp is stored in ns */ @@ -373,10 +382,11 @@ void ECAT_CheckTimer(void) } u32CheckForDcOverrunCnt++; -/*ECATCHANGE_END(V5.12) COE4*/ + + +/*ET9300 Project Handler :(#if TEST_APPLICATION && COE_SUPPORTED) lines 508 to 512 deleted*/ } -/*ECATCHANGE_START(V5.12) ECAT1*/ ///////////////////////////////////////////////////////////////////////////////////////// /** \brief In case of non DC synchronization the cycle time measurement is started and 0x1C3.2 (Cycle time) is updated @@ -453,16 +463,33 @@ UINT32 GetSystemTimeDelay(UINT32 u32StartTime) } return u32Delta; } -/*ECATCHANGE_END(V5.12) ECAT1*/ +/*ECATCHANGE_START(V5.13) ECAT1*/ +/*ECATCHANGE_END(V5.13) ECAT1*/ +/*ET9300 Project Handler :(#if _PIC18) lines 603 to 607 deleted*/ void PDI_Isr(void) { + /*ECATCHANGE_START(V5.13) ECAT1*/ + BOOL SyncAcknowledgePending = FALSE; + + /* get the AL event register */ + UINT16 ALEvent = HW_GetALEventRegister_Isr(); + ALEvent = SWAPWORD(ALEvent); + + + /* Check if Sync1 Isr has to be called */ + + if (ALEvent & SYNC1_EVENT) + { + Sync1_Isr(); + + SyncAcknowledgePending = TRUE; + } + /*ECATCHANGE_END(V5.13) ECAT1*/ + + if(bEscIntEnabled) { - /* get the AL event register */ - UINT16 ALEvent = HW_GetALEventRegister_Isr(); - ALEvent = SWAPWORD(ALEvent); - if ( ALEvent & PROCESS_OUTPUT_EVENT ) { if(bDcRunning && bDcSyncActive) @@ -475,15 +502,15 @@ void PDI_Isr(void) sSyncManOutPar.u16SmEventMissedCounter--; } -/*ECATCHANGE_START(V5.12) ECAT5*/ sSyncManInPar.u16SmEventMissedCounter = sSyncManOutPar.u16SmEventMissedCounter; -/*ECATCHANGE_END(V5.12) ECAT5*/ +/*ET9300 Project Handler :(#if COE_SUPPORTED #else) lines 654 to 659 deleted*/ /* Outputs were updated, set flag for watchdog monitoring */ bEcatFirstOutputsReceived = TRUE; +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 666 to 669 deleted*/ /* handle output process data event @@ -496,10 +523,12 @@ void PDI_Isr(void) else { /* Just acknowledge the process data event in the INIT,PreOP and SafeOP state */ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 682 to 688 deleted*/ HW_EscReadByteIsr(u8dummy,nEscAddrOutputData); HW_EscReadByteIsr(u8dummy,(nEscAddrOutputData+nPdOutputSize-1)); } } +/*ET9300 Project Handler :(#elif MAX_PD_INPUT_SIZE > 0) lines 694 to 718 deleted*/ /* Call ECAT_Application() in SM Sync mode @@ -509,9 +538,14 @@ void PDI_Isr(void) /* The Application is synchronized to process data Sync Manager event*/ ECAT_Application(); } +/*ET9300 Project Handler :(#elif MAX_PD_INPUT_SIZE > 0) lines 730 to 736 deleted*/ +/*ET9300 Project Handler :(#if COE_SUPPORTED #else) lines 737 to 744 deleted*/ - if ( bEcatInputUpdateRunning +/*ECATCHANGE_START(V5.13) ECAT 5*/ + if ( (bEcatInputUpdateRunning == TRUE) && (nPdInputSize > 0) +/*ECATCHANGE_END(V5.13) ECAT 5*/ && ((sSyncManInPar.u16SyncType == SYNCTYPE_SM_SYNCHRON) || (sSyncManInPar.u16SyncType == SYNCTYPE_SM2_SYNCHRON)) +/*ET9300 Project Handler :(#if COE_SUPPORTED #else) lines 752 to 754 deleted*/ ) { /* EtherCAT slave is at least in SAFE-OPERATIONAL, update inputs */ @@ -531,14 +565,31 @@ void PDI_Isr(void) sSyncManInPar.u16CycleExceededCounter = sSyncManOutPar.u16CycleExceededCounter; /* Acknowledge the process data event*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 780 to 786 deleted*/ HW_EscReadByteIsr(u8dummy,nEscAddrOutputData); HW_EscReadByteIsr(u8dummy,(nEscAddrOutputData+nPdOutputSize-1)); } +/*ET9300 Project Handler :(#elif MAX_PD_INPUT_SIZE > 0) lines 791 to 811 deleted*/ } //if(bEscIntEnabled) -/*ECATCHANGE_START(V5.12) ECAT5*/ + /*ECATCHANGE_START(V5.13) ECAT1*/ + if (ALEvent & SYNC0_EVENT) + { + Sync0_Isr(); + + SyncAcknowledgePending = TRUE; + } + + /* Read Sync0/1 Status Register to acknowledge the event bit in the AL Event register */ + if (SyncAcknowledgePending) + { + volatile UINT32 SyncState = 0; + HW_EscReadDWord(SyncState, ESC_DC_SYNC_STATUS); + + } + /*ECATCHANGE_END(V5.13) ECAT1*/ + COE_UpdateSyncErrorStatus(); -/*ECATCHANGE_END(V5.12) ECAT5*/ } @@ -548,11 +599,25 @@ void Sync0_Isr(void) if(bDcSyncActive) { +/*ECATCHANGE_START(V5.13) ECAT 6*/ + BOOL bCallInputMapping = FALSE; +/*ECATCHANGE_END(V5.13) ECAT 6*/ +/*ET9300 Project Handler :(#if !AL_EVENT_ENABLED) lines 853 to 896 deleted*/ - if ( bEcatInputUpdateRunning ) +/*ECATCHANGE_START(V5.13) ECAT 6*/ + if ((bEcatInputUpdateRunning == TRUE) && (LatchInputSync0Value > 0) && (nPdInputSize > 0)) { - LatchInputSync0Counter++; + if(LatchInputSync0Value > LatchInputSync0Counter) /* Inputs shall be latched on a specific Sync0 event */ + { + LatchInputSync0Counter++; + } + + if (LatchInputSync0Value == LatchInputSync0Counter) + { + bCallInputMapping = TRUE; + } } +/*ECATCHANGE_END(V5.13) ECAT 6*/ if(u16SmSync0Value > 0) { @@ -564,11 +629,12 @@ void Sync0_Isr(void) sSyncManOutPar.u16SmEventMissedCounter = sSyncManOutPar.u16SmEventMissedCounter + 3; } - if ((nPdInputSize > 0) && (nPdOutputSize == 0) && (sSyncManInPar.u16SmEventMissedCounter <= sErrorSettings.u16SyncErrorCounterLimit)) - { - sSyncManInPar.u16SmEventMissedCounter = sSyncManInPar.u16SmEventMissedCounter + 3; - } + if ((nPdInputSize > 0) && (nPdOutputSize == 0) && (sSyncManInPar.u16SmEventMissedCounter <= sErrorSettings.u16SyncErrorCounterLimit)) + { + sSyncManInPar.u16SmEventMissedCounter = sSyncManInPar.u16SmEventMissedCounter + 3; + } +/*ET9300 Project Handler :(#if COE_SUPPORTED #else) lines 937 to 942 deleted*/ } // if (u16SmSync0Counter > u16SmSync0Value) @@ -593,6 +659,7 @@ void Sync0_Isr(void) u16SmSync0Counter = 0; sSyncManInPar.u16SmEventMissedCounter = 0; +/*ET9300 Project Handler :(#if COE_SUPPORTED #else) lines 970 to 972 deleted*/ } } @@ -607,8 +674,8 @@ void Sync0_Isr(void) /* Application is synchronized to SYNC0 event*/ ECAT_Application(); - if ( bEcatInputUpdateRunning - && (LatchInputSync0Value > 0) && (LatchInputSync0Value == LatchInputSync0Counter) ) /* Inputs shall be latched on a specific Sync0 event */ +/*ECATCHANGE_START(V5.13) ECAT 6*/ + if (bCallInputMapping == TRUE) { /* EtherCAT slave is at least in SAFE-OPERATIONAL, update inputs */ PDO_InputMapping(); @@ -619,12 +686,11 @@ void Sync0_Isr(void) LatchInputSync0Counter = 0; } } +/*ECATCHANGE_END(V5.13) ECAT 6*/ } -/*ECATCHANGE_START(V5.12) ECAT5*/ COE_UpdateSyncErrorStatus(); -/*ECATCHANGE_END(V5.12) ECAT5*/ } @@ -632,7 +698,9 @@ void Sync1_Isr(void) { Sync1WdCounter = 0; - if ( bEcatInputUpdateRunning + /*ECATCHANGE_START(V5.13) ECAT 5*/ + if ( (bEcatInputUpdateRunning == TRUE) && (nPdInputSize > 0) +/*ECATCHANGE_END(V5.13) ECAT 5*/ && (sSyncManInPar.u16SyncType == SYNCTYPE_DCSYNC1) && (LatchInputSync0Value == 0)) /* Inputs are latched on Sync1 (LatchInputSync0Value == 0), if LatchInputSync0Value > 0 inputs are latched with Sync0 */ { @@ -846,25 +914,36 @@ UINT16 MainInit(void) #endif -/*ECATCHANGE_START(V5.12) ECAT8*/ /* Reset application function pointer*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 1240 to 1245 deleted*/ +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 1248 to 1251 deleted*/ + pAPPL_FoeRead = NULL; + pAPPL_FoeReadData = NULL; + pAPPL_FoeError = NULL; + pAPPL_FoeWrite = NULL; + pAPPL_FoeWriteData = NULL; + + /* ECATCHANGE_START(V5.13) COE4*/ + pAPPL_CoeReadInd = NULL; + pAPPL_CoeWriteInd = NULL; + /* ECATCHANGE_END(V5.13) COE4*/ pAPPL_MainLoop = NULL; -/*ECATCHANGE_END(V5.12) ECAT8*/ /* initialize the EtherCAT Slave Interface */ ECAT_Init(); /* initialize the objects */ COE_ObjInit(); +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1277 to 1280 deleted*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_ACCESS_SUPPORT) lines 1282 to 1315 deleted*/ /*indicate that the slave stack initialization finished*/ bInitFinished = TRUE; -/*ECATCHANGE_START(V5.12) ECAT1*/ bMinCycleTimeMeasurementStarted = FALSE; u32CycleTimeStartValue = 0; @@ -885,7 +964,7 @@ UINT16 MainInit(void) if (u32TimeValue <= u32Delta) { - u32Delta = u32Delta - u32TimeValue; + u32Delta = u32Delta - u32TimeValue; } else { @@ -909,8 +988,8 @@ UINT16 MainInit(void) } - /*ECATCHANGE_END(V5.12) ECAT1*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 1368 to 1391 deleted*/ /*Application Init need to be called from the application layer*/ return Error; @@ -933,16 +1012,19 @@ void MainLoop(void) return; } + + /* FreeRun-Mode: bEscIntEnabled = FALSE, bDcSyncActive = FALSE Synchron-Mode: bEscIntEnabled = TRUE, bDcSyncActive = FALSE DC-Mode: bEscIntEnabled = TRUE, bDcSyncActive = TRUE */ if ( (!bEscIntEnabled || !bEcatFirstOutputsReceived) /* SM-Synchronous, but not SM-event received */ +/*ET9300 Project Handler :(#if MAX_PD_OUTPUT_SIZE > 0 #else) lines 1422 to 1424 deleted*/ && !bDcSyncActive /* DC-Synchronous */ ) { /* if the application is running in ECAT Synchron Mode the function ECAT_Application is called - from the ESC interrupt routine (in mcihw.c or spihw.c), + from the ESC interrupt routine, in ECAT Synchron Mode it should be additionally checked, if the SM-event is received at least once (bEcatFirstOutputsReceived = 1), otherwise no interrupt is generated and the function ECAT_Application has to be called here (with interrupts disabled, @@ -958,6 +1040,7 @@ void MainLoop(void) { /* set the flag for the state machine behavior */ bEcatFirstOutputsReceived = TRUE; +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 1448 to 1451 deleted*/ if ( bEcatOutputUpdateRunning ) { /* update the outputs */ @@ -971,23 +1054,22 @@ void MainLoop(void) { /* Outputs were updated, set flag for watchdog monitoring */ bEcatFirstOutputsReceived = TRUE; +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 1466 to 1469 deleted*/ } } } -/*ECATCHANGE_START(V5.12) ECAT3*/ DISABLE_ESC_INT(); -/*ECATCHANGE_END(V5.12) ECAT3*/ ECAT_Application(); - if ( bEcatInputUpdateRunning ) - { +/*ECATCHANGE_START(V5.13) ECAT 5*/ + if ( (bEcatInputUpdateRunning == TRUE) && (nPdInputSize > 0)) +/*ECATCHANGE_END(V5.13) ECAT 5*/ + { /* EtherCAT slave is at least in SAFE-OPERATIONAL, update inputs */ PDO_InputMapping(); } -/*ECATCHANGE_START(V5.12) ECAT3*/ ENABLE_ESC_INT(); -/*ECATCHANGE_END(V5.12) ECAT3*/ } /* there is no interrupt routine for the hardware timer so check the timer register if the desired cycle elapsed*/ @@ -1002,12 +1084,10 @@ void MainLoop(void) } } -/*ECATCHANGE_START(V5.12) COE4*/ if (u32CheckForDcOverrunCnt >= CHECK_DC_OVERRUN_IN_MS) { COE_SyncTimeStamp(); } -/*ECATCHANGE_END(V5.12) COE4*/ /* call EtherCAT functions */ ECAT_Main(); @@ -1016,17 +1096,15 @@ void MainLoop(void) COE_Main(); CheckIfEcatError(); - if(bEcatInputUpdateRunning) - { + /*ECATCHANGE_START(V5.13) CIA402 4*/ + /*decouple CIA402 state machine from ESM*/ + /*ECATCHANGE_END(V5.13) CIA402 4*/ CiA402_StateMachine(); - } -/*ECATCHANGE_START(V5.12) APPL1*/ if (pAPPL_MainLoop != NULL) { pAPPL_MainLoop(); } -/*ECATCHANGE_END(V5.12) APPL1*/ } /*The main function was moved to the application files.*/ @@ -1035,12 +1113,13 @@ void MainLoop(void) \brief ECAT_Application (prev. SSC versions "COE_Application") this function calculates and the physical process signals and triggers the input mapping *//////////////////////////////////////////////////////////////////////////////////////// +/*ET9300 Project Handler :(#if _PIC18 && AL_EVENT_ENABLED) lines 1546 to 1550 deleted*/ void ECAT_Application(void) { #if (MIN_PD_CYCLE_TIME == 0) - /*ECATCHANGE_START(V5.12) ECAT1*/ UINT32 u32TimeValue = 0; + if (MEASUREMENT_ACTIVE) { u32TimeValue = GetSystemTimeDelay(0); @@ -1054,7 +1133,6 @@ void ECAT_Application(void) u32MinCycleTimeValue = 0; } } /* measurement started*/ -/*ECATCHANGE_END(V5.12) ECAT1*/ #endif /* (MIN_PD_CYCLE_TIME == 0)*/ if (MEASUREMENT_ACTIVE) @@ -1066,17 +1144,15 @@ void ECAT_Application(void) } } - /*Axis configuration is written in state change from PREOP to SAFEOP - => trigger CiA402 Application if device is in SAFEOP or OP - (Motion Controller function is only triggered if DC Synchronisation is active and valid mode of operation is set)*/ - if(bEcatInputUpdateRunning) - { - APPL_Application(); - } + + /*ECATCHANGE_START(V5.13) CIA402 4*/ + /*decouple CIA402 application from ESM*/ + /*ECATCHANGE_END(V5.13) CIA402 4*/ + APPL_Application(); + /* PDO Input mapping is called from the specific trigger ISR */ #if (MIN_PD_CYCLE_TIME == 0) -/*ECATCHANGE_START(V5.12) ECAT1*/ if (MEASUREMENT_ACTIVE) { @@ -1110,11 +1186,12 @@ void ECAT_Application(void) } }/* measurement started*/ -/*ECATCHANGE_END(V5.12) ECAT1*/ #endif /* #if MIN_PD_CYCLE_TIME == 0 */ } +/*ET9300 Project Handler :(#if ESC_EEPROM_ACCESS_SUPPORT) lines 1644 to 2002 deleted*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 2004 to 2224 deleted*/ /** @} */ diff --git a/ecatappl.h b/ecatappl.h index 5013dc0..6469783 100644 --- a/ecatappl.h +++ b/ecatappl.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -22,7 +23,7 @@ V5.11 ECAT10: change PROTO handling to prevent compiler errors
V5.10 ECAT13: Update Synchronisation handling (FreeRun,SM Sync, Sync0, Sync1)
Compare DC UINT configuration (by ESC Config data) vs. DC activation register settings
Update 0x1C3x entries
-V5.10 ECAT4: Update alignment marco for 8 to 15 bit alignments (16 and 32 Bit controllers)
+V5.10 ECAT4: Update alignment macro for 8 to 15 bit alignments (16 and 32 Bit controllers)
Bugfix calculate LED blink frequency

Changes to version - :
V5.01 : Start file change log @@ -55,31 +56,33 @@ V5.01 : Start file change log ------ -----------------------------------------------------------------------------------------*/ -#define BOOLEAN(x) UINT8(x):1 /**< \brief Marco to define BOOLEAN object entry*/ -#define BIT1(x) UINT8(x):1 /**< \brief Marco to define BIT1 object entry*/ -#define BIT2(x) UINT8(x):2 /**< \brief Marco to define BIT2 object entry*/ -#define BIT3(x) UINT8(x):3 /**< \brief Marco to define BIT3 object entry*/ -#define BIT4(x) UINT8(x):4 /**< \brief Marco to define BIT4 object entry*/ -#define BIT5(x) UINT8(x):5 /**< \brief Marco to define BIT5 object entry*/ -#define BIT6(x) UINT8(x):6 /**< \brief Marco to define BIT5 object entry*/ -#define BIT7(x) UINT8(x):7 /**< \brief Marco to define BIT6 object entry*/ -#define BIT8(x) UINT8(x):8 /**< \brief Marco to define BIT7 object entry*/ +/*ET9300 Project Handler :(#if CONTROLLER_16BIT || CONTROLLER_32BIT) lines 58 to 85 deleted*/ +#define BOOLEAN(x) UINT8 x:1 /**< \brief Macro to define BOOLEAN object entry*/ +#define BIT1(x) UINT8 x:1 /**< \brief Macro to define BIT1 object entry*/ +#define BIT2(x) UINT8 x:2 /**< \brief Macro to define BIT2 object entry*/ +#define BIT3(x) UINT8 x:3 /**< \brief Macro to define BIT3 object entry*/ +#define BIT4(x) UINT8 x:4 /**< \brief Macro to define BIT4 object entry*/ +#define BIT5(x) UINT8 x:5 /**< \brief Macro to define BIT5 object entry*/ +#define BIT6(x) UINT8 x:6 /**< \brief Macro to define BIT5 object entry*/ +#define BIT7(x) UINT8 x:7 /**< \brief Macro to define BIT6 object entry*/ +#define BIT8(x) UINT8 x:8 /**< \brief Macro to define BIT7 object entry*/ #define ALIGN0(x) -#define ALIGN1(x) UINT8(x):1; /**< \brief Marco to define ALIGN1 object entry*/ -#define ALIGN2(x) UINT8(x):2; /**< \brief Marco to define ALIGN2 object entry*/ -#define ALIGN3(x) UINT8(x):3; /**< \brief Marco to define ALIGN3 object entry*/ -#define ALIGN4(x) UINT8(x):4; /**< \brief Marco to define ALIGN4 object entry*/ -#define ALIGN5(x) UINT8(x):5; /**< \brief Marco to define ALIGN5 object entry*/ -#define ALIGN6(x) UINT8(x):6; /**< \brief Marco to define ALIGN6 object entry*/ -#define ALIGN7(x) UINT8(x):7; /**< \brief Marco to define ALIGN7 object entry*/ -#define ALIGN8(x) UINT8(x):8; /**< \brief Marco to define ALIGN8 object entry*/ -#define ALIGN9(x) UINT16(x):9; /**< \brief Marco to define ALIGN9 object entry*/ -#define ALIGN10(x) UINT16(x):10; /**< \brief Marco to define ALIGN10 object entry*/ -#define ALIGN11(x) UINT16(x):11; /**< \brief Marco to define ALIGN11 object entry*/ -#define ALIGN12(x) UINT16(x):12; /**< \brief Marco to define ALIGN12 object entry*/ -#define ALIGN13(x) UINT16(x):13; /**< \brief Marco to define ALIGN13 object entry*/ -#define ALIGN14(x) UINT16(x):14; /**< \brief Marco to define ALIGN14 object entry*/ -#define ALIGN15(x) UINT16(x):15; /**< \brief Marco to define ALIGN15 object entry*/ +#define ALIGN1(x) UINT8 x:1; /**< \brief Macro to define ALIGN1 object entry*/ +#define ALIGN2(x) UINT8 x:2; /**< \brief Macro to define ALIGN2 object entry*/ +#define ALIGN3(x) UINT8 x:3; /**< \brief Macro to define ALIGN3 object entry*/ +#define ALIGN4(x) UINT8 x:4; /**< \brief Macro to define ALIGN4 object entry*/ +#define ALIGN5(x) UINT8 x:5; /**< \brief Macro to define ALIGN5 object entry*/ +#define ALIGN6(x) UINT8 x:6; /**< \brief Macro to define ALIGN6 object entry*/ +#define ALIGN7(x) UINT8 x:7; /**< \brief Macro to define ALIGN7 object entry*/ +#define ALIGN8(x) UINT8 x:8; /**< \brief Macro to define ALIGN8 object entry*/ +/*ET9300 Project Handler :(#if _PIC18) lines 104 to 112 deleted*/ +#define ALIGN9(x) UINT16 x:9; /**< \brief Macro to define ALIGN9 object entry*/ +#define ALIGN10(x) UINT16 x:10; /**< \brief Macro to define ALIGN10 object entry*/ +#define ALIGN11(x) UINT16 x:11; /**< \brief Macro to define ALIGN11 object entry*/ +#define ALIGN12(x) UINT16 x:12; /**< \brief Macro to define ALIGN12 object entry*/ +#define ALIGN13(x) UINT16 x:13; /**< \brief Macro to define ALIGN13 object entry*/ +#define ALIGN14(x) UINT16 x:14; /**< \brief Macro to define ALIGN14 object entry*/ +#define ALIGN15(x) UINT16 x:15; /**< \brief Macro to define ALIGN15 object entry*/ #endif //_ECATAPPL_H_ #if defined(_ECATAPPL_) && (_ECATAPPL_ == 1) @@ -96,6 +99,7 @@ V5.01 : Start file change log -----------------------------------------------------------------------------------------*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 138 to 140 deleted*/ PROTO BOOL bEcatWaitForInputUpdate; /**< \brief Wait for input update*/ PROTO BOOL bEtherCATRunLed; /**< \brief Current run LED value*/ @@ -104,6 +108,7 @@ PROTO BOOL bRunApplication; /**< \brief Indicates if the stack shall be running +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 149 to 151 deleted*/ /*----------------------------------------------------------------------------------------- ------ ------ Global Functions @@ -124,7 +129,9 @@ PROTO void PDO_InputMapping(void); PROTO void ECAT_SetLedIndication(void); PROTO void CalcSMCycleTime(void); +/*ET9300 Project Handler :(#if ESC_EEPROM_ACCESS_SUPPORT) lines 178 to 181 deleted*/ +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 183 to 185 deleted*/ diff --git a/ecatcoe.c b/ecatcoe.c index cc35981..29753cc 100644 --- a/ecatcoe.c +++ b/ecatcoe.c @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -14,8 +15,11 @@ \brief Implementation This file contains the CoE mailbox interface -\version 5.11 +\version 5.13 +
Changes to version V5.11:
+V5.13 COE8: handle failure on continue indication
+V5.13 TEST4: memory leak on SDO response receive

Changes to version V5.0:
V5.11 COE4: "change prototype of ""COE_ContinueInd()"" return <> 0 if a failure occurred"
V5.11 ECAT10: change PROTO handling to prevent compiler errors
@@ -45,6 +49,7 @@ V4.08 MBX 1: If the switch MAILBOX_QUEUE was set, we have to put all SDO Info Re /*remove definition of _ECATCOE_ (#ifdef is used in ecatcoe.h)*/ +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 52 to 60 deleted*/ /*--------------------------------------------------------------------------------------- @@ -83,7 +88,7 @@ V4.08 MBX 1: If the switch MAILBOX_QUEUE was set, we have to put all SDO Info Re void COE_Init(void) { pCoeSendStored = 0; - nSdoInfoFragmentsLeft = 0; +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 99 to 101 deleted*/ } ///////////////////////////////////////////////////////////////////////////////////////// @@ -107,6 +112,7 @@ UINT8 COE_ServiceInd(TCOEMBX MBXMEM *pCoeMbx) /* SDO-Request received, call SDOS_SdoInd to process the SDO-Request if an existing SDO-Stack shall be used, the corresponding function should be called */ +/*ET9300 Project Handler :(#if TEST_APPLICATION && EMERGENCY_SUPPORTED) lines 125 to 152 deleted*/ result = SDOS_SdoInd( (TINITSDOMBX MBXMEM *) pCoeMbx ); break; @@ -118,6 +124,7 @@ UINT8 COE_ServiceInd(TCOEMBX MBXMEM *pCoeMbx) case COESERVICE_SDORESPONSE: +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 164 to 178 deleted*/ case COESERVICE_EMERGENCY: case COESERVICE_TXPDO: case COESERVICE_RXPDO: @@ -149,8 +156,12 @@ UINT8 COE_ContinueInd(TMBX MBXMEM * pMbx) if (pCoeSendStored) { /* send the stored CoE service which could not be sent before */ - MBX_MailboxSendReq(pCoeSendStored, 0); - pCoeSendStored = 0; +/*ECATCHANGE_START(V5.13) COE8*/ + if (MBX_MailboxSendReq(pCoeSendStored, COE_SERVICE) == 0) + { + pCoeSendStored = 0; + } +/*ECATCHANGE_END(V5.13) COE8*/ } else { diff --git a/ecatcoe.h b/ecatcoe.h index 0c5a3f0..3cf31a7 100644 --- a/ecatcoe.h +++ b/ecatcoe.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -61,6 +62,7 @@ V5.01 : Start file change log /*--------------------------------------------- - COE Structures -----------------------------------------------*/ +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 64 to 67 deleted*/ #define COEHEADER_COESERVICESHIFT 12 /**< \brief CoE service shift (within CoE header)*/ #define COEHEADER_COESERVICEMASK 0xF000 /**< \brief CoE service mask (within CoE header)*/ diff --git a/ecatfoe.c b/ecatfoe.c new file mode 100644 index 0000000..be5f71e --- /dev/null +++ b/ecatfoe.c @@ -0,0 +1,395 @@ +/* +* This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. +* The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf +*/ + +/** +\addtogroup FoE FileTransfer over EtherCAT +@{ +*/ + +/** +\file ecatfoe.c +\author EthercatSSC@beckhoff.com +\brief Implementation +This file contains the FoE mailbox interface + +\version 5.13 + +
Changes to version V5.12:
+V5.13 EOE1:
+V5.13 FOE1: handle failure on continue indication
+
Changes to version V5.11:
+V5.12 FOE2: handle 16bit only access
+V5.12 MBX4: in case of a disable mailbox queue and two consecutive foe uploads the mailbox receive handler is blocked
+
Changes to version V5.10:
+V5.11 FOE1: handle busy on a read request, change OPMode to OPCode (same terms as in the spec)
+
Changes to version V5.0:
+V5.10 MBX1: Remove multiple swapping of length filed in mailbox header
+
Changes to version V4.40:
+V5.0 FOE1: Free memory if FoE_ServciceInd() is left.
+V5.0 FOE2: Update error code (Bit 15 shall not be set).
+V5.0 FOE3: Update byte swapping for big endian and big endian 16 configurations.
+V5.0 FOE4: Update Error text handling for 16Bit operations.
+
Changes to version V4.11:
+V4.40 FOE1: correct FoE busy values
+V4.40 MBX2: HW_CopyToSendMailbox merge to a generic function (new: MBX_CopyToSendMailbox)
+
Changes to version V4.10:
+V4.11 FOE 1 fixed a problem with a huge FOE_MADATA define
+V4.11 FOE 2 u16PacketNo is now a 32bit variable (u32PacketNo) to conform with the spec
+
Changes to version V4.00:
+V4.10 FOE 1-3 when downloading the firmware the FoE state machine was not set to FOE_READY
+ when the last data segment was downloaded so that the next FoE service failed
+
Changes to version V3.20:
+V4.00 FOE 1 - if a FoE Error service is received it should not be acknowledged
+V4.00 FOE 2 - if a FoE service response could not be sent because the mailbox is full
+ it has to be re-transmit otherwise the response get lost
+ +*/ + +/*----------------------------------------------------------------------------------------- +------ +------ Includes +------ +-----------------------------------------------------------------------------------------*/ + +#include "ecat_def.h" + + + +#include "ecatslv.h" + +#define _ECATFOE_ 1 +#include "ecatfoe.h" +#undef _ECATFOE_ +#define _ECATFOE_ 0 + +#include "foeappl.h" +/*----------------------------------------------------------------------------------------- +------ +------ functions +------ +-----------------------------------------------------------------------------------------*/ + +///////////////////////////////////////////////////////////////////////////////////////// +/** + + \brief This function initialize the FoE Interface. +*//////////////////////////////////////////////////////////////////////////////////////// + +void FOE_Init(void) +{ + /* no file transmission sequence is running */ + u16FileAccessState = FOE_READY; + /* initialize the expected packet number */ + u32PacketNo = 0; + pFoeSendStored = NULL; +} + + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \param pFoeInd Pointer to the received mailbox data from the master. + + \return result of the operation (0 (success) or mailbox error code (MBXERR_.... defined in + mailbox.h)) + + \brief This function is called when a FoE (File Access over EtherCAT) service is received from + the master. +*//////////////////////////////////////////////////////////////////////////////////////// + +UINT8 FOE_ServiceInd(TFOEMBX MBXMEM * pFoeInd) +{ + /* initialize the result of the service checking */ + UINT16 nextState = ECAT_FOE_ERRCODE_ILLEGAL; + /* dataSize contains the size of the file data */ + UINT16 dataSize = SWAPWORD(pFoeInd->MbxHeader.Length) - FOE_HEADER_SIZE; + + + /* it has to be checked if the mailbox protocol is correct, the sent mailbox data length has to + great enough for the service header of the FoE service */ + if ( SWAPWORD(pFoeInd->MbxHeader.Length) < FOE_HEADER_SIZE ) + { + return MBXERR_SIZETOOSHORT; + } + + switch ( SWAPWORD(pFoeInd->FoeHeader.OpCode) ) + { + case ECAT_FOE_OPCODE_RRQ: + /* file read is requested */ + if ( u16FileAccessState == FOE_READY ) + { + UINT32 u32Password = SWAPDWORD((((UINT32)pFoeInd->FoeHeader.Cmd.Password[FOE_COMMAND_LOWWORD]) | ((UINT32)pFoeInd->FoeHeader.Cmd.Password[FOE_COMMAND_HIGHWORD]) << 16)); + /* last FoE sequence was finished, call application function */ + nextState = FOE_Read((UINT16 MBXMEM *)pFoeInd->Data, dataSize, (UINT16*)pFoeInd->Data, u32Password); + + /* u32LastFileOffset contains the offset of the file which is sent now */ + u32LastFileOffset = 0; + + if (nextState <= FOE_MAXDATA) + { + /* the first data packet shall be sent */ + u32PacketNo = 1; + /* u32FileOffset contains the offset of the file which shall be sent when the next FoE ACK is received */ + u32FileOffset = nextState; + } + else if (nextState <= FOE_MAXBUSY) + { + u32PacketNo = 0; + u32FileOffset = 0; + u16FileAccessState = FOE_WAIT_FOR_ACK; + } + } + break; + + case ECAT_FOE_OPCODE_WRQ: + /* file write is requested */ + if ( u16FileAccessState == FOE_READY ) + { + UINT32 u32Password = SWAPDWORD((((UINT32)pFoeInd->FoeHeader.Cmd.Password[FOE_COMMAND_LOWWORD]) | ((UINT32)pFoeInd->FoeHeader.Cmd.Password[FOE_COMMAND_HIGHWORD]) << 16)); + /* last FoE sequence was finished, call application function */ + nextState = FOE_Write((UINT16 MBXMEM *)pFoeInd->Data, dataSize, u32Password); + if ( nextState == 0 ) + { + /* checking was successful, sent a FoE Ack service */ + nextState = FOE_ACK; + } + /* initialize the packet number */ + u32PacketNo = 0; + } + break; + + case ECAT_FOE_OPCODE_DATA: + /* file data is received */ + if ( u16FileAccessState == FOE_WAIT_FOR_DATA + || u16FileAccessState == FOE_WAIT_FOR_LAST_DATA ) + { + UINT32 u32CmdPacketNo = SWAPDWORD((((UINT32)pFoeInd->FoeHeader.Cmd.PacketNo[FOE_COMMAND_LOWWORD]) | ((UINT32)pFoeInd->FoeHeader.Cmd.PacketNo[FOE_COMMAND_HIGHWORD]) << 16)); + +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 170 to 172 deleted*/ + /* we are waiting for file data, service is correct */ + if ( u32CmdPacketNo == u32PacketNo ) + { + /* the packet number is correct, call application function to store the file data */ + nextState = FOE_Data((UINT16 MBXMEM *)pFoeInd->Data, dataSize); + if ( nextState == 0 ) + { + /* checking was successful, sent a FoE Ack service */ + nextState = FOE_ACK; + } + } + else + { + nextState = ECAT_FOE_ERRCODE_PACKENO; + } + } + break; + + case ECAT_FOE_OPCODE_ACK: + /* acknowledge is received, next file part can be sent */ + if ( u16FileAccessState == FOE_WAIT_FOR_ACK ) + { + /* we are waiting for an acknowledge, service is correct, call the application function + to get the next part of the file */ + nextState = FOE_Ack( u32FileOffset, (UINT16 MBXMEM *)pFoeInd->Data ); + /* u32LastFileOffset contains the offset of the file which is sent now */ + u32LastFileOffset = u32FileOffset; + + if (nextState <= FOE_MAXDATA) + { + /* u32FileOffset contains the offset of the file which shall be sent when the next FoE ACK is received */ + u32FileOffset += nextState; + /* increment the packet number */ + u32PacketNo++; + } + } + else if ( u16FileAccessState == FOE_WAIT_FOR_LAST_ACK ) + { + /* we were waiting for the last acknowledge, now the sequence is finished */ + nextState = FOE_FINISHED_NOACK; + } + break; + + case ECAT_FOE_OPCODE_ERR: + /* a FoE Error service is received */ + if ( u16FileAccessState != FOE_READY ) + { + UINT32 u32CmdErrorCode = SWAPDWORD((((UINT32)pFoeInd->FoeHeader.Cmd.ErrorCode[FOE_COMMAND_LOWWORD]) | ((UINT32)pFoeInd->FoeHeader.Cmd.ErrorCode[FOE_COMMAND_HIGHWORD]) << 16)); + + /* a file transmission sequence is active, inform the application, that this sequence + was stopped */ + FOE_Error( u32CmdErrorCode ); + + nextState = FOE_FINISHED; + } + break; + + case ECAT_FOE_OPCODE_BUSY: + /* a FoE Busy service is received */ + if ( u16FileAccessState == FOE_WAIT_FOR_ACK + || u16FileAccessState == FOE_WAIT_FOR_LAST_ACK ) + { + /* we are waiting for an acknowledge, service is correct, call the application function + to resend the last part of the file */ + nextState = FOE_Busy( SWAPWORD(pFoeInd->FoeHeader.Cmd.Busy.Done), u32LastFileOffset, (UINT16 MBXMEM *)pFoeInd->Data ); + } + break; + + } + + if ( nextState <= FOE_MAXDATA ) + { + /* we send DATA and wait for ACK */ + UINT32 d = SWAPDWORD(u32PacketNo); + + /* store the OpCode in the mailbox buffer */ + pFoeInd->FoeHeader.OpCode = SWAPWORD(ECAT_FOE_OPCODE_DATA); + /* store the packet number in the mailbox buffer */ + pFoeInd->FoeHeader.Cmd.PacketNo[FOE_COMMAND_LOWWORD] = ((d & 0x0000FFFF)); + pFoeInd->FoeHeader.Cmd.PacketNo[FOE_COMMAND_HIGHWORD] = ((d & 0xFFFF0000) >> 16); + + /* store the size of the mailbox data in the mailbox buffer */ + pFoeInd->MbxHeader.Length = FOE_HEADER_SIZE + nextState; + + if ( nextState == u16SendMbxSize - FOE_HEADER_SIZE - MBX_HEADER_SIZE ) + { + /* packets still following, we wait for an ACK */ + u16FileAccessState = FOE_WAIT_FOR_ACK; + } + else + { + /* it was the last Packet, we wait for the last ACK */ + u16FileAccessState = FOE_WAIT_FOR_LAST_ACK; + } + } + else if ( nextState <= FOE_MAXBUSY ) + { + /* we are still storing the received file data (in flash for example) and + send BUSY and wait for the DATA to be sent again */ + /* store the OpCode in the mailbox buffer */ + pFoeInd->FoeHeader.OpCode = SWAPWORD(ECAT_FOE_OPCODE_BUSY); + /* store the information how much progress we made until we can receive file data again */ + pFoeInd->FoeHeader.Cmd.Busy.Done = SWAPWORD(nextState-FOE_MAXBUSY_ZERO); + + pFoeInd->FoeHeader.Cmd.Busy.Entire = 0; + /* store the size of the mailbox data in the mailbox buffer */ + + pFoeInd->MbxHeader.Length = FOE_HEADER_SIZE; + } + else if ( nextState == FOE_ACK || nextState == FOE_ACKFINISHED ) + { + /* we send ACK and wait for DATA + the next file data is expected with an incremented packet number, but + we have to acknowledge the old packet first */ + UINT32 d = SWAPDWORD(u32PacketNo); + u32PacketNo++; + + /* store the OpCode in the mailbox buffer */ + pFoeInd->FoeHeader.OpCode = SWAPWORD(ECAT_FOE_OPCODE_ACK); + /* store the packet number in the mailbox buffer */ + pFoeInd->FoeHeader.Cmd.PacketNo[FOE_COMMAND_LOWWORD] = ((d & 0x0000FFFF)); + pFoeInd->FoeHeader.Cmd.PacketNo[FOE_COMMAND_HIGHWORD] = ((d & 0xFFFF0000) >> 16); + + /* store the size of the mailbox data in the mailbox buffer */ + pFoeInd->MbxHeader.Length = SIZEOF(TFOEHEADER); + + /* we wait for the next data part */ + if ( nextState == FOE_ACK ) + { + /* we wait for the next data part */ + u16FileAccessState = FOE_WAIT_FOR_DATA; + } + else + { + /* the last data part was received */ + u16FileAccessState = FOE_READY; + } + } + else if ( nextState < FOE_ERROR ) + { + /* the file transmission sequence is finished, we have to send nothing */ + u16FileAccessState = FOE_READY; + APPL_FreeMailboxBuffer(pFoeInd); +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 317 to 320 deleted*/ + return 0; + } + else + { + UINT32 d = SWAPDWORD(nextState); + UINT8 b = 0; + + /* store the OpCode in the mailbox buffer */ + pFoeInd->FoeHeader.OpCode = SWAPWORD(ECAT_FOE_OPCODE_ERR); + /* store the ErrorCode in the mailbox buffer */ + pFoeInd->FoeHeader.Cmd.ErrorCode[FOE_COMMAND_LOWWORD] = ((d & 0x0000FFFF)); + pFoeInd->FoeHeader.Cmd.ErrorCode[FOE_COMMAND_HIGHWORD] = ((d & 0xFFFF0000) >> 16); + + /* store the size of the mailbox data in the mailbox buffer */ + pFoeInd->MbxHeader.Length = SIZEOF(TFOEHEADER); + + /* Error Text is returned in pFoeInd->Data */ + while (b < 32) + { + UINT16 data = ((UINT16 MBXMEM *) pFoeInd->Data)[(b >> 1)]; + + if ((data & 0x00FF) == 0) + { + break; + } + b++; + + if ((data & 0xFF00) == 0) + { + break; + } + b++; + } + if ( b < 32 ) + { + pFoeInd->MbxHeader.Length += b+1; + } + + /* the file transmission sequence is finished */ + u16FileAccessState = FOE_READY; + } + +/*ET9300 Project Handler :(#if BOOTSTRAPMODE_SUPPORTED) lines 363 to 385 deleted*/ + { + if ( MBX_MailboxSendReq((TMBX MBXMEM *) pFoeInd, FOE_SERVICE) != 0 ) + { + /* if the mailbox service could not be sent (or stored), the response will be + stored in the variable pFoeSendStored and will be sent automatically + from the mailbox handler (FOE_ContinueInd) when the send mailbox will be read + the next time from the master */ + pFoeSendStored = (TMBX MBXMEM *) pFoeInd; + } + } + + return 0; +} + + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \param pMbx Pointer to the free mailbox buffer + + \brief This function is called when the next mailbox fragment can be sent. +*//////////////////////////////////////////////////////////////////////////////////////// + +void FOE_ContinueInd(TMBX MBXMEM * pMbx) +{ + if ( pFoeSendStored ) + { + /* send the stored FoE service which could not be sent before */ +/*ECATCHANGE_START(V5.13) FOE1*/ + if (MBX_MailboxSendReq(pFoeSendStored, FOE_SERVICE) == 0) + { + pFoeSendStored = 0; + } + } +/*ECATCHANGE_END(V5.13) EOE1*/ +} + +/** @} */ + diff --git a/ecatfoe.h b/ecatfoe.h new file mode 100644 index 0000000..b6f68b0 --- /dev/null +++ b/ecatfoe.h @@ -0,0 +1,171 @@ +/* +* This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. +* The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf +*/ + +/** + * \addtogroup FoE FileTransfer over EtherCAT + * @{ + */ + +/** +\file ecatfoe.h +\author EthercatSSC@beckhoff.com + +\version 5.12 + +
Changes to version V5.11:
+V5.12 FOE2: handle 16bit only access
+
Changes to version V5.10:
+V5.11 FOE1: handle busy on a read request, change OPMode to OPCode (same terms as in the spec)
+
Changes to version V5.01:
+V5.10 FOE1: Add new FoE error codes (0x800C,0x800D,0x800F)
+V5.10 FOE2: Update file handling to support File sizes greater than 0x8000 Bytes (change value of "FOE_MAXDATA")
+
Changes to version - :
+V5.01 : Start file change log + */ + +/*----------------------------------------------------------------------------------------- +------ +------ Includes +------ +-----------------------------------------------------------------------------------------*/ +#include "esc.h" +#include "mailbox.h" + +#ifndef _ECATFOE_H_ +#define _ECATFOE_H_ + +/*----------------------------------------------------------------------------------------- +------ +------ Defines and Types +------ +-----------------------------------------------------------------------------------------*/ + + + +/*--------------------------------------------- +- Services +-----------------------------------------------*/ +#define ECAT_FOE_OPCODE_RRQ 1 /**< \brief Read request*/ +#define ECAT_FOE_OPCODE_WRQ 2 /**< \brief Write request*/ +#define ECAT_FOE_OPCODE_DATA 3 /**< \brief Data datagram*/ +#define ECAT_FOE_OPCODE_ACK 4 /**< \brief Acknowledge datagram*/ +#define ECAT_FOE_OPCODE_ERR 5 /**< \brief Error datagram*/ +#define ECAT_FOE_OPCODE_BUSY 6 /**< \brief Busy datagram*/ + + +/*--------------------------------------------- +- States +-----------------------------------------------*/ +#define FOE_READY 0 /**< \brief Ready state*/ +#define FOE_WAIT_FOR_ACK 1 /**< \brief Wait for acknowledgement state*/ +#define FOE_WAIT_FOR_DATA 2 /**< \brief Wait for data state*/ +#define FOE_WAIT_FOR_RESET 3 /**< \brief Wait for reset state*/ +#define FOE_WAIT_FOR_LAST_ACK 4 /**< \brief Wait for last acknowledgement state*/ +#define FOE_PROGRAMMING 5 /**< \brief Programming state*/ +#define FOE_WAIT_FOR_LAST_DATA 6 /**< \brief Wait for last data state*/ + + +/*ET9300 Project Handler :(#if FC1100_HW) lines 71 to 73 deleted*/ + + + +/** \brief FoE header*/ +typedef struct MBX_STRUCT_PACKED_START +{ + UINT16 OpCode; /**< \brief OpCode + * + * 1 : RRQ
+ * 2 : WRQ
+ * 3 : DATA
+ * 4 : ACK
+ * 5 : ERR
+ * 6 : BUSY*/ + union MBX_STRUCT_PACKED_START + { + UINT16 Password[2]; /**< \brief Password (used in Read request and Write request). 0 if unknown*/ + UINT16 PacketNo[2]; /**< \brief Packet number (used in DATA and ACK datagram)*/ + UINT16 ErrorCode[2]; /**< \brief Error code (used in ERR datagram)*/ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 94 to 97 deleted*/ + #define FOE_COMMAND_LOWWORD 0 + #define FOE_COMMAND_HIGHWORD 1 + struct MBX_STRUCT_PACKED_START + { + UINT16 Done; /**< \brief Done indication (used in BUSY datagram)*/ + UINT16 Entire; /**< \brief Entire indication (used in BUSY datagram)*/ + }MBX_STRUCT_PACKED_END + Busy; /**< \brief Busy variable*/ + }MBX_STRUCT_PACKED_END + Cmd; /**< \brief Command field*/ + + +}MBX_STRUCT_PACKED_END +TFOEHEADER; + + +#define FOE_HEADER_SIZE SIZEOF(TFOEHEADER) /**< \brief FoE header size*/ + + /** \brief Complete FoE datagram*/ +typedef struct MBX_STRUCT_PACKED_START +{ + TMBXHEADER MbxHeader; /**< \brief Mailbox header*/ + TFOEHEADER FoeHeader; /**< \brief FoE header*/ + UINT16 Data[((MAX_MBX_DATA_SIZE)-(FOE_HEADER_SIZE)) >> 1]; /**< \brief FoE Data buffer*/ +}MBX_STRUCT_PACKED_END +TFOEMBX; + + +/*ET9300 Project Handler :(#if FC1100_HW) lines 128 to 130 deleted*/ + + +/*--------------------------------------------- +- Results +-----------------------------------------------*/ +#define FOE_ERROR 0x8000 /**< \brief Error result*/ +#define FOE_FINISHED ((FOE_ERROR)-1) /**< \brief Datagram finished*/ +#define FOE_FINISHED_NOACK ((FOE_FINISHED)-1) /**< \brief Datagram finished no acknowledgement*/ +#define FOE_ACK ((FOE_FINISHED_NOACK)-1) /**< \brief Acknowledgement*/ +#define FOE_ACKFINISHED ((FOE_ACK)-1) /**< \brief Acknowledgement finished*/ +#define FOE_WAIT ((FOE_ACKFINISHED)-1) /**< \brief Wait */ +#define FOE_MAXBUSY ((FOE_WAIT)-1) /**< \brief Max busy indication*/ +#define FOE_MAXBUSY_ZERO ((FOE_MAXBUSY)-100) /**< \brief Min busy indication*/ +#define FOE_MAXDATA ((FOE_MAXBUSY_ZERO)-1) /**< \brief Maximum data within one FoE Datagram*/ + +#endif //_ECATFOE_H_ + +#if _ECATFOE_ + #define PROTO +#else + #define PROTO extern +#endif + +/*----------------------------------------------------------------------------------------- +------ +------ Global Variables +------ +-----------------------------------------------------------------------------------------*/ +PROTO UINT32 u32PacketNo; /**< \brief Stores the actual packet number to be expected*/ +PROTO UINT32 u32FileOffset; /**< \brief Stores the next file offset to be sent */ +PROTO UINT32 u32LastFileOffset; /**< \brief Stores the actual sent file offset */ +PROTO UINT16 u16FileAccessState; /**< \brief Stores the actual state of the file transmission sequence */ +PROTO TMBX MBXMEM * pFoeSendStored; /**Changes to version V5.12:
+V5.13 BOOT1: support Init-to-Init transition in bootloader application
+V5.13 CIA402 3: change define "CIA402_DEVICE" to "CiA402_SAMPLE_APPLICATION"
+V5.13 CIA402 4: decouple CIA402 state machine and application from ESM (according ETG.6010, clause 4)
+V5.13 ECAT1: handle Sync mapped to AL Event
+V5.13 ECAT2: explicit device ID handling, the ID value shall only be latched on the rising edge of 0x120.5
+V5.13 ECAT3: reset local Error flag in case of two consecutive pending state response and the the first failes
+V5.13 ESM1: local error handling update, ECAT_StateChange triggers only transitions from Op->Any or reject/accept a pending transition
+V5.13 ESM2: support ErrorSafeOP to OP transition
+V5.13 ESM3: Safe-to-OP transition in DC mode, ack OP state if no error was detected
+V5.13 ESM4: implement disable sync error reaction 0x10F1.2 is set to 0
+V5.13 MBX1: change mbx_read flag handling to SM1 buffer state handling (required in case of a mbx read frame with an invalid CRC, the read flag would be set but the SM bufer is still locked)

Changes to version V5.11:
V5.12 BOOT1: add a bootloader sample application (only the ESM and FoE is supported)
V5.12 ECAT1: update SM Parameter measurement (based on the system time), enhancement for input only devices and no mailbox support, use only 16Bit pointer in process data length caluclation
@@ -194,17 +207,24 @@ V4.00 ECAT 7: The return values for the AL-StatusCode were changed to UINT16 #include "ecatappl.h" +/*ET9300 Project Handler :(#if BOOTSTRAPMODE_SUPPORTED) lines 209 to 211 deleted*/ +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 214 to 216 deleted*/ #include "mailbox.h" #include "ecatcoe.h" #include "objdef.h" +/*ET9300 Project Handler :(#if EMERGENCY_SUPPORTED) lines 227 to 229 deleted*/ +/*ET9300 Project Handler :(#if AOE_SUPPORTED) lines 231 to 233 deleted*/ +/*ECATCHANGE_START(V5.13) CIA402 3*/ +/*ECATCHANGE_END(V5.13) CIA402 3*/ #include "cia402appl.h" +/*ET9300 Project Handler :(#elif TEST_APPLICATION) lines 239 to 252 deleted*/ /*-------------------------------------------------------------------------------------- ------ @@ -219,23 +239,30 @@ V4.00 ECAT 7: The return values for the AL-StatusCode were changed to UINT16 ------ -----------------------------------------------------------------------------------------*/ UINT16 u16ALEventMask; // Value which will be written to the 0x204 register (AL event mask) during the state transition PreOP to SafeOP +/*ET9300 Project Handler :(#if EXPLICIT_DEVICE_ID) lines 267 to 271 deleted*/ /*Dummy variable to trigger read or writes events in the ESC*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 274 to 278 deleted*/ VARVOLATILE UINT8 u8dummy; +/*ET9300 Project Handler :(#if !COE_SUPPORTED) lines 282 to 288 deleted*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 290 to 294 deleted*/ VARVOLATILE UINT8 SMActivate = 0; TSYNCMAN SyncManInfo; //indicates if the EEPORM was loaded correct BOOL EepromLoaded = FALSE; + + /*----------------------------------------------------------------------------------------- ------ ------ local functions ------ -----------------------------------------------------------------------------------------*/ - +/*ECATCHANGE_START(V5.13) ECAT1*/ +/*ECATCHANGE_END(V5.13) ECAT1*/ void ResetALEventMask(UINT16 intMask); ///////////////////////////////////////////////////////////////////////////////////////// @@ -246,15 +273,19 @@ void ResetALEventMask(UINT16 intMask); *//////////////////////////////////////////////////////////////////////////////////////// void ResetALEventMask(UINT16 intMask) { +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 322 to 330 deleted*/ UINT16 mask; HW_EscReadWord(mask, ESC_AL_EVENTMASK_OFFSET); +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 334 to 336 deleted*/ mask &= intMask; DISABLE_ESC_INT(); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 345 to 350 deleted*/ +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 352 to 354 deleted*/ HW_EscWriteWord(mask, ESC_AL_EVENTMASK_OFFSET); ENABLE_ESC_INT(); } @@ -267,15 +298,19 @@ void ResetALEventMask(UINT16 intMask) *//////////////////////////////////////////////////////////////////////////////////////// void SetALEventMask(UINT16 intMask) { +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 368 to 376 deleted*/ UINT16 mask; HW_EscReadWord(mask, ESC_AL_EVENTMASK_OFFSET); +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 381 to 383 deleted*/ mask |= intMask; DISABLE_ESC_INT(); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 391 to 396 deleted*/ +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 398 to 400 deleted*/ HW_EscWriteWord(mask, ESC_AL_EVENTMASK_OFFSET); ENABLE_ESC_INT(); } @@ -288,6 +323,7 @@ void SetALEventMask(UINT16 intMask) *//////////////////////////////////////////////////////////////////////////////////////// void UpdateEEPROMLoadedState(void) { +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 415 to 420 deleted*/ UINT16 TmpVar = 0; //read EEPROM loaded information HW_EscReadWord(TmpVar, ESC_EEPROM_CONTROL_OFFSET); @@ -328,6 +364,7 @@ TSYNCMAN ESCMEM * GetSyncMan( UINT8 channel ) HW_EscRead((MEM_ADDR *)&SyncManInfo, ESC_SYNCMAN_REG_OFFSET + (channel * SIZEOF_SM_REGISTER), SIZEOF_SM_REGISTER ); +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 462 to 474 deleted*/ return &SyncManInfo; } @@ -341,6 +378,7 @@ TSYNCMAN ESCMEM * GetSyncMan( UINT8 channel ) void DisableSyncManChannel(UINT8 channel) { UINT16 Offset; +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 488 to 526 deleted*/ VARVOLATILE UINT8 smStatus = SM_SETTING_PDI_DISABLE; Offset = (ESC_SM_PDICONTROL_OFFSET + (SIZEOF_SM_REGISTER*channel)); @@ -362,6 +400,7 @@ void DisableSyncManChannel(UINT8 channel) void EnableSyncManChannel(UINT8 channel) { UINT16 Offset; +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 549 to 589 deleted*/ VARVOLATILE UINT8 smStatus = 0x00; Offset = (ESC_SM_PDICONTROL_OFFSET + (SIZEOF_SM_REGISTER*channel)); @@ -374,7 +413,9 @@ void EnableSyncManChannel(UINT8 channel) }while((smStatus & SM_SETTING_PDI_DISABLE)); } +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 603 to 661 deleted*/ +/*ET9300 Project Handler :(#if EMERGENCY_SUPPORTED && (COE_SUPPORTED || SOE_SUPPORTED)) lines 663 to 820 deleted*/ ///////////////////////////////////////////////////////////////////////////////////////// /** @@ -411,9 +452,11 @@ UINT8 CheckSmSettings(UINT8 maxChannel) /* check the Sync Manager Parameter for the Receive Mailbox (Sync Manager Channel 0) */ pSyncMan = GetSyncMan(MAILBOX_WRITE); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 858 to 874 deleted*/ SMLength = pSyncMan->Length; SMAddress = pSyncMan->PhysicalStartAddress; +/*ET9300 Project Handler :(#if CHECK_SM_PARAM_ALIGNMENT) lines 878 to 891 deleted*/ if (!(pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE)) @@ -452,15 +495,18 @@ UINT8 CheckSmSettings(UINT8 maxChannel) result = ALSTATUSCODE_INVALIDMBXCFGINPREOP; } +/*ET9300 Project Handler :(#if TEST_APPLICATION && COE_SUPPORTED) lines 931 to 937 deleted*/ if ( result == 0 ) { /* check the Sync Manager Parameter for the Send Mailbox (Sync Manager Channel 1) */ pSyncMan = GetSyncMan(MAILBOX_READ); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 944 to 960 deleted*/ SMLength = pSyncMan->Length; SMAddress = pSyncMan->PhysicalStartAddress; +/*ET9300 Project Handler :(#if CHECK_SM_PARAM_ALIGNMENT) lines 964 to 977 deleted*/ if (!(pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE)) { @@ -506,9 +552,11 @@ UINT8 CheckSmSettings(UINT8 maxChannel) /* check the Sync Manager Parameter for the Inputs (Sync Manager Channel 2 (0 in case if no mailbox is supported)) */ pSyncMan = GetSyncMan(PROCESS_DATA_IN); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 1025 to 1041 deleted*/ SMLength = pSyncMan->Length; SMAddress = pSyncMan->PhysicalStartAddress; +/*ET9300 Project Handler :(#if CHECK_SM_PARAM_ALIGNMENT) lines 1045 to 1058 deleted*/ if ((pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE) != 0 && SMLength == 0) @@ -561,10 +609,13 @@ UINT8 CheckSmSettings(UINT8 maxChannel) result = SYNCMANCHSIZE + 1; } +/*ET9300 Project Handler :(#if TEST_APPLICATION && COE_SUPPORTED) lines 1113 to 1119 deleted*/ +/*ET9300 Project Handler :(#if MAX_PD_INPUT_SIZE > 0 #else) lines 1121 to 1127 deleted*/ if ( result != 0 ) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED #elif EMERGENCY_SUPPORTED && (COE_SUPPORTED || SOE_SUPPORTED)) lines 1131 to 1136 deleted*/ result = ALSTATUSCODE_INVALIDSMINCFG; } } @@ -573,12 +624,15 @@ UINT8 CheckSmSettings(UINT8 maxChannel) // else if (result == 0 && maxChannel > PROCESS_DATA_OUT) { +/*ET9300 Project Handler :(#if MAX_PD_INPUT_SIZE == 0) lines 1145 to 1148 deleted*/ /* check the Sync Manager Parameter for the Outputs (Sync Manager Channel 2) */ pSyncMan = GetSyncMan(PROCESS_DATA_OUT); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 1152 to 1168 deleted*/ SMLength = pSyncMan->Length; SMAddress = pSyncMan->PhysicalStartAddress; +/*ET9300 Project Handler :(#if CHECK_SM_PARAM_ALIGNMENT) lines 1172 to 1185 deleted*/ if ((pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET] & SM_SETTING_ENABLE_VALUE) != 0 && SMLength == 0) @@ -641,9 +695,12 @@ UINT8 CheckSmSettings(UINT8 maxChannel) /* output size is not zero although the SM2 channel is not enabled */ result = SYNCMANCHSIZE + 1; } +/*ET9300 Project Handler :(#if MAX_PD_OUTPUT_SIZE > 0 #else) lines 1250 to 1256 deleted*/ +/*ET9300 Project Handler :(#if TEST_APPLICATION && COE_SUPPORTED) lines 1258 to 1265 deleted*/ if ( result != 0 ) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED #elif EMERGENCY_SUPPORTED && (COE_SUPPORTED || SOE_SUPPORTED)) lines 1268 to 1273 deleted*/ result = ALSTATUSCODE_INVALIDSMOUTCFG; } } @@ -655,6 +712,7 @@ UINT8 CheckSmSettings(UINT8 maxChannel) for (i = maxChannel; i < nMaxSyncMan; i++) { pSyncMan = GetSyncMan(i); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 1285 to 1287 deleted*/ SMActivate = pSyncMan->Settings[SM_SETTING_ACTIVATE_OFFSET]; } } @@ -676,6 +734,8 @@ UINT8 CheckSmSettings(UINT8 maxChannel) UINT16 StartInputHandler(void) { TSYNCMAN ESCMEM * pSyncMan; + +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 1312 to 1316 deleted*/ UINT8 dcControl; UINT16 wdiv = 0; @@ -693,6 +753,7 @@ UINT16 StartInputHandler(void) UINT16 u16MinSuppSyncType = 0xFFFF; /* Minimum supported Sync Types */ +/*ET9300 Project Handler :(#if MAX_PD_OUTPUT_SIZE == 0 && MAX_PD_INPUT_SIZE == 0) lines 1346 to 1348 deleted*/ u16MinSuppSyncType &= sSyncManOutPar.u16SyncTypesSupported; u16MinSuppSyncType &= sSyncManInPar.u16SyncTypesSupported; @@ -707,6 +768,7 @@ UINT16 StartInputHandler(void) /* get a pointer to the Sync Manager Channel 2 (Outputs) */ pSyncMan = GetSyncMan(PROCESS_DATA_OUT); /* store the address of the Sync Manager Channel 2 (Outputs) */ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 1370 to 1372 deleted*/ nEscAddrOutputData = pSyncMan->PhysicalStartAddress; /* get the number of output buffer used for calculating the address areas */ if (pSyncMan->Settings[SM_SETTING_CONTROL_OFFSET] & SM_SETTING_MODE_ONE_BUFFER_VALUE) @@ -718,6 +780,7 @@ UINT16 StartInputHandler(void) /* get a pointer to the Sync Manager Channel 3 (Inputs) */ pSyncMan = GetSyncMan(PROCESS_DATA_IN); /* store the address of the Sync Manager Channel 3 (Inputs)*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 1387 to 1389 deleted*/ nEscAddrInputData = pSyncMan->PhysicalStartAddress; @@ -733,6 +796,7 @@ UINT16 StartInputHandler(void) || ((nEscAddrInputData + nPdInputSize * nPdInputBuffer) > u16EscAddrReceiveMbx && (nEscAddrInputData < (u16EscAddrReceiveMbx + u16ReceiveMbxSize))) ) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED #elif EMERGENCY_SUPPORTED && (COE_SUPPORTED || SOE_SUPPORTED)) lines 1407 to 1412 deleted*/ return ALSTATUSCODE_INVALIDSMINCFG; } @@ -746,14 +810,16 @@ UINT16 StartInputHandler(void) /* Sync Manager Channel 2 memory area (Outputs) overlaps the Sync Manager memory areas for the Mailbox or the Sync Manager Channel 3 memory area (Inputs) */ +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED #elif EMERGENCY_SUPPORTED && (COE_SUPPORTED || SOE_SUPPORTED)) lines 1435 to 1440 deleted*/ return ALSTATUSCODE_INVALIDSMOUTCFG; } /* - --- Check configured synchronisation --- + --- Check configured synchronization --- */ /* Get the DC Control/Activation register value*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 1450 to 1459 deleted*/ /*Read register 0x981 (corresponding masks are adapted)*/ HW_EscReadByte(dcControl, ESC_DC_SYNC_ACTIVATION_OFFSET); @@ -776,11 +842,13 @@ UINT16 StartInputHandler(void) - 0x9A0:0x9A3 Sync0 Cycle - 0x9A4:0x9A7 Sync1 Cycle */ +/*ET9300 Project Handler :(#if !DC_SUPPORTED) lines 1492 to 1502 deleted*/ if((dcControl & (ESC_DC_SYNC_UNIT_ACTIVE_MASK | ESC_DC_SYNC_UNIT_AUTO_ACTIVE_MASK)) != 0) { /* DC unit is active at least one Sync signal shall be generated */ if((dcControl & (ESC_DC_SYNC0_ACTIVE_MASK | ESC_DC_SYNC1_ACTIVE_MASK)) == 0) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1508 to 1510 deleted*/ return ALSTATUSCODE_DCINVALIDSYNCCFG; } @@ -788,6 +856,7 @@ UINT16 StartInputHandler(void) if(((dcControl & ESC_DC_SYNC0_ACTIVE_MASK) == 0) && ((dcControl & ESC_DC_SYNC1_ACTIVE_MASK) != 0)) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1518 to 1520 deleted*/ return ALSTATUSCODE_DCINVALIDSYNCCFG; } @@ -797,21 +866,21 @@ UINT16 StartInputHandler(void) ||(((u16MinSuppSyncType & SYNCTYPE_DCSYNC1SUPP) == 0) && ((dcControl & ESC_DC_SYNC1_ACTIVE_MASK) != 0))) { /* Sync0 is not supported but will be generated*/ +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1531 to 1533 deleted*/ return ALSTATUSCODE_DCINVALIDSYNCCFG; } } { -/*ECATCHANGE_START(V5.12) ECAT1*/ UINT32 curMinCycleTime = MIN_PD_CYCLE_TIME; curMinCycleTime = sSyncManOutPar.u32MinCycleTime; +/*ET9300 Project Handler :(#elif MAX_PD_INPUT_SIZE > 0) lines 1544 to 1546 deleted*/ /*Check if Sync0 cycle time is supported*/ if (cycleTimeSync0 != 0 && (cycleTimeSync0 < curMinCycleTime || cycleTimeSync0 > MAX_PD_CYCLE_TIME)) { return ALSTATUSCODE_DCSYNC0CYCLETIME; } -/*ECATCHANGE_END(V5.12) ECAT1*/ } @@ -828,6 +897,7 @@ UINT16 StartInputHandler(void) /* Dump an error if subordinated cycles are configured but not supported */ if(bSubordinatedCycles && ((u16MinSuppSyncType & SYNCTYPE_SUBCYCLESUPP) == 0)) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1571 to 1573 deleted*/ return ALSTATUSCODE_DCINVALIDSYNCCFG; } } @@ -844,6 +914,7 @@ UINT16 StartInputHandler(void) if((SyncType0x1C32 == SYNCTYPE_DCSYNC0) || (SyncType0x1C32 == SYNCTYPE_DCSYNC1) ||(SyncType0x1C33 == SYNCTYPE_DCSYNC0) || (SyncType0x1C33 == SYNCTYPE_DCSYNC1)) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1594 to 1596 deleted*/ return ALSTATUSCODE_DCINVALIDSYNCCFG; } } //if((dcControl & (ESC_DC_SYNC_UNIT_ACTIVE_MASK | ESC_DC_SYNC_UNIT_AUTO_ACTIVE_MASK)) == 0) @@ -855,6 +926,7 @@ UINT16 StartInputHandler(void) if((SyncType0x1C32 == (UINT16)SYNCTYPE_DCSYNC1) ||(SyncType0x1C33 == (UINT16)SYNCTYPE_DCSYNC1)) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1611 to 1613 deleted*/ return ALSTATUSCODE_DCINVALIDSYNCCFG; } } //if((dcControl & ESC_DC_SYNC1_ACTIVE_MASK) == 0) @@ -865,10 +937,12 @@ UINT16 StartInputHandler(void) if((SyncType0x1C32 == (UINT16)SYNCTYPE_DCSYNC0) ||(SyncType0x1C33 == (UINT16)SYNCTYPE_DCSYNC0)) { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 1624 to 1626 deleted*/ return ALSTATUSCODE_DCINVALIDSYNCCFG; } } //if((dcControl & ESC_DC_SYNC0_ACTIVE_MASK) == 0) +/*ET9300 Project Handler :(#if !AL_EVENT_ENABLED) lines 1632 to 1654 deleted*/ } } //if(bSyncSetByUser) else @@ -902,6 +976,7 @@ UINT16 StartInputHandler(void) SyncType0x1C32 = SYNCTYPE_FREERUN; SyncType0x1C33 = SYNCTYPE_FREERUN; } +/*ET9300 Project Handler :(#if AL_EVENT_ENABLED #else) lines 1691 to 1696 deleted*/ } else @@ -947,7 +1022,6 @@ UINT16 StartInputHandler(void) /* Update Cycle time entries if DC Sync Mode enabled */ if(SyncType0x1C32 == SYNCTYPE_DCSYNC1) { -/*ECATCHANGE_START(V5.12) ECAT1*/ sSyncManOutPar.u32Sync0CycleTime = (UINT32)cycleTimeSync0; sSyncManOutPar.u32CycleTime = (UINT32)cycleTimeSync0; @@ -961,7 +1035,6 @@ UINT16 StartInputHandler(void) sSyncManInPar.u32Sync0CycleTime = (UINT32)cycleTimeSync0; sSyncManInPar.u32CycleTime = (UINT32)cycleTimeSync0; -/*ECATCHANGE_END(V5.12) ECAT1*/ } /* Set global flags based on Sync Type */ @@ -993,6 +1066,7 @@ UINT16 StartInputHandler(void) u16ALEventMask = PROCESS_INPUT_EVENT; } +/*ET9300 Project Handler :(#elif MAX_PD_INPUT_SIZE > 0) lines 1803 to 1808 deleted*/ } if ((SyncType0x1C32 == SYNCTYPE_DCSYNC0) || (SyncType0x1C32 == SYNCTYPE_DCSYNC1) @@ -1008,6 +1082,8 @@ UINT16 StartInputHandler(void) } } + + sSyncManOutPar.u16SyncType = SyncType0x1C32; sSyncManInPar.u16SyncType = SyncType0x1C33; @@ -1020,9 +1096,9 @@ UINT16 StartInputHandler(void) if(bSubordinatedCycles == TRUE) { -/*ECATCHANGE_START(V5.12) ECAT4*/ + UINT32 cycleTimeSync1 = (shiftTimeSync1 + cycleTimeSync0); -/*ECATCHANGE_END(V5.12) ECAT4*/ + /* get the number of Sync0 event within on SM cycle */ if(shiftTimeSync1 >= cycleTimeSync0) @@ -1075,12 +1151,14 @@ UINT16 StartInputHandler(void) */ /*get the watchdog time (register 0x420). if value is > 0 watchdog is active*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 1909 to 1916 deleted*/ HW_EscReadWord(wd, ESC_PD_WD_TIME); wd = SWAPWORD(wd); if (nPdOutputSize > 0 && wd != 0 ) { /*get watchdog divider (register 0x400)*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 1924 to 1932 deleted*/ HW_EscReadWord(wdiv, ESC_WD_DIVIDER_OFFSET); wdiv = SWAPWORD(wdiv); if ( wdiv != 0 ) @@ -1090,9 +1168,9 @@ UINT16 StartInputHandler(void) d *= wd; - /* store watchdog in ms in variable u16WdValue */ + /* store watchdog in ms in variable EcatWdValue */ /* watchdog value has to be rounded up */ - d += 24999; + d = (INT32)(d + 24999); d /= 25000; EcatWdValue = (UINT16) d; } @@ -1102,6 +1180,7 @@ UINT16 StartInputHandler(void) /* wd value has to be set to zero, if the wd is 0 */ EcatWdValue = 0; } +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 1955 to 1958 deleted*/ } else { @@ -1133,7 +1212,23 @@ UINT16 StartInputHandler(void) bSmSyncSequenceValid = FALSE; i16WaitForPllRunningTimeout = 0; -/*ECATCHANGE_START(V5.12) ECAT5*/ +/*ECATCHANGE_START(V5.13) ECAT1*/ + /*Get Sync mapped to AL Event indication*/ + { +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS || ESC_16BIT_ACCESS) lines 1997 to 2009 deleted*/ + UINT8 u8TmpVar = 0; + HW_EscReadByte(u8TmpVar, ESC_PDI_CONFIGURATION); + if ((u8TmpVar & ESC_SYNC0_MAPPED_TO_ALEVENT) > 0) + { + u16ALEventMask |= SYNC0_EVENT; + } + + if ((u8TmpVar & ESC_SYNC1_MAPPED_TO_ALEVENT) > 0) + { + u16ALEventMask |= SYNC1_EVENT; + } + } +/*ECATCHANGE_END(V5.13) ECAT1*/ sSyncManInPar.u16SmEventMissedCounter = 0; sSyncManInPar.u16CycleExceededCounter = 0; sSyncManInPar.u8SyncError = 0; @@ -1142,7 +1237,7 @@ UINT16 StartInputHandler(void) sSyncManOutPar.u16SmEventMissedCounter = 0; sSyncManOutPar.u16CycleExceededCounter = 0; sSyncManOutPar.u8SyncError = 0; -/*ECATCHANGE_END(V5.12) ECAT5*/ +/*ET9300 Project Handler :(#if COE_SUPPORTED #else) lines 2037 to 2039 deleted*/ /* calculate the Sync0/Sync1 watchdog timeouts */ if ( (dcControl & ESC_DC_SYNC0_ACTIVE_MASK) != 0 ) @@ -1179,9 +1274,7 @@ UINT16 StartInputHandler(void) else { /* Sync1 cycle is larger than Sync0 (e.g. subordinated Sync0 cycles) */ -/*ECATCHANGE_START(V5.12) ECAT4*/ UINT32 Sync1Cycle = (shiftTimeSync1 + cycleTimeSync0 )/100000; -/*ECATCHANGE_END(V5.12) ECAT4*/ if(Sync1Cycle < 5) { /*Sync0 cycle less than 500us*/ @@ -1189,9 +1282,7 @@ UINT16 StartInputHandler(void) } else { - /*ECATCHANGE_START(V5.12)*/ Sync1WdValue = (UINT16)((Sync1Cycle*2)/10); - /*ECATCHANGE_END(V5.12)*/ } /* add one Sync0 cycle because the Sync1 cycle starts on the next Sync0 after the Sync1 signal */ @@ -1210,6 +1301,7 @@ UINT16 StartInputHandler(void) EnableSyncManChannel(PROCESS_DATA_IN); } +/*ET9300 Project Handler :(#if TEST_APPLICATION && COE_SUPPORTED) lines 2109 to 2119 deleted*/ /*write initial input data*/ PDO_InputMapping(); @@ -1232,7 +1324,9 @@ UINT16 StartOutputHandler(void) required to support also masters which starts to send process data after the SO transition was triggered (if the master don't send process data within "SAFEOP2OPTIMEOUT" the transition is rejected)*/ UINT16 result = NOERROR_INWORK; - if(bLocalErrorFlag) + /*ECATCHANGE_START(V5.13) ESM1*/ + if(STATE_VALID(u8LocalErrorState)) +/*ECATCHANGE_END(V5.13) ESM1*/ { /*Local error still exists => skip state request to OP and response with "u16LocalErrorCode"*/ return u16LocalErrorCode; @@ -1249,7 +1343,6 @@ UINT16 StartOutputHandler(void) } -/*ECATCHANGE_START(V5.12) ECAT5*/ sSyncManOutPar.u16SmEventMissedCounter = 0; sSyncManOutPar.u8SyncError = 0; @@ -1258,7 +1351,7 @@ UINT16 StartOutputHandler(void) sSyncManInPar.u16SmEventMissedCounter = 0; sSyncManInPar.u8SyncError = 0; -/*ECATCHANGE_END(V5.12) ECAT5*/ +/*ET9300 Project Handler :(#if COE_SUPPORTED #else) lines 2178 to 2180 deleted*/ return result; } @@ -1299,6 +1392,8 @@ void StopInputHandler(void) } /* reset the events in the AL Event mask register (0x204) */ +/*ECATCHANGE_START(V5.13) ECAT1*/ +/*ECATCHANGE_END(V5.13) ECAT1*/ { UINT16 ResetMask = SYNC0_EVENT | SYNC1_EVENT; ResetMask |= PROCESS_OUTPUT_EVENT; @@ -1324,7 +1419,6 @@ void StopInputHandler(void) LatchInputSync0Value = 0; LatchInputSync0Counter = 0; - /*ECATCHANGE_START(V5.12) ECAT5*/ sSyncManOutPar.u16SmEventMissedCounter = 0; sSyncManOutPar.u16CycleExceededCounter = 0; @@ -1334,7 +1428,7 @@ void StopInputHandler(void) sSyncManInPar.u16SmEventMissedCounter = 0; sSyncManInPar.u16CycleExceededCounter = 0; sSyncManInPar.u8SyncError = 0; -/*ECATCHANGE_END(V5.12) ECAT5*/ +/*ET9300 Project Handler :(#if COE_SUPPORTED #else) lines 2279 to 2281 deleted*/ i16WaitForPllRunningTimeout = 0; @@ -1367,6 +1461,7 @@ void BackToInitTransition(void) void SetALStatus(UINT8 alStatus, UINT16 alStatusCode) { UINT16 Value = alStatusCode; +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 2318 to 2320 deleted*/ /*update global status variable if required*/ if(nAlStatus != alStatus) @@ -1374,24 +1469,17 @@ void SetALStatus(UINT8 alStatus, UINT16 alStatusCode) nAlStatus = alStatus; } - /*Handle Explicit Device ID is requested*/ - if(bExplicitDevIdRequested && !(nAlStatus & STATE_CHANGE) && alStatusCode == 0 && ((nAlStatus & STATE_MASK) != STATE_BOOT)) - { - Value = APPL_GetDeviceID(); - nAlStatus |= STATE_DEVID; - } - else - { - nAlStatus &= ~STATE_DEVID; - } +/*ET9300 Project Handler :(#if EXPLICIT_DEVICE_ID) lines 2328 to 2341 deleted*/ if (alStatusCode != 0xFFFF) { +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 2345 to 2349 deleted*/ Value = SWAPWORD(Value); HW_EscWriteWord(Value,ESC_AL_STATUS_CODE_OFFSET); } +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 2356 to 2361 deleted*/ Value = nAlStatus; Value = SWAPWORD(Value); HW_EscWriteWord(Value,ESC_AL_STATUS_OFFSET); @@ -1406,9 +1494,9 @@ void SetALStatus(UINT8 alStatus, UINT16 alStatusCode) else if((alStatusCode == ALSTATUSCODE_NOSYNCERROR) || (alStatusCode == ALSTATUSCODE_SYNCERROR) || (alStatusCode == ALSTATUSCODE_DCPLLSYNCERROR) -/*ECATCHANGE_START(V5.12) ECAT7*/ - || (bLocalErrorFlag == TRUE)) -/*ECATCHANGE_END(V5.12) ECAT7*/ +/*ECATCHANGE_START(V5.13) ESM1*/ + || (u8LocalErrorState > 0)) +/*ECATCHANGE_END(V5.13) ESM1*/ { u8EcatErrorLed = LED_SINGLEFLASH; } @@ -1420,12 +1508,13 @@ void SetALStatus(UINT8 alStatus, UINT16 alStatusCode) { u8EcatErrorLed = LED_BLINKING; } +/*ET9300 Project Handler :(#if ESC_SUPPORT_ECAT_LED) lines 2392 to 2435 deleted*/ } ///////////////////////////////////////////////////////////////////////////////////////// /** \param alControl requested new state - \param alStatusCode requested status code + \param alStatusCode requested status code \brief This function handles the EtherCAT State Machine. It is called * in case of an AL Control event (Bit 0 of AL-Event (Reg 0x220), @@ -1473,6 +1562,8 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) nAlStatus &= STATE_MASK; } + + /* generate a variable for the state transition (Bit 0-3: new state (AL Control), Bit 4-7: old state (AL Status) */ alControl &= STATE_MASK; @@ -1505,6 +1596,7 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) { break; } +/*ET9300 Project Handler :(#if (MAX_PD_OUTPUT_SIZE == 0) || (MAX_PD_INPUT_SIZE == 0)) lines 2527 to 2543 deleted*/ } case SAFEOP_2_OP: case OP_2_SAFEOP: @@ -1525,6 +1617,7 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) switch ( stateTrans ) { case INIT_2_BOOT : +/*ET9300 Project Handler :(#if BOOTSTRAPMODE_SUPPORTED) lines 2565 to 2624 deleted*/ result = ALSTATUSCODE_BOOTNOTSUPP; @@ -1532,6 +1625,7 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) break; case BOOT_2_INIT : +/*ET9300 Project Handler :(#if BOOTSTRAPMODE_SUPPORTED) lines 2633 to 2650 deleted*/ result = ALSTATUSCODE_BOOTNOTSUPP; BackToInitTransition(); @@ -1581,6 +1675,7 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) } } +/*ET9300 Project Handler :(#if MAILBOX_SUPPORTED #else) lines 2702 to 2704 deleted*/ break; case PREOP_2_SAFEOP: @@ -1593,6 +1688,8 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) if(result == 0) { +/*ECATCHANGE_START(V5.13) ECAT1*/ +/*ECATCHANGE_END(V5.13) ECAT1*/ /* initialize the AL Event Mask register (0x204) */ SetALEventMask( u16ALEventMask ); @@ -1615,6 +1712,22 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) break; case SAFEOP_2_OP: +/*ECATCHANGE_START(V5.13) ESM2*/ + /*enable SM if error was acknowledged*/ + if (bErrAck) + { + if (nPdOutputSize > 0) + { + EnableSyncManChannel(PROCESS_DATA_OUT); + } + else + if (nPdInputSize > 0) + { + EnableSyncManChannel(PROCESS_DATA_IN); + } + } + /*ECATCHANGE_END(V5.13) ESM2*/ + /* start the output handler (function is defined above) */ result = StartOutputHandler(); if(result == 0) @@ -1712,7 +1825,7 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) BackToInitTransition(); break; - +/*ET9300 Project Handler :(#if !BOOTLOADER_SAMPLE #else) lines 2865 to 2872 deleted*/ case INIT_2_INIT: BackToInitTransition(); case PREOP_2_PREOP: @@ -1723,7 +1836,6 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) APPL_AckErrorInd(stateTrans); } -/*ECATCHANGE_START(V5.12) ESM2*/ /*no local error flag is currently active, enable SM*/ if ( nAlStatus & (STATE_SAFEOP | STATE_OP)) @@ -1738,7 +1850,6 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) EnableSyncManChannel(PROCESS_DATA_IN); } } -/*ECATCHANGE_END(V5.12) ESM2*/ result = NOERROR_NOSTATECHANGE; break; @@ -1787,6 +1898,7 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) /*Disable SM1 (MBX In)*/ DisableSyncManChannel(MAILBOX_READ); +/*ET9300 Project Handler :(#if MAILBOX_SUPPORTED #else) lines 2956 to 2958 deleted*/ nAlStatus = STATE_INIT; } @@ -1820,9 +1932,7 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) EsmTimeoutCounter = 200; //Set default timeout value to 200ms break; } - /*ECATCHANGE_START(V5.12) ESM3*/ EsmTimeoutCounter -= (INT16) (EsmTimeoutCounter / 10); //subtract 10% from the timeout to react before the master runs into a timeout. - /*ECATCHANGE_END(V5.12) ESM3*/ } else if ( alControl != (nAlStatus & STATE_MASK) ) @@ -1893,10 +2003,9 @@ void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode) if the the error bit was acknowledged */ SetALStatus(nAlStatus, 0); } - if((stateTrans & 0x80) && !(stateTrans & STATE_OP)) //state transition from OP to "not OP" - { - CiA402_LocalError(ERROR_COMMUNICATION); - } + /*ECATCHANGE_START(V5.13) CIA402 4*/ + /*decouple CIA402 state machine from ESM*/ + /*ECATCHANGE_END(V5.13) CIA402 4*/ } @@ -1931,7 +2040,9 @@ void AL_ControlRes(void) } MBX_StopMailboxHandler(); - if(bLocalErrorFlag) + /*ECATCHANGE_START(V5.13) ESM1*/ + if((u8LocalErrorState & STATE_MASK) == STATE_INIT) + /*ECATCHANGE_END(V5.13) ESM1*/ { /*Set application specified error*/ StatusCode = u16LocalErrorCode; @@ -1951,7 +2062,9 @@ void AL_ControlRes(void) StopInputHandler(); - if(bLocalErrorFlag) + /*ECATCHANGE_START(V5.13) ESM1*/ + if ((u8LocalErrorState & STATE_MASK) == STATE_PREOP) + /*ECATCHANGE_END(V5.13) ESM1*/ { /*Set application specified error*/ StatusCode = u16LocalErrorCode; @@ -1976,11 +2089,21 @@ void AL_ControlRes(void) /*no process data received*/ StatusCode = ALSTATUSCODE_SMWATCHDOG; } - else +/*ECATCHANGE_START(V5.13) ESM3*/ + else if (!bSmSyncSequenceValid) { /*SM/Sync Sequence is not valid*/ StatusCode = ALSTATUSCODE_SYNCERROR; } + else + { + /*Set valid state transition even if timeout expired*/ + Status = STATE_OP; + StatusCode = 0; + /* Slave is OPERATIONAL */ + bEcatOutputUpdateRunning = TRUE; + } +/*ECATCHANGE_END(V5.13) ESM3*/ } else { @@ -1990,11 +2113,21 @@ void AL_ControlRes(void) } else { - /*Set valid state transition even if timeout expired*/ - Status = STATE_OP; - StatusCode = 0; - /* Slave is OPERATIONAL */ - bEcatOutputUpdateRunning = TRUE; + /*ECATCHANGE_START(V5.13) ESM1*/ + if ((u8LocalErrorState & STATE_MASK) == STATE_SAFEOP) + { + /*Set application specified error*/ + StatusCode = u16LocalErrorCode; + } + else + /*ECATCHANGE_END(V5.13) ESM1*/ + { + /*Set valid state transition even if timeout expired*/ + Status = STATE_OP; + StatusCode = 0; + /* Slave is OPERATIONAL */ + bEcatOutputUpdateRunning = TRUE; + } } } @@ -2080,9 +2213,7 @@ void AL_ControlRes(void) i16WaitForPllRunningTimeout = 0; i16WaitForPllRunningCnt = 0; -/*ECATCHANGE_START(V5.12) ESM4*/ bApplEsmPending = FALSE; -/*ECATCHANGE_END(V5.12) ESM4*/ result = APPL_StartOutputHandler(); if(result == 0) @@ -2105,9 +2236,7 @@ void AL_ControlRes(void) { if(nPdOutputSize == 0 || bEcatFirstOutputsReceived) { -/*ECATCHANGE_START(V5.12) ESM4*/ bApplEsmPending = FALSE; -/*ECATCHANGE_END(V5.12) ESM4*/ result = APPL_StartOutputHandler(); if(result == 0) @@ -2146,6 +2275,7 @@ void AL_ControlRes(void) }// Pending state transition (bEcatWaitForAlControlRes == true) } +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 3363 to 3410 deleted*/ ///////////////////////////////////////////////////////////////////////////////////////// /** @@ -2156,9 +2286,7 @@ void AL_ControlRes(void) *//////////////////////////////////////////////////////////////////////////////////////// void DC_CheckWatchdog(void) { -/*ECATCHANGE_START(V5.12) ECAT5*/ DISABLE_ESC_INT(); -/*ECATCHANGE_END(V5.12) ECAT5*/ if(bDcSyncActive && bEcatInputUpdateRunning) { @@ -2196,7 +2324,11 @@ void DC_CheckWatchdog(void) } if(bDcRunning) { - if(sSyncManOutPar.u16SmEventMissedCounter < sErrorSettings.u16SyncErrorCounterLimit) +/*ECATCHANGE_START(V5.13) ESM4*/ + if((sErrorSettings.u16SyncErrorCounterLimit == 0) || (sSyncManOutPar.u16SmEventMissedCounter < sErrorSettings.u16SyncErrorCounterLimit)) +/*ET9300 Project Handler :(#elif(MAX_PD_INPUT_SIZE > 0)) lines 3467 to 3469 deleted*/ +/*ECATCHANGE_END(V5.13) ESM4*/ +/*ET9300 Project Handler :(#if COE_SUPPORTED && !_PIC18 #else) lines 3471 to 3473 deleted*/ { bSmSyncSequenceValid = TRUE; @@ -2222,9 +2354,7 @@ void DC_CheckWatchdog(void) bSmSyncSequenceValid = FALSE; } } - /*ECATCHANGE_START(V5.12) ECAT5*/ ENABLE_ESC_INT(); - /*ECATCHANGE_END(V5.12) ECAT5*/ } ///////////////////////////////////////////////////////////////////////////////////////// @@ -2235,11 +2365,12 @@ void DC_CheckWatchdog(void) *//////////////////////////////////////////////////////////////////////////////////////// void CheckIfEcatError(void) { - /*if the watchdog is enabled check the the process data watchdog in the ESC + /*if the watchdog is enabled check the process data watchdog in the ESC and set the AL status code 0x1B if the watchdog expired*/ if (EcatWdValue != 0) { /*watchdog time is set => watchdog is active*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 3520 to 3526 deleted*/ UINT16 WdStatusOK = 0; HW_EscReadWord(WdStatusOK, ESC_PD_WD_STATE); @@ -2250,6 +2381,7 @@ void CheckIfEcatError(void) /*The device is in OP state*/ if (bEcatOutputUpdateRunning +/*ET9300 Project Handler :(#if !OP_PD_REQUIRED) lines 3539 to 3541 deleted*/ ) { AL_ControlInd(STATE_SAFEOP, ALSTATUSCODE_SMWATCHDOG); @@ -2284,7 +2416,7 @@ void CheckIfEcatError(void) } ///////////////////////////////////////////////////////////////////////////////////////// /** - \param alStatus: requested state + \param alStatus: requested state (ignored if the "alStatusCode" is 0) \param alStatusCode: value for the AL-Status register \brief This function changes the state of the EtherCAT slave if the requested state @@ -2295,6 +2427,20 @@ void ECAT_StateChange(UINT8 alStatus, UINT16 alStatusCode) { UINT8 Status = alStatus; + /*ECATCHANGE_START(V5.13) ESM1*/ + /*return in case of invalid parameters*/ + if (alStatusCode != 0 && !STATE_VALID(alStatus)) + { + return; + } + + /* call the application requested state transition only once*/ + if (bEcatWaitForAlControlRes == FALSE && u8LocalErrorState == alStatus && u16LocalErrorCode == alStatusCode) + { + return; + } + /*ECATCHANGE_END(V5.13) ESM1*/ + if(bEcatWaitForAlControlRes) { @@ -2306,10 +2452,17 @@ void ECAT_StateChange(UINT8 alStatus, UINT16 alStatusCode) In case on an local error force ESM timeout*/ if(alStatusCode != 0) { - bLocalErrorFlag = TRUE; + /*ECATCHANGE_START(V5.13) ESM1*/ + u8LocalErrorState = (alStatus & STATE_MASK); + /*ECATCHANGE_END(V5.13) ESM1*/ u16LocalErrorCode = alStatusCode; EsmTimeoutCounter = 0; } + else + { + u8LocalErrorState = 0; + u16LocalErrorCode = alStatusCode; + } } else { @@ -2317,7 +2470,9 @@ void ECAT_StateChange(UINT8 alStatus, UINT16 alStatusCode) if(alStatusCode != 0) { - bLocalErrorFlag = TRUE; + /*ECATCHANGE_START(V5.13) ESM1*/ + u8LocalErrorState = (alStatus & STATE_MASK); + /*ECATCHANGE_END(V5.13) ESM1*/ u16LocalErrorCode = alStatusCode; /*State transition failed due to local application reasons*/ @@ -2353,10 +2508,10 @@ void ECAT_StateChange(UINT8 alStatus, UINT16 alStatusCode) bMbxRunning = TRUE; break; case PREOP_2_SAFEOP: -/*ECATCHANGE_START(V5.12) ESM4*/ +/*ECATCHANGE_START(V5.13) ECAT1*/ +/*ECATCHANGE_END(V5.13) ECAT1*/ /* initialize the AL Event Mask register (0x204) */ SetALEventMask(u16ALEventMask); -/*ECATCHANGE_END(V5.12) ESM4*/ bEcatInputUpdateRunning = TRUE; break; case SAFEOP_2_OP: @@ -2364,7 +2519,8 @@ void ECAT_StateChange(UINT8 alStatus, UINT16 alStatusCode) break; } - /*In case of a failed state transition the */ + + Status = (UINT8)(nEcatStateTrans & STATE_MASK); } /*Pending state transition finished => write AL Status and AL Status Code*/ @@ -2374,34 +2530,45 @@ void ECAT_StateChange(UINT8 alStatus, UINT16 alStatusCode) { Status |= STATE_CHANGE; } +/*ECATCHANGE_START(V5.13) ECAT3*/ + else if (u8LocalErrorState != 0) + { + /*a local error is cleared*/ + /*ECATCHANGE_START(V5.13) ESM1*/ + u8LocalErrorState = 0; + /*ECATCHANGE_END(V5.13) ESM1*/ + u16LocalErrorCode = 0x00; + } +/*ECATCHANGE_END(V5.13) ECAT3*/ SetALStatus(Status,alStatusCode); - }// state transition need to be completed by the local application - }//State transition pending + }/*state transition need to be completed by the local application*/ + }/*State transition pending*/ else { - if ( alStatusCode != 0 ) + /*ECATCHANGE_START(V5.13) ESM1*/ + if ( alStatusCode != 0 && ((alStatus & STATE_MASK) != STATE_OP) && STATE_VALID(alStatus)) { - bLocalErrorFlag = TRUE; + u8LocalErrorState = (alStatus & STATE_MASK); + /*ECATCHANGE_END(V5.13) ESM1*/ u16LocalErrorCode = alStatusCode; -/*ECATCHANGE_START(V5.12) ESM1*/ - if (((nAlStatus & STATE_CHANGE) != STATE_CHANGE) || ((alStatus & STATE_MASK) < (nAlStatus & STATE_MASK))) + /*trigger state transition only state transition from OP to lower state (for all other transitions the corresponding state transition functions shall be used)*/ + if ((nAlStatus & STATE_MASK) == STATE_OP) { - /* Local error has happened, we change the state if necessary */ - /* no error pending and the target state is lower than the current one*/ AL_ControlInd(alStatus, alStatusCode); } -/*ECATCHANGE_END(V5.12) ESM1*/ } - else if (bLocalErrorFlag) + /*ECATCHANGE_START(V5.13) ESM1*/ + else if (u8LocalErrorState != 0) { /*a local error is gone*/ - bLocalErrorFlag = FALSE; + u8LocalErrorState = 0; u16LocalErrorCode = 0x00; } + /*ECATCHANGE_END(V5.13) ESM1*/ } } @@ -2414,14 +2581,16 @@ void ECAT_StateChange(UINT8 alStatus, UINT16 alStatusCode) void ECAT_Init(void) { UINT8 i; - /*Get Maximum Number of SyncManagers and supported DPRAM size*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 3756 to 3783 deleted*/ HW_EscReadByte(nMaxSyncMan, ESC_SM_CHANNELS_OFFSET); HW_EscReadWord(nMaxEscAddress, ESC_DPRAM_SIZE_OFFSET); //get max address (register + DPRAM size in Byte (in the register it is stored in KB)) nMaxEscAddress = (nMaxEscAddress << 10) + 0xFFF; +/*ET9300 Project Handler :(#if EXPLICIT_DEVICE_ID) lines 3791 to 3795 deleted*/ + /* Get EEPROM loaded information */ UpdateEEPROMLoadedState(); @@ -2435,20 +2604,25 @@ void ECAT_Init(void) MBX_Init(); /* initialize variables */ +/*ET9300 Project Handler :(#if BOOTSTRAPMODE_SUPPORTED) lines 3812 to 3814 deleted*/ bApplEsmPending = FALSE; bEcatWaitForAlControlRes = FALSE; bEcatFirstOutputsReceived = FALSE; bEcatOutputUpdateRunning = FALSE; bEcatInputUpdateRunning = FALSE; - bExplicitDevIdRequested = FALSE; +/*ET9300 Project Handler :(#if EXPLICIT_DEVICE_ID) lines 3822 to 3824 deleted*/ bWdTrigger = FALSE; EcatWdValue = 0; +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 3829 to 3831 deleted*/ Sync0WdCounter = 0; Sync0WdValue = 0; Sync1WdCounter = 0; Sync1WdValue = 0; bDcSyncActive = FALSE; - bLocalErrorFlag = FALSE; + + /*ECATCHANGE_START(V5.13) ESM1*/ + u8LocalErrorState = 0; + /*ECATCHANGE_END(V5.13) ESM1*/ u16LocalErrorCode = 0x00; u16ALEventMask = 0; @@ -2463,9 +2637,13 @@ void ECAT_Init(void) bEscIntEnabled = FALSE; +/*ET9300 Project Handler :(#if EMERGENCY_SUPPORTED && (COE_SUPPORTED || SOE_SUPPORTED)) lines 3859 to 3862 deleted*/ /* initialize the COE part */ COE_Init(); +/*ET9300 Project Handler :(#if AOE_SUPPORTED) lines 3867 to 3870 deleted*/ +/*ECATCHANGE_START(V5.13) ECAT1*/ +/*ECATCHANGE_END(V5.13) ECAT1*/ /*reset AL event mask*/ ResetALEventMask(0); } @@ -2479,42 +2657,59 @@ void ECAT_Main(void) { UINT16 ALEventReg; UINT16 EscAlControl = 0x0000; +/*ECATCHANGE_START(V5.13) MBX1*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 3891 to 3897 deleted*/ UINT8 sm1Activate = SM_SETTING_ENABLE_VALUE; + UINT8 sm1Status = 0; /*SM1 status need to be read (not MBX_READ_EVENT) to handle readframes with invalid CRCs*/ +/*ECATCHANGE_END(V5.13) MBX1*/ /* check if services are stored in the mailbox */ MBX_Main(); +/*ET9300 Project Handler :(#if COE_SUPPORTED && TEST_APPLICATION) lines 3909 to 3949 deleted*/ if ( bMbxRunning ) { /* Slave is at least in PREOP, Mailbox is running */ + +/*ECATCHANGE_START(V5.13) MBX1*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 3956 to 3968 deleted*/ /* get the Activate-Byte of SM 1 (Register 0x80E) to check if a mailbox repeat request was received */ HW_EscReadByte(sm1Activate,(ESC_SYNCMAN_ACTIVE_OFFSET + SIZEOF_SM_REGISTER)); + + HW_EscReadByte(sm1Status, (ESC_SYNCMAN_STATUS_OFFSET + SIZEOF_SM_REGISTER)); +/*ECATCHANGE_END(V5.13) MBX1*/ } /* Read AL Event-Register from ESC */ ALEventReg = HW_GetALEventRegister(); ALEventReg = SWAPWORD(ALEventReg); +/*ET9300 Project Handler :(#if ESC_EEPROM_EMULATION) lines 3982 to 3987 deleted*/ if ((ALEventReg & AL_CONTROL_EVENT) && !bEcatWaitForAlControlRes) { /* AL Control event is set, get the AL Control register sent by the Master to acknowledge the event (that the corresponding bit in the AL Event register will be reset) */ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 3993 to 4002 deleted*/ + HW_EscReadByte( EscAlControl, ESC_AL_CONTROL_OFFSET); EscAlControl = SWAPWORD(EscAlControl); - /*Evaluate if register 0x120 Bit5 (Request Explicit DeviceID) is set*/ - bExplicitDevIdRequested = ((EscAlControl & (UINT16)STATE_DEVID)>>5); +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 4008 to 4023 deleted*/ + +/*ET9300 Project Handler :(#if EXPLICIT_DEVICE_ID) lines 4025 to 4042 deleted*/ /* reset AL Control event and the SM Change event (because the Sync Manager settings will be checked in AL_ControlInd, too)*/ - ALEventReg &= ~((AL_CONTROL_EVENT) | (SM_CHANGE_EVENT)); + ALEventReg &= ~((AL_CONTROL_EVENT) | (SM_CHANGE_EVENT)); - AL_ControlInd((UINT8)EscAlControl, 0); /* in AL_ControlInd the state transition will be checked and done */ - - /* SM-Change-Event was handled too */ + AL_ControlInd((UINT8)EscAlControl, 0); /* in AL_ControlInd the state transition will be checked and done */ + + /* SM-Change-Event was handled too */ + +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 4052 to 4054 deleted*/ } if ( (ALEventReg & SM_CHANGE_EVENT) && !bEcatWaitForAlControlRes && (nAlStatus & STATE_CHANGE) == 0 && (nAlStatus & ~STATE_CHANGE) != STATE_INIT ) @@ -2546,11 +2741,15 @@ void ECAT_Main(void) AL_ControlInd(nAlStatus & STATE_MASK, 0); } - if ( ALEventReg & (MAILBOX_READ_EVENT) ) +/*ECATCHANGE_START(V5.13) MBX1*/ + if (((sm1Status & SM_STATUS_MBX_BUFFER_FULL) == 0) + && bSendMbxIsFull) +/*ECATCHANGE_END(V5.13) MBX1*/ { /* SM 1 (Mailbox Read) event is set, when the mailbox was read from the master, to acknowledge the event the first byte of the mailbox has to be written, by writing the first byte the mailbox is locked, too */ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 4095 to 4101 deleted*/ u8dummy = 0; HW_EscWriteByte(u8dummy,u16EscAddrSendMbx); @@ -2560,19 +2759,23 @@ void ECAT_Main(void) MBX_MailboxReadInd(); } - /* bMbxRepeatToggle holds the last state of the Repeat Bit (Bit 1) */ +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 4112 to 4115 deleted*/ + /* bMbxRepeatToggle holds the last state of the Repeat Bit (Bit 1) */ - if ( ( (sm1Activate & SM_SETTING_REPAET_REQ_MASK) && !bMbxRepeatToggle ) - ||( !(sm1Activate & SM_SETTING_REPAET_REQ_MASK) && bMbxRepeatToggle )) - { - /* Repeat Bit (Bit 1) has toggled, there is a repeat request, in MBX_MailboxRepeatReq the correct - response will put in the send mailbox again */ - MBX_MailboxRepeatReq(); - /* acknowledge the repeat request after the send mailbox was updated by writing the Repeat Bit - in the Repeat Ack Bit (Bit 1) of the PDI Ctrl-Byte of SM 1 (Register 0x80F) */ - sm1Activate &= SM_SETTING_REPEAT_ACK; - HW_EscWriteByte(sm1Activate,(ESC_SM_PDICONTROL_OFFSET + SIZEOF_SM_REGISTER)); - } + if (((sm1Activate & SM_SETTING_REPAET_REQ_MASK) && !bMbxRepeatToggle) + || (!(sm1Activate & SM_SETTING_REPAET_REQ_MASK) && bMbxRepeatToggle)) + { + /* Repeat Bit (Bit 1) has toggled, there is a repeat request, in MBX_MailboxRepeatReq the correct + response will put in the send mailbox again */ + MBX_MailboxRepeatReq(); + /* acknowledge the repeat request after the send mailbox was updated by writing the Repeat Bit + in the Repeat Ack Bit (Bit 1) of the PDI Ctrl-Byte of SM 1 (Register 0x80F) */ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 4126 to 4150 deleted*/ + sm1Activate &= SM_SETTING_REPEAT_ACK; + HW_EscWriteByte(sm1Activate, (ESC_SM_PDICONTROL_OFFSET + SIZEOF_SM_REGISTER)); + } + +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 4156 to 4162 deleted*/ /* Reload the AlEvent because it may be changed due to a SM disable, enable in case of an repeat request */ ALEventReg = HW_GetALEventRegister(); @@ -2588,6 +2791,7 @@ void ECAT_Main(void) ALEventReg &= ~(MAILBOX_WRITE_EVENT); MBX_CheckAndCopyMailbox(); +/*ET9300 Project Handler :(#if TEST_APPLICATION && !MAILBOX_QUEUE) lines 4178 to 4183 deleted*/ } } } diff --git a/ecatslv.h b/ecatslv.h index 2a2dab2..b97992f 100644 --- a/ecatslv.h +++ b/ecatslv.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -12,8 +13,11 @@ \file ecatslv.h \author EthercatSSC@beckhoff.com -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 EMCY1: update emergency diagcodes for invalid sm configuration
+V5.13 ESM1: local error handling update, ECAT_StateChange triggers only transitions from Op->Any or reject/accept a pending transition

Changes to version V5.11:
V5.12 COE4: add timestamp object (0x10F8) and update diagnosis handling
V5.12 ECAT6: remove mailbox SyncManager if no mailbox is supported (SM0 Output, SM1 Input)
@@ -41,6 +45,7 @@ V5.01 : Start file change log #include "ecat_def.h" +/*ET9300 Project Handler :(#if EL9800_HW #elif FC1100_HW #elif MCI_HW) lines 47 to 53 deleted*/ #include "esc.h" #include "f2838x_cm_hw.h" @@ -60,6 +65,7 @@ V5.01 : Start file change log #define OBJGETNEXTSTR(p) ( (OBJCONST CHAR OBJMEM * )( &((p)[OBJSTRLEN( (OBJCONST CHAR OBJMEM *) (p) ) + 1]) ) ) /**< \brief Macro to get next name within the objetc name string*/ #endif +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 75 to 115 deleted*/ #ifndef LO_BYTE #define LO_BYTE 0 /**< \brief LowByte within an WORD*/ #endif @@ -133,19 +139,19 @@ V5.01 : Start file change log #endif #ifndef BIT2BYTE - #define BIT2BYTE(x) (((x)+7)>>3) /**< \brief Marco to convert Bit size to Byte size (round up)*/ + #define BIT2BYTE(x) (((x)+7)>>3) /**< \brief Macro to convert Bit size to Byte size (round up)*/ #endif #ifndef BYTE2BIT - #define BYTE2BIT(x) ((x)<<3) /**< \brief Marco to convert Byte size to Bit size*/ + #define BYTE2BIT(x) ((x)<<3) /**< \brief Macro to convert Byte size to Bit size*/ #endif #ifndef BIT2WORD - #define BIT2WORD(x) (((x)+15)>>4) /**< \brief Marco to convert Bit size to Word size (round up)*/ + #define BIT2WORD(x) (((x)+15)>>4) /**< \brief Macro to convert Bit size to Word size (round up)*/ #endif #ifndef BYTE2WORD - #define BYTE2WORD(x) (((x)+1)>>1) /**< \brief Marco to convert Bytes size to Word size (round up)*/ + #define BYTE2WORD(x) (((x)+1)>>1) /**< \brief Macro to convert Bytes size to Word size (round up)*/ #endif #ifndef ROUNDUPBYTE2WORD @@ -165,6 +171,7 @@ V5.01 : Start file change log #define STATE_MASK ((UINT8) 0x0F) /**< \brief State mask*/ #define STATE_CHANGE ((UINT8) 0x10) /**< \brief State change (Error indication/acknowledge) mask and value*/ #define STATE_DEVID ((UINT8) 0x20) /**< \brief Request/response Explicit device ID*/ +#define STATE_VALID(x) ((((x) & STATE_MASK) == STATE_INIT) || (((x) & STATE_MASK) == STATE_PREOP) || (((x) & STATE_MASK) == STATE_SAFEOP) || (((x) & STATE_MASK) == STATE_OP)) /**< \brief Check if one of the mandatory supported state values are set*/ #define BOOT_2_INIT ((UINT8)((STATE_BOOT) << 4) | (STATE_INIT)) /**< \brief State transition BOOT to INIT*/ #define BOOT_2_PREOP ((UINT8)((STATE_BOOT) << 4) | (STATE_PREOP)) /**< \brief State transition BOOT to INIT*/ @@ -202,16 +209,16 @@ V5.01 : Start file change log ESM transition error codes */ - -#define SYNCMANCHODDADDRESS 0x00 /**< \brief Emergency and Diagnosis code for an odd SyncManager address*/ +/*ECATCHANGE_START(V5.13) EMCY1*/ +#define SYNCMANCHSIZE 0x00 /**< \brief Emergency and Diagnosis code for an invalid SyncManager size*/ #define SYNCMANCHADDRESS 0x01 /**< \brief Emergency and Diagnosis code for an invalid SyncManager address*/ -#define SYNCMANCHSIZE 0x02 /**< \brief Emergency and Diagnosis code for an invalid SyncManager size*/ -#define SYNCMANCHSETTINGS 0x03 /**< \brief Emergency and Diagnosis code for an invalid SyncManager settings*/ -#define ERROR_SYNCMANCH(code, channel) ((code)+((channel)<<2)) /**< \brief Marco to add SyncManager channel*/ -#define ERROR_SYNCMANCHODDADDRESS(channel) ((SYNCMANCHODDADDRESS)+((channel)<<2)) /**< \brief Marco to add SyncManager channel*/ -#define ERROR_SYNCMANCHADDRESS(channel) ((SYNCMANCHADDRESS)+((channel)<<2)) /**< \brief Marco to add SyncManager channel*/ -#define ERROR_SYNCMANCHSIZE(channel) ((SYNCMANCHSIZE)+((channel)<<2)) /**< \brief Marco to add SyncManager channel*/ -#define ERROR_SYNCMANCHSETTINGS(channel) ((SYNCMANCHSETTINGS)+((channel)<<2)) /**< \brief Marco to add SyncManager channel*/ +#define SYNCMANCHSETTINGS 0x02 /**< \brief Emergency and Diagnosis code for an invalid SyncManager settings*/ +#define ERROR_SYNCMANCH(code, channel) ((code)+((channel)<<2)) /**< \brief Macro to add SyncManager channel*/ + +/*ECATCHANGE_END(V5.13) EMCY1*/ +#define ERROR_SYNCMANCHADDRESS(channel) ((SYNCMANCHADDRESS)+((channel)<<2)) /**< \brief Macro to add SyncManager channel*/ +#define ERROR_SYNCMANCHSIZE(channel) ((SYNCMANCHSIZE)+((channel)<<2)) /**< \brief Macro to add SyncManager channel*/ +#define ERROR_SYNCMANCHSETTINGS(channel) ((SYNCMANCHSETTINGS)+((channel)<<2)) /**< \brief Macro to add SyncManager channel*/ #define ERROR_SYNCTYPES 0x80 /**< \brief Emergency and Diagnosis code for an invalid Sync types*/ #define ERROR_DCSYNCCONTROL 0x81 /**< \brief Emergency and Diagnosis code for an invalid DC Sync control*/ #define ERROR_DCSYNC0CYCLETIME 0x82 /**< \brief Emergency and Diagnosis code for an invalid Sync0 cycle time*/ @@ -294,8 +301,8 @@ V5.01 : Start file change log #define ALSTATUSCODE_MODULE_ID_LIST_NOT_MATCH 0x0070 /**< \brief Detected Module Ident List (0xF030) and Configured Module Ident List (0xF050) does not match*/ #define ALSTATUSCODE_SUPPLY_VOLTAGE_TOO_LOW 0x0080 /**< \brief The slave supply voltage is too low*/ #define ALSTATUSCODE_SUPPLY_VOLTAGE_TOO_HIGH 0x0081 /**< \brief The slave supply voltage is too high*/ -#define ALSTATUSCODE_TEMPERATURE_TOO_LOW 0x0080 /**< \brief The slave temperature is too low*/ -#define ALSTATUSCODE_TEMPERATURE_TOO_HIGH 0x0081 /**< \brief The slave temperature is too high*/ +#define ALSTATUSCODE_TEMPERATURE_TOO_LOW 0x0082 /**< \brief The slave temperature is too low*/ +#define ALSTATUSCODE_TEMPERATURE_TOO_HIGH 0x0083 /**< \brief The slave temperature is too high*/ @@ -321,11 +328,13 @@ V5.01 : Start file change log #define MAILBOX_READ_EVENT ((UINT16) 0x0200) /**< \brief MBoxIn read event*/ #define PROCESS_OUTPUT_EVENT ((UINT16) 0x0400) /**< \brief Output process data write event*/ #define PROCESS_INPUT_EVENT ((UINT16) 0x0800) /**< \brief Input process data read event*/ +/*ET9300 Project Handler :(#if MAILBOX_SUPPORTED #else) lines 380 to 383 deleted*/ #define MAILBOX_WRITE 0 /**< \brief SyncManager ID for MBoxOut (master to slave)*/ #define MAILBOX_READ 1 /**< \brief SyncManager ID for MBoxIn (slave to master)*/ #define PROCESS_DATA_OUT 2 /**< \brief SyncManager ID for output process data (master to slave)*/ #define PROCESS_DATA_IN 3 /**< \brief SyncManager ID for input process data (slave to master)*/ +/*ET9300 Project Handler :(#if MAILBOX_SUPPORTED #else) lines 390 to 393 deleted*/ @@ -345,6 +354,7 @@ V5.01 : Start file change log #define LED_INVERT_DOUBLEFLASH 0xC2 /**< \brief LED invert double flash*/ #define LED_ON 0x01 /**< \brief LED on*/ +/*ET9300 Project Handler :(#elif ESC_SUPPORT_ECAT_LED) lines 414 to 422 deleted*/ #define MEMORY_START_ADDRESS 0x1000 /**< \brief ESC DPRAM start address*/ @@ -355,6 +365,7 @@ V5.01 : Start file change log #endif #ifndef DC_EVENT_MASK #define DC_EVENT_MASK PROCESS_OUTPUT_EVENT /**< \brief AL Event mask (value of register 0x204) in case of DC synchronisation*/ +/*ET9300 Project Handler :(#if MAX_PD_OUTPUT_SIZE > 0 #else) lines 434 to 436 deleted*/ #endif @@ -370,6 +381,7 @@ V5.01 : Start file change log ------ Global Variables ------ -----------------------------------------------------------------------------------------*/ +/*ET9300 Project Handler :(#if BOOTSTRAPMODE_SUPPORTED) lines 452 to 454 deleted*/ PROTO BOOL bEcatOutputUpdateRunning; /**< \brief Indicates the OP state, will be set in StartOutputHandler and reset in StopOutputHandler*/ @@ -409,9 +421,9 @@ PROTO UINT16 Sync1WdValue; /**< \brief Sync1 watchdog PROTO UINT16 LatchInputSync0Value; /**< \brief Sync0 event on which the inputs shall be latched and copied to the ESC buffer. If the inputs shall be latched base don Sync1 the value is set to 0.*/ PROTO UINT16 LatchInputSync0Counter; /**< \brief Sync0 counter used to get the Sync0 event to latch the Inputs. */ -/*ECATCHANGE_START(V5.12) COE4*/ PROTO BOOL b32BitDc; -/*ECATCHANGE_END(V5.12) COE4*/ + +/*ET9300 Project Handler :(#if !COE_SUPPORTED) lines 500 to 502 deleted*/ PROTO BOOL bEscIntEnabled; /**< \brief Indicates that the ESC interrupt is enabled (SM2/3 or SYNC0/1-event), @@ -419,8 +431,10 @@ PROTO BOOL bEscIntEnabled; /**< \brief Indicates th PROTO BOOL b3BufferMode; /**< \brief Indicates that inputs and outputs are running in 3-Buffer-Mode*/ -PROTO BOOL bLocalErrorFlag; /**< \brief Contains the information if the application has a local error*/ +/*ECATCHANGE_START(V5.13) ESM1*/ PROTO UINT16 u16LocalErrorCode; /**< \brief Reason for local error*/ +PROTO UINT8 u8LocalErrorState; /**< \brief State of the current local error (lower state could be set by the master)*/ +/*ECATCHANGE_END(V5.13) ESM1*/ PROTO BOOL bApplEsmPending; /**< \brief Indicates if the local application ESM function need to be called from Al_ConntrolRes (is true if NOERR_INWORK is returned by generic ESM function)*/ PROTO BOOL bEcatWaitForAlControlRes; /**< \brief Contains the information that the state machine waits for an acknowledge for the last AL_ControlInd from the application/generic stack*/ @@ -441,10 +455,11 @@ PROTO UINT16 nMaxEscAddress; /**< \brief Max supporte PROTO UINT8 nAlStatus; /**< \brief Contains the actual AL Status, will be written in AL_ControlInd*/ -PROTO BOOL bExplicitDevIdRequested; /**< \brief Indicates if 0x0120.5 is set*/ +/*ET9300 Project Handler :(#if EXPLICIT_DEVICE_ID) lines 536 to 538 deleted*/ PROTO UINT16 EcatWdValue; /**< \brief Contains the value of the watchdog in ms, will be written in StartInputHandler. In case that the ESC watchdog feature is used this variable just indicates if the watchdog is enabled or disabled*/ +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 542 to 546 deleted*/ PROTO UINT16 nEscAddrOutputData; /**< \brief Contains the SM address for the output process data*/ PROTO UINT16 nEscAddrInputData; /**< \brief Contains the SM address for the input process data*/ @@ -459,6 +474,7 @@ PROTO void DisableSyncManChannel(UINT8 channel); PROTO TSYNCMAN ESCMEM *GetSyncMan(UINT8 channel); PROTO void SetALStatus(UINT8 alStatus, UINT16 alStatusCode); PROTO void AL_ControlInd(UINT8 alControl, UINT16 alStatusCode); +/*ET9300 Project Handler :(#if !ESC_SM_WD_SUPPORTED) lines 565 to 569 deleted*/ PROTO void DC_CheckWatchdog(void); PROTO void CheckIfEcatError(void); PROTO void ECAT_Init(void); diff --git a/esc.h b/esc.h index e7bde6a..6fd056f 100644 --- a/esc.h +++ b/esc.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -45,18 +46,21 @@ V5.01 : Start file change log #define BL_PAGE_SIZE 512 /*--------------------------------------------- -- ESC Offsets (Detailed Information about the registers are located in the ESC Datasheets e.g. ET1100 Datasheet www.beckhoff.com/english.asp?download/ethercat_development_products.htm?id=71003127100387) +- ESC Offsets (Detailed Information about the registers are located in the ESC Datasheets e.g. ET1100 Datasheet http://www.beckhoff.com/english.asp?download/ethercat_development_products.htm?id=71003127100387) -----------------------------------------------*/ #define ESC_INFO_OFFSET 0x0000 /**< \brief ESC information registers startoffset*/ #define ESC_COMM_INFO_OFFSET 0x0004 /**< \brief Communication information registers startoffset*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 54 to 59 deleted*/ #define ESC_DPRAM_SIZE_OFFSET 0x0006 /**< \brief Register Description: Size of the supported DPRAM in KB*/ +/*ET9300 Project Handler :(#if ESC_16BIT_ACCESS) lines 61 to 65 deleted*/ #define ESC_SM_CHANNELS_OFFSET 0x0005 /**< \brief Register Description: Number of supported SyncManager channels (or entities) of the EtherCAT Slave Controller*/ #define ESC_FEATURES_OFFSET 0x0008 /**< \brief Register indicating ESC features*/ #define ESC_DC_32BIT_MASK 0x00000008 /**< \brief register 0x0008.3 indicates if the DC Unit supports 32Bit/64Bit DC*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 73 to 75 deleted*/ #define ESC_SLAVE_ADDRESS_OFFSET 0x0010 /**< \brief Register Description: Address used for node addressing (FPxx commands)*/ @@ -70,8 +74,15 @@ V5.01 : Start file change log #define ESC_ERROR_LED_OVERRIDE 0x0139 /**< \brief Register Description: Set Ecat Error indication via ESC. (not all ESC types support this feature)*/ #define ESC_PDI_CONTROL_OFFSET 0x0140 /**< \brief Register Description: Specifies the process data interface*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 89 to 91 deleted*/ #define ESC_DEVICE_EMULATION 0x0100 /**< \brief Device emulation bit*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS || ESC_16BIT_ACCESS) lines 95 to 99 deleted*/ +#define ESC_PDI_CONFIGURATION 0x0151 /**< \brief Register Description: PDI configuration register (values defined by the ESC configuration data)*/ +#define ESC_SYNC0_MAPPED_TO_ALEVENT 0x08 /**< \brief bit indicating if the Sync0 event is mapped to the AL Event register*/ +#define ESC_SYNC1_MAPPED_TO_ALEVENT 0x80 /**< \brief bit indicating if the Sync1 event is mapped to the AL Event register*/ + + #define ESC_AL_EVENTMASK_OFFSET 0x0204 /**< \brief Register Description: AL Event masking of the AL Event Request register Events for mapping to PDI IRQ signal*/ #define ESC_AL_EVENT_OFFSET 0x0220 /**< \brief Register Description: "Mirror" register for ESC events*/ @@ -79,9 +90,11 @@ V5.01 : Start file change log #define ESC_PD_WD_TIME 0x0420 /**< \brief Register Description: Number of basic watchdog increments (Default value with Watchdog divider 100us means 100ms Watchdog)*/ #define ESC_PD_WD_STATE 0x0440 /**< \brief Register Description: Watchdog Status of Process Data (triggered by SyncManagers)*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 113 to 115 deleted*/ #define ESC_PD_WD_TRIGGER_MASK 0x0001 /**< \brief Trigger state of the process data watchdog*/ #define ESC_EEPROM_CONFIG_OFFSET 0x0500 /**< \brief Register Description: EEPROM Access Configuration*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 120 to 138 deleted*/ /*EEPROM config and access state bit mask (based on "ESC_EEPROM_CONFIG_OFFSET") - START*/ #define ESC_EEPROM_ASSIGN_TO_PDI_MASK 0x0001 /**< \brief Description (0x500.0): PDI has EEPROM control*/ #define ESC_EEPROM_LOCKED_BY_PDI_MASK 0x0100 /**< \brief Description (0x500.8): PDI locked EEPROM access*/ @@ -115,34 +128,41 @@ V5.01 : Start file change log #define ESC_SYSTEMTIME_OFFSET 0x0910 /**< \brief Register Description: Local copy of the System Time*/ #define ESC_DC_UNIT_CONTROL_OFFSET 0x0980 /**< \brief Register Description: Control registers for Cycle and Sync Unit (can be predefined with the "AssignActivate" Element in the device description, for further information see ETG.2000)*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 179 to 190 deleted*/ #define ESC_DC_SYNC_ACTIVATION_OFFSET 0x0981 /**< \brief Register Description: Sync Configuration*/ #define ESC_DC_SYNC_UNIT_ACTIVE_MASK 0x01 /**< \brief Description (0x981.0): Sync Out Unit is activated*/ #define ESC_DC_SYNC0_ACTIVE_MASK 0x02 /**< \brief Description (0x981.1): Sync0 generation is activated*/ #define ESC_DC_SYNC1_ACTIVE_MASK 0x04 /**< \brief Description (0x981.2): Sync1 generation is activated*/ #define ESC_DC_SYNC_UNIT_AUTO_ACTIVE_MASK 0x08 /**< \brief Description (0x980.11): Sync Out Unit is activated automatic when System time was written*/ +#define ESC_DC_SYNC_STATUS 0x098C /**< \brief Register Description: register 0x98E and 0x98F reflecting the status of Sync0 and Sync1*/ + #define ESC_DC_SYNC0_CYCLETIME_OFFSET 0x09A0 /**< \brief Register Description: 32Bit Time between two consecutive SYNC0 pulses in ns*/ #define ESC_DC_SYNC1_CYCLETIME_OFFSET 0x09A4 /**< \brief Register Description: 32Bit Time between two consecutive SYNC1 pulses in ns*/ +/*ET9300 Project Handler :(#if FC1100_HW) lines 205 to 207 deleted*/ /*--------------------------------------------- - Sync Manager -----------------------------------------------*/ -/** \brief SyncManager Register struture*/ +/** \brief SyncManager register structure*/ typedef struct STRUCT_PACKED_START { +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 217 to 259 deleted*/ UINT16 PhysicalStartAddress; /**< \brief SyncManager address*/ UINT16 Length; /**< \brief SyncManager length*/ +/*ET9300 Project Handler :(#if ESC_16BIT_ACCESS) lines 264 to 303 deleted*/ //ESC_8BIT ACCESS UINT8 Settings[4]; /**< \brief Register values 0x0804 : 0x0807*/ /*Defines to access : * - SM Control register 0x0804 */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 310 to 312 deleted*/ #define SM_SETTING_CONTROL_OFFSET 0 /**< \brief Offset to value of register 0x0804*/ #define SM_SETTING_MODE_MASK 0x02 /**< \brief SyncManager mode mask*/ #define SM_SETTING_MODE_THREE_BUFFER_VALUE 0x00 /**< \brief SyncManager 3Buffer mode value*/ @@ -155,11 +175,13 @@ typedef struct STRUCT_PACKED_START /*Defines to access : * - SM Status register 0x0805 */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 326 to 328 deleted*/ #define SM_SETTING_STATUS_OFFSET 1 /**< \brief Offset to value of register 0x0805*/ #define SM_STATUS_MBX_BUFFER_FULL 0x08 /**< \brief Indicates in one buffer mode if buffer was completely written (based on "ESC_SYNCMAN_STATUS_OFFSET")*/ /*Defines to access : * - SM Active register 0x0806 */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 335 to 337 deleted*/ #define SM_SETTING_ACTIVATE_OFFSET 2 /**< \brief Offset to value of register 0x0806*/ #define SM_SETTING_ENABLE_VALUE 0x01 /**< \brief SyncManager enable*/ #define SM_SETTING_REPAET_REQ_MASK 0x02 /**< \brief SyncManager Repeat request*/ @@ -168,6 +190,7 @@ typedef struct STRUCT_PACKED_START /*Defines to access : * - SM PDI COntrol register 0x0807 */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 347 to 349 deleted*/ #define SM_SETTING_PDICONTROL_OFFSET 3 /**< \brief Offset to value of register 0x0807*/ #define SM_SETTING_PDI_DISABLE 0x01 /**< \brief Bit0 of register 0x0807 (if 1 SM is disabled from PDI)*/ #define SM_SETTING_REPEAT_ACK 0x02 /**< \brief Bit1 of register 0x0807*/ @@ -175,6 +198,7 @@ typedef struct STRUCT_PACKED_START TSYNCMAN; +/*ET9300 Project Handler :(#if FC1100_HW) lines 361 to 363 deleted*/ #endif //_ESC_H_ /** @}*/ diff --git a/foeappl.c b/foeappl.c new file mode 100644 index 0000000..6fe86d9 --- /dev/null +++ b/foeappl.c @@ -0,0 +1,299 @@ +/* +* This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. +* The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf +*/ + +/** +\addtogroup FoE FileTransfer over EtherCAT +@{ +*/ + +/** +\file foeappl.c +\author EthercatSSC@beckhoff.com +\brief Implementation +This file contains an example how to use the FoE services + +\version 5.12 + +
Changes to version V5.11:
+V5.12 FOE1: update new interface,move the FoE sample to sampleappl,add FoE application callback functions
+
Changes to version V5.10:
+V5.11 FOE2: FoE_Read() check File name buffer before store the requested file name, add string terminator
+V5.11 TEST5: send a FoE busy on a FoE read request
+V5.11 TEST9: "add behaviour 0x2020.7 (SDO requests on 0x3006.0 are set to pending until an FoE read request on ""UnlockSdoResp"" is received or in case that no mbx queue is supported when a new mbx request was received)"
+
Changes to version V5.0:
+V5.10 FOE2: Update file handling to support File sizes greater than 0x8000 Bytes (change value of "FOE_MAXDATA")
+
Changes to version V4.20:
+V5.0 FOE3: Add additional file name copy operation to provide name byte swapping
+V5.0 FOE5: Add FoE test operation (FOE_SAVE_FILES need to be disabled). On download only the files size is save. On upload a file with incrementing content and the previous downloaded size will be created.
+V5.0 FOE6: Save file if MBX 16Bit access is enabled
+
Changes to version V4.11:
+V4.20 FOE 2: Add File store compiler switch
+V4.20 FOE 1: Removed FILESUPPORT
+V4.11 FOE 1: nFileWriteOffset is now a 32bit variable to extend the maximum file size
+
Changes to version V3.20:
+V4.10 FOE 1-14: Filetransfer over FoE: Files can be read and stored to harddisk
+ without any filesizelimitation (FILESUPPORT must defined) +*/ + +/*----------------------------------------------------------------------------------------- +------ +------ Includes +------ +-----------------------------------------------------------------------------------------*/ + +#include "ecat_def.h" + + +#include "ecatslv.h" + +#include "ecatfoe.h" + +#define _FOEAPPL_ 1 + #include "foeappl.h" +#undef _FOEAPPL_ +#define _FOEAPPL_ 0 + +/*ET9300 Project Handler :(#if BOOTSTRAPMODE_SUPPORTED) lines 59 to 61 deleted*/ + + +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 64 to 66 deleted*/ + +#include "applInterface.h" + +/*----------------------------------------------------------------------------------------- +------ +------ internal Types and Defines +------ +-----------------------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------------------- +------ +------ Module internal function declarations +------ +-----------------------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------------------- +------ +------ Module internal variable definitions +------ +-----------------------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------------------- +------ +------ Functions +------ +-----------------------------------------------------------------------------------------*/ + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \param pName Pointer to the name of the file + \param nameSize Length of the file name + \param pData Pointer to the response data + \param password Password for the file read + + \return size of the data to be sent, busy or an error code + 1..FOE_MAXBUSY-101 (size of data to be sent) + FOE_MAXBUSY-100 (0%) (busy) + FOE_MAXBUSY (100%) (busy) + ECAT_FOE_ERRCODE_NOTDEFINED (error) + ECAT_FOE_ERRCODE_NOTFOUND (error) + ECAT_FOE_ERRCODE_ACCESS (error) + ECAT_FOE_ERRCODE_DISKFULL (error) + ECAT_FOE_ERRCODE_ILLEGAL (error) + ECAT_FOE_ERRCODE_PACKENO (error) + ECAT_FOE_ERRCODE_EXISTS (error) + ECAT_FOE_ERRCODE_NOUSER (error) + + \brief The function starts a file reading + +*//////////////////////////////////////////////////////////////////////////////////////// + +UINT16 FOE_Read(UINT16 MBXMEM * pName, UINT16 nameSize, UINT16 MBXMEM * pData, UINT32 password) +{ + + if (pAPPL_FoeRead != NULL) + { + return pAPPL_FoeRead(pName, nameSize, password, u16FoeMaxSendBlockSize, pData); + } + + + return ECAT_FOE_ERRCODE_NOTDEFINED; +} + + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \param pName Pointer to the name of the file + \param nameSize Length of the file name + \param password Password for the file read + + \return okay, busy or an error code + 0 (okay) + ECAT_FOE_ERRCODE_NOTDEFINED (error) + ECAT_FOE_ERRCODE_NOTFOUND (error) + ECAT_FOE_ERRCODE_ACCESS (error) + ECAT_FOE_ERRCODE_DISKFULL (error) + ECAT_FOE_ERRCODE_ILLEGAL (error) + ECAT_FOE_ERRCODE_PACKENO (error) + ECAT_FOE_ERRCODE_EXISTS (error) + ECAT_FOE_ERRCODE_NOUSER (error) + + (no busy response shall be returned by this function. + If the slave stack requires some time to handle the incoming data the function FOE_Data() should return busy) + + \brief The function starts a file writing + +*//////////////////////////////////////////////////////////////////////////////////////// + +UINT16 FOE_Write(UINT16 MBXMEM * pName, UINT16 nameSize, UINT32 password) +{ + if (pAPPL_FoeWrite != NULL) + { + return pAPPL_FoeWrite(pName,nameSize,password); + } + + return ECAT_FOE_ERRCODE_NOTDEFINED; +} + + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \param pData Received file data + \param Size Length of received file data + + \return okay, busy or an error code + 0 (okay) + FOE_MAXBUSY-100 (0%) (busy) + FOE_MAXBUSY (100%) (busy) + ECAT_FOE_ERRCODE_NOTDEFINED (error) + ECAT_FOE_ERRCODE_NOTFOUND (error) + ECAT_FOE_ERRCODE_ACCESS (error) + ECAT_FOE_ERRCODE_DISKFULL (error) + ECAT_FOE_ERRCODE_ILLEGAL (error) + ECAT_FOE_ERRCODE_PACKENO (error) + ECAT_FOE_ERRCODE_EXISTS (error) + ECAT_FOE_ERRCODE_NOUSER (error) + + \brief The function is called to write the next part of a file + +*//////////////////////////////////////////////////////////////////////////////////////// + +UINT16 FOE_Data(UINT16 MBXMEM * pData, UINT16 Size) +{ + BOOL bDataFollowing = FALSE; + + if(Size == (u16ReceiveMbxSize - MBX_HEADER_SIZE - FOE_HEADER_SIZE) ) + { + bDataFollowing = TRUE; + } + + if(pAPPL_FoeWriteData != NULL) + { + UINT16 error = 0; + error = pAPPL_FoeWriteData(pData, Size, bDataFollowing); + + if (error > 0) + { + return error; + } + else if (bDataFollowing == FALSE) + { + return FOE_ACKFINISHED; + } + + return 0; + } + + + return ECAT_FOE_ERRCODE_NOTDEFINED; + +} + + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \param fileOffset Offset of the next file data to be sent + \param pData Buffer for file data to be sent + + \return size of the data to be sent, busy or an error code + 0 (all data was sent before) + 1..MAX_FILE_SIZE (size of data to be sent) + FOE_MAXBUSY-100 (0%) (busy) + FOE_MAXBUSY (100%) (busy) + ECAT_FOE_ERRCODE_NOTDEFINED (error) + ECAT_FOE_ERRCODE_NOTFOUND (error) + ECAT_FOE_ERRCODE_ACCESS (error) + ECAT_FOE_ERRCODE_DISKFULL (error) + ECAT_FOE_ERRCODE_ILLEGAL (error) + ECAT_FOE_ERRCODE_PACKENO (error) + ECAT_FOE_ERRCODE_EXISTS (error) + ECAT_FOE_ERRCODE_NOUSER (error) + + \brief The function is called when the reading of a part of a file is acknowledged + +*//////////////////////////////////////////////////////////////////////////////////////// + +UINT16 FOE_Ack(UINT32 fileOffset, UINT16 MBXMEM * pData) +{ + + if (pAPPL_FoeReadData != NULL) + { + return pAPPL_FoeReadData(fileOffset, u16FoeMaxSendBlockSize, pData); + } + + return ECAT_FOE_ERRCODE_NOTDEFINED; +} + + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \param done Indicates how much of the busy action is done + \param fileOffset Offset of the next file data to be sent + \param pData Buffer for file data to be sent + + \return size of the data to be sent, busy or an error code + 0 (all data was sent before) + 1..MAX_FILE_SIZE (size of data to be sent) + FOE_MAXBUSY-100 (0%) (busy) + FOE_MAXBUSY (100%) (busy) + ECAT_FOE_ERRCODE_NOTDEFINED (error) + ECAT_FOE_ERRCODE_NOTFOUND (error) + ECAT_FOE_ERRCODE_ACCESS (error) + ECAT_FOE_ERRCODE_DISKFULL (error) + ECAT_FOE_ERRCODE_ILLEGAL (error) + ECAT_FOE_ERRCODE_PACKENO (error) + ECAT_FOE_ERRCODE_EXISTS (error) + ECAT_FOE_ERRCODE_NOUSER (error) + + \brief The function is called when the reading of a part of a file should be repeated + +*//////////////////////////////////////////////////////////////////////////////////////// + +UINT16 FOE_Busy(UINT16 done, UINT32 fileOffset, UINT16 MBXMEM * pData) +{ + /* send last part again */ + return FOE_Ack(fileOffset, pData); +} + +///////////////////////////////////////////////////////////////////////////////////////// +/** + \param errorCode error code + + \brief The function is called when a file transfer is aborted from the other station + +*//////////////////////////////////////////////////////////////////////////////////////// + +void FOE_Error(UINT32 errorCode) +{ + if (pAPPL_FoeError != NULL) + { + pAPPL_FoeError(errorCode); + } +} + + +/** @} */ + diff --git a/foeappl.h b/foeappl.h new file mode 100644 index 0000000..c927525 --- /dev/null +++ b/foeappl.h @@ -0,0 +1,89 @@ +/* +* This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. +* The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf +*/ + +/** + * \addtogroup FoE FileTransfer over EtherCAT + * @{ + */ + +/** +\file foeappl.h +\author EthercatSSC@beckhoff.com + +\version 5.12 + +
Changes to version V5.01:
+V5.12 FOE1: update new interface,move the FoE sample to sampleappl,add FoE application callback functions
+
Changes to version - :
+V5.01 : Start file change log + */ + +/*----------------------------------------------------------------------------------------- +------ +------ Includes +------ +-----------------------------------------------------------------------------------------*/ +#include "ecat_def.h" + +#ifndef _FOEAPPL_H_ +#define _FOEAPPL_H_ + +/*----------------------------------------------------------------------------------------- +------ +------ Defines and Types +------ +-----------------------------------------------------------------------------------------*/ +/*--------------------------------------------- +- Error Codes +-----------------------------------------------*/ +#define ECAT_FOE_ERRCODE_NOTDEFINED 0x8000 /**< \brief Not defined*/ +#define ECAT_FOE_ERRCODE_NOTFOUND 0x8001 /**< \brief The file requested by an FoE upload service could not be found on the server*/ +#define ECAT_FOE_ERRCODE_ACCESS 0x8002 /**< \brief Read or write access to this file not allowed (e.g. due to local control).*/ +#define ECAT_FOE_ERRCODE_DISKFULL 0x8003 /**< \brief Disk to store file is full or memory allocation exceeded*/ +#define ECAT_FOE_ERRCODE_ILLEGAL 0x8004 /**< \brief Illegal FoE operation, e.g. service identifier invalid*/ +#define ECAT_FOE_ERRCODE_PACKENO 0x8005 /**< \brief FoE packet number invalid*/ +#define ECAT_FOE_ERRCODE_EXISTS 0x8006 /**< \brief The file which is requested to be downloaded does already exist*/ +#define ECAT_FOE_ERRCODE_NOUSER 0x8007 /**< \brief No User*/ +#define ECAT_FOE_ERRCODE_BOOTSTRAPONLY 0x8008 /**< \brief FoE only supported in Bootstrap*/ +#define ECAT_FOE_ERRCODE_NOTINBOOTSTRAP 0x8009 /**< \brief This file may not be accessed in BOOTSTRAP state*/ +#define ECAT_FOE_ERRCODE_NORIGHTS 0x800A /**< \brief Password invalid*/ +#define ECAT_FOE_ERRCODE_PROGERROR 0x800B /**< \brief Generic programming error. Should only be returned if error reason cannot be distinguished*/ +#define ECAT_FOE_ERRCODE_INVALID_CHECKSUM 0x800C /**< \brief checksum included in the file is invalid*/ +#define ECAT_FOE_ERRCODE_INVALID_FIRMWARE 0x800D /**< \brief The hardware does not support the downloaded firmware*/ +#define ECAT_FOE_ERRCODE_NO_FILE 0x800F /**< \brief Do not use (identical with 0x8001)*/ +#define ECAT_FOE_ERRCODE_NO_FILE_HEADER 0x8010 /**< \brief Missing file header of error in file header*/ +#define ECAT_FOE_ERRCODE_FLASH_ERROR 0x8011 /**< \brief Flash cannot be accessed*/ + +#endif //_FOEAPPL_H_ + +#ifdef _FOEAPPL_ + #define PROTO +#else + #define PROTO extern +#endif + + +/*----------------------------------------------------------------------------------------- +------ +------ Global Variables +------ +-----------------------------------------------------------------------------------------*/ + + +/*----------------------------------------------------------------------------------------- +------ +------ Global Functions +------ +-----------------------------------------------------------------------------------------*/ +PROTO UINT16 FOE_Read(UINT16 MBXMEM * pName, UINT16 nameSize, UINT16 MBXMEM * pData, UINT32 password); +PROTO UINT16 FOE_Write(UINT16 MBXMEM * pName, UINT16 nameSize, UINT32 password); +PROTO UINT16 FOE_Data(UINT16 MBXMEM * pData, UINT16 Size); +PROTO UINT16 FOE_Ack(UINT32 fileOffset, UINT16 MBXMEM * pData); +PROTO UINT16 FOE_Busy(UINT16 done, UINT32 fileOffset, UINT16 MBXMEM * pData); +PROTO void FOE_Error(UINT32 errorCode); + +#undef PROTO +/** @}*/ diff --git a/mailbox.c b/mailbox.c index 9408266..a1c124c 100644 --- a/mailbox.c +++ b/mailbox.c @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -71,8 +72,13 @@ psRepeatMbx will be set to 0.
When the repeated mailbox service was sent (call of MBX_MailboxReadInd), psReadMbx will be stored in psRepeatMbx
and psStoreMbx will be sent (in MBX_CopyToSendMailbox) and stored in psReadMbx, psStoreMbx will be set to 0. -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 EOE1:
+V5.13 MBX2: clear unused bytes before write mailbox response
+V5.13 MBX3: fix potential double free memory and lost of last read mailbox data
+V5.13 TEST3: 0x2040.4 send ARP on unsupported mailbox request

Changes to version V5.11:
V5.12 EOE5: free pending buffer in EoE_Init, EoE_Init is called on startup and PI transition
V5.12 MBX1: use only 16Bit variables to write the last byte of the mailbox buffer in case of ESC_16BIT_Access,update clear message queue in case of stop mailbox handler
@@ -134,6 +140,7 @@ V4.07 ECAT 1: The sources for SPI and MCI were merged (in ecat_def.h
#include "ecatslv.h" +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 143 to 145 deleted*/ #define _MAILBOX_ 1 @@ -141,10 +148,13 @@ V4.07 ECAT 1: The sources for SPI and MCI were merged (in ecat_def.h
#undef _MAILBOX_ /*remove definition of _MAILBOX_ (#ifdef is used in mailbox.h)*/ +/*ET9300 Project Handler :(#if SOE_SUPPORTED) lines 153 to 155 deleted*/ +/*ET9300 Project Handler :(#if AOE_SUPPORTED) lines 156 to 158 deleted*/ #include "ecatcoe.h" -/* ECATCHANGE_START(V5.12) MBX3*/ -#include "sdoserv.h" -/* ECATCHANGE_END(V5.12) MBX3*/ +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE || SEGMENTED_SDO_SUPPORTED) lines 161 to 163 deleted*/ +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 165 to 167 deleted*/ +#include "ecatfoe.h" +/*ET9300 Project Handler :(#if EMERGENCY_SUPPORTED) lines 171 to 173 deleted*/ /*-------------------------------------------------------------------------------------- @@ -159,6 +169,7 @@ V4.07 ECAT 1: The sources for SPI and MCI were merged (in ecat_def.h
------ --------------------------------------------------------------------------------------*/ /*variables are declared in ecatslv.c*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 188 to 192 deleted*/ extern VARVOLATILE UINT8 u8dummy; BOOL bNoMbxMemoryAvailable; /**< \brief Indicates if enough dynamic memory is available to handle at least one mailbox datagram */ @@ -264,7 +275,9 @@ void MBX_Init(void) sMbxSendQueue.lastInQueue = 0; sMbxSendQueue.maxQueueSize = MAX_MBX_QUEUE_SIZE; psWriteMbx = NULL; +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 304 to 306 deleted*/ +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 308 to 310 deleted*/ psRepeatMbx = NULL; psReadMbx = NULL; @@ -272,6 +285,7 @@ void MBX_Init(void) bMbxRepeatToggle = FALSE; /*Reset Repeat acknowledge bit of SyncManager1 (0x80F bit 2)*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 318 to 332 deleted*/ { UINT8 sm1Activate = 0; HW_EscReadByte(sm1Activate,(ESC_SM_PDICONTROL_OFFSET + SIZEOF_SM_REGISTER)); @@ -284,6 +298,7 @@ void MBX_Init(void) u8MailboxSendReqStored = 0; u8MbxWriteCounter = 0; u8MbxReadCounter = 0; +/*ET9300 Project Handler :(#if !MAILBOX_QUEUE) lines 346 to 348 deleted*/ } ///////////////////////////////////////////////////////////////////////////////////////// @@ -303,6 +318,7 @@ UINT16 MBX_StartMailboxHandler(void) /* get address of the receive mailbox sync manager (SM0) */ TSYNCMAN ESCMEM * pSyncMan = (TSYNCMAN ESCMEM *)GetSyncMan(MAILBOX_WRITE); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 368 to 373 deleted*/ /* store size of the receive mailbox */ u16ReceiveMbxSize = pSyncMan->Length; /* store the address of the receive mailbox */ @@ -311,6 +327,7 @@ UINT16 MBX_StartMailboxHandler(void) /* get address of the send mailbox sync manager (SM1) */ pSyncMan =(TSYNCMAN ESCMEM *) GetSyncMan(MAILBOX_READ); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 383 to 388 deleted*/ /* store the size of the send mailbox */ u16SendMbxSize = pSyncMan->Length; /* store the address of the send mailbox */ @@ -321,7 +338,9 @@ UINT16 MBX_StartMailboxHandler(void) { return ALSTATUSCODE_INVALIDMBXCFGINPREOP; } +/*ET9300 Project Handler :(#if AOE_SUPPORTED) lines 400 to 408 deleted*/ + u16FoeMaxSendBlockSize = (u16SendMbxSize - SIZEOF(TFOEHEADER) - MBX_HEADER_SIZE); /* enable the receive mailbox sync manager channel */ EnableSyncManChannel(MAILBOX_WRITE); @@ -390,10 +409,13 @@ void MBX_StopMailboxHandler(void) APPL_FreeMailboxBuffer(psReadMbx); } +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 486 to 488 deleted*/ - SODS_ClearPendingResponse(); +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE || SEGMENTED_SDO_SUPPORTED) lines 490 to 492 deleted*/ +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 494 to 496 deleted*/ + FOE_Init(); psWriteMbx = NULL; psRepeatMbx = NULL; @@ -402,6 +424,7 @@ void MBX_StopMailboxHandler(void) bMbxRepeatToggle = FALSE; /*Reset Repeat acknowledge bit of SyncManager1 (0x080F bit 2)*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 511 to 525 deleted*/ { UINT8 sm1Activate = 0; HW_EscReadByte(sm1Activate,(ESC_SM_PDICONTROL_OFFSET + SIZEOF_SM_REGISTER)); @@ -420,8 +443,6 @@ void MBX_StopMailboxHandler(void) if (pMbx) { APPL_FreeMailboxBuffer(pMbx); -/*ECATCHANGE_START(V5.12) MBX1*/ -/*ECATCHANGE_END(V5.12) MBX1*/ } } while (pMbx != NULL); @@ -431,11 +452,11 @@ void MBX_StopMailboxHandler(void) if (pMbx) { APPL_FreeMailboxBuffer(pMbx); -/*ECATCHANGE_START(V5.12) MBX1*/ -/*ECATCHANGE_END(V5.12) MBX1*/ } } while (pMbx != NULL); +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 557 to 559 deleted*/ +/*ET9300 Project Handler :(#if EMERGENCY_SUPPORTED) lines 561 to 563 deleted*/ } ///////////////////////////////////////////////////////////////////////////////////////// @@ -450,15 +471,27 @@ UINT8 MailboxServiceInd(TMBX MBXMEM *pMbx) { UINT8 result; +/*ET9300 Project Handler :(#if BOOTSTRAPMODE_SUPPORTED) lines 578 to 584 deleted*/ switch ( (pMbx->MbxHeader.Flags[MBX_OFFS_TYPE] & MBX_MASK_TYPE) >> MBX_SHIFT_TYPE ) { +/*ET9300 Project Handler :(#if AOE_SUPPORTED) lines 588 to 594 deleted*/ case MBX_TYPE_COE: /* CoE datagram received */ result = COE_ServiceInd((TCOEMBX MBXMEM *) pMbx); break; +/*ET9300 Project Handler :(#if SOE_SUPPORTED) lines 602 to 608 deleted*/ +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 609 to 619 deleted*/ + case MBX_TYPE_FOE: + /* FoE datagram received */ + result = FOE_ServiceInd((TFOEMBX MBXMEM *) pMbx); + break; + +/*ET9300 Project Handler :(#if VOE_SUPPORTED) lines 627 to 633 deleted*/ default: + +/*ET9300 Project Handler :(#if TEST_APPLICATION && EOE_SUPPORTED) lines 636 to 704 deleted*/ result = MBXERR_UNSUPPORTEDPROTOCOL; break; } @@ -499,6 +532,7 @@ void MBX_MailboxWriteInd(TMBX MBXMEM *pMbx) and unchanged */ if ( mbxCounter == 0 || mbxCounter != u8MbxWriteCounter ) { +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 745 to 769 deleted*/ /* new mailbox service received */ /* mbxCounter = 0: old EtherCAT master */ /* new MBX service received, store the new mailbox counter */ @@ -508,6 +542,7 @@ void MBX_MailboxWriteInd(TMBX MBXMEM *pMbx) /* check the protocol type and call the XXXX_ServiceInd-function */ result = PutInMbxQueue(pMbx, &sMbxReceiveQueue); +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 780 to 782 deleted*/ } if ( result != 0 ) @@ -526,6 +561,7 @@ void MBX_MailboxWriteInd(TMBX MBXMEM *pMbx) APPL_FreeMailboxBuffer(pMbx); pMbx = NULL; +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 802 to 805 deleted*/ } } @@ -538,13 +574,21 @@ void MBX_MailboxReadInd(void) { bSendMbxIsFull = FALSE; +/*ET9300 Project Handler :(#if TEST_APPLICATION && EOE_SUPPORTED) lines 818 to 823 deleted*/ // HBu 02.05.06: the pointer psRepeatMbx is only free if there is no stored // mailbox service from the last repeat - if ( psRepeatMbx && psStoreMbx == NULL ) + if (psRepeatMbx && psStoreMbx == NULL) { - /* the last sent service is not stored for repeat any longer */ - APPL_FreeMailboxBuffer(psRepeatMbx); - psRepeatMbx = NULL; + /* the last sent service is not stored for repeat any longer */ +/*ECATCHANGE_START(V5.13) MBX3*/ + if (psReadMbx != psRepeatMbx) + { + APPL_FreeMailboxBuffer(psRepeatMbx); + psRepeatMbx = NULL; + } +/*ECATCHANGE_END(V5.13) MBX3*/ + +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 838 to 840 deleted*/ } /* the actual sent service has to be stored for repeat */ @@ -559,7 +603,9 @@ void MBX_MailboxReadInd(void) } else { - TMBX MBXMEM *pMbx = GetOutOfMbxQueue(&sMbxSendQueue); + TMBX MBXMEM* pMbx = GetOutOfMbxQueue(&sMbxSendQueue); + + if (pMbx) { MBX_CopyToSendMailbox(pMbx); @@ -569,6 +615,7 @@ void MBX_MailboxReadInd(void) if ( u8MailboxSendReqStored ) { /* there are mailbox services stored to be sent */ +/*ET9300 Project Handler :(#if EMERGENCY_SUPPORTED) lines 869 to 880 deleted*/ if ( u8MailboxSendReqStored & COE_SERVICE ) { UINT8 result = 0; @@ -585,6 +632,21 @@ void MBX_MailboxReadInd(void) } } else +/*ET9300 Project Handler :(#if SOE_SUPPORTED) lines 899 to 908 deleted*/ + if ( u8MailboxSendReqStored & FOE_SERVICE ) + { + /* reset the flag indicating that FoE service to be sent was stored */ + u8MailboxSendReqStored &= ~FOE_SERVICE; + /* call FoE function that will send the stored FoE service */ + FOE_ContinueInd(psWriteMbx); + } + else +/*ET9300 Project Handler :(#if VOE_SUPPORTED) lines 919 to 928 deleted*/ +/*ECATCHANGE_START(V5.13) EOE1*/ +/*pending EoE commands are handled from the MBX_Main function*/ +/*ECATCHANGE_END(V5.13) EOE1*/ + +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 934 to 944 deleted*/ { } } @@ -623,6 +685,7 @@ void MBX_MailboxRepeatReq(void) bSendMbxIsFull = FALSE; } +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 983 to 987 deleted*/ MBX_CopyToSendMailbox(pMbx); // HBu 17.06.06: psRepeatMbx has to be set to 0, when it was repeated, otherwise it would be returned twice @@ -699,6 +762,7 @@ UINT8 MBX_MailboxSendReq( TMBX MBXMEM * pMbx, UINT8 flags ) { u8MbxReadCounter++; } +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 1067 to 1070 deleted*/ } /* HBu 13.02.06: Repeat-Counter was incremented too much if the mailbox service could not be sent */ else @@ -706,6 +770,7 @@ UINT8 MBX_MailboxSendReq( TMBX MBXMEM * pMbx, UINT8 flags ) u8MbxReadCounter++; } +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1078 to 1104 deleted*/ if ( flags & FRAGMENTS_FOLLOW ) { /* store the mailbox service that the corresponding XXX_ContinueInd function will @@ -730,6 +795,7 @@ void MBX_CheckAndCopyMailbox( void ) { UINT16 mbxLen; +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS) lines 1129 to 1137 deleted*/ /* get the size of the received mailbox command and acknowledge the event*/ HW_EscReadWord(mbxLen,u16EscAddrReceiveMbx); @@ -768,6 +834,7 @@ void MBX_CheckAndCopyMailbox( void ) ||( u8MailboxSendReqStored ) /* a mailbox service to be sent is still stored so the received mailbox service will not be processed until all stored mailbox services are sent */ +/*ET9300 Project Handler :(#if !MAILBOX_QUEUE) lines 1179 to 1181 deleted*/ ) { /* set flag that the processing of the mailbox service will be checked in the @@ -801,15 +868,18 @@ void MBX_CheckAndCopyMailbox( void ) /* copy the mailbox header and data*/ HW_EscReadMbxMem((MEM_ADDR MBXMEM *) psWriteMbx,u16EscAddrReceiveMbx,mbxLen); +/*ET9300 Project Handler :(#if !MAILBOX_QUEUE) lines 1217 to 1219 deleted*/ { /*Read Control and Status of SyncManager 0 to check if the buffer is unlocked*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 1223 to 1231 deleted*/ VARVOLATILE UINT8 smstate = 0x00; HW_EscReadByte(smstate,ESC_SYNCMAN_STATUS_OFFSET); if(smstate & SM_STATUS_MBX_BUFFER_FULL) { /*Unlock the mailbox SyncManger buffer*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 1239 to 1245 deleted*/ u8dummy = 0; HW_EscReadByte(u8dummy,(u16EscAddrReceiveMbx + u16ReceiveMbxSize - 1)); @@ -855,23 +925,47 @@ UINT8 MBX_CopyToSendMailbox( TMBX MBXMEM *pMbx ) { /* the variable mbxSize contains the size of the mailbox data to be sent */ UINT16 mbxSize = pMbx->MbxHeader.Length; +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 1292 to 1295 deleted*/ +/*ECATCHANGE_START(V5.13) MBX2*/ + /*Reset the not used mailbox memory*/ + { + UINT16 LastUsedAddr = u16EscAddrSendMbx + mbxSize + MBX_HEADER_SIZE; + UINT16 LastAddrToReset = (u16EscAddrSendMbx + u16SendMbxSize); +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 1301 to 1326 deleted*/ + LastAddrToReset = LastAddrToReset - 1; + u8dummy = 0; + + /*clear all unused bytes*/ + while (LastUsedAddr < LastAddrToReset) /*reset all bytes until the second last valid address*/ + { + HW_EscWriteByte(u8dummy, LastUsedAddr); + LastUsedAddr = LastUsedAddr + 1; + } + } +/*ECATCHANGE_END(V5.13) MBX2*/ + HW_EscWriteMbxMem((MEM_ADDR *)pMbx, u16EscAddrSendMbx, (mbxSize + MBX_HEADER_SIZE)); -/* ECATCHANGE_HW(V5.10) HW1*/ + { /*Read Control and Status of SyncManager 1 to check if the buffer is still marked as empty*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 1345 to 1353 deleted*/ VARVOLATILE UINT8 smstate = 0x00; HW_EscReadByte(smstate,(ESC_SYNCMAN_STATUS_OFFSET + SIZEOF_SM_REGISTER)); if(!(smstate & SM_STATUS_MBX_BUFFER_FULL)) { + +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS || ESC_16BIT_ACCESS) lines 1361 to 1363 deleted*/ /*Write last Byte to trigger mailbox full flag*/ +/*ET9300 Project Handler :(#if ESC_32BIT_ACCESS #elif ESC_16BIT_ACCESS) lines 1366 to 1397 deleted*/ u8dummy = 0; - HW_EscWriteByte(u8dummy,(u16EscAddrSendMbx + u16SendMbxSize - 1)); + HW_EscWriteByte(u8dummy, (u16EscAddrSendMbx + u16SendMbxSize - 1)); } } +/*ET9300 Project Handler :(#if !MAILBOX_QUEUE) lines 1404 to 1413 deleted*/ /* store last send mailbox service for a possible repeat one buffer includes the last send service (psRepeatMbx), the other one the actual service to be sent (psReadMbx), @@ -883,13 +977,13 @@ UINT8 MBX_CopyToSendMailbox( TMBX MBXMEM *pMbx ) { psWriteMbx = NULL; } - // HBu 17.06.06: psRepeatMbx was already updated in MBX_MailboxReadInd - // psRepeatMbx = psReadMbx; +/*ET9300 Project Handler :(#if !MAILBOX_QUEUE) lines 1425 to 1431 deleted*/ psReadMbx = pMbx; /* set flag that send mailbox is full now */ bSendMbxIsFull = TRUE; +/*ET9300 Project Handler :(#if !MAILBOX_QUEUE) lines 1437 to 1440 deleted*/ return 0; } @@ -897,9 +991,8 @@ UINT8 MBX_CopyToSendMailbox( TMBX MBXMEM *pMbx ) ///////////////////////////////////////////////////////////////////////////////////////// /** - \brief This function is called cyclically to check if a received - Mailbox service was stored. - + \brief This function is called cyclically to check if a received Mailbox service was + stored. *//////////////////////////////////////////////////////////////////////////////////////// void MBX_Main(void) @@ -920,21 +1013,33 @@ void MBX_Main(void) { /* Mailbox error response: type 0 (mailbox service protocol) */ pMbx->MbxHeader.Length = 4; - pMbx->MbxHeader.Flags[MBX_OFFS_TYPE] &= ~(MBX_MASK_TYPE); + pMbx->MbxHeader.Flags[MBX_OFFS_TYPE] &= ~(MBX_MASK_TYPE); pMbx->Data[0] = SWAPWORD(MBXSERVICE_MBXERRORCMD); pMbx->Data[1] = SWAPWORD(result); MBX_MailboxSendReq(pMbx, 0); } } while ( pMbx != NULL ); +/*ET9300 Project Handler :(#if MAILBOX_QUEUE #else) lines 1478 to 1480 deleted*/ +/*ET9300 Project Handler :(#if EMERGENCY_SUPPORTED) lines 1482 to 1489 deleted*/ - if ( bReceiveMbxIsLocked ) - { - /* the work on the receive mailbox is locked, check if it can be - unlocked (if all mailbox commands has been sent */ - MBX_CheckAndCopyMailbox(); - } + if (bReceiveMbxIsLocked) + { + /* the work on the receive mailbox is locked, check if it can be unlocked (if all + mailbox commands has been sent */ + MBX_CheckAndCopyMailbox(); + } + + /*ECATCHANGE_START(V5.13) EOE1*/ + /*Try to send pending Mailbox data, + could be to pending previously due to local (memory) limitations which are no available*/ + if (u8MailboxSendReqStored) + { + /* there are mailbox services stored to be sent */ +/*ET9300 Project Handler :(#if EOE_SUPPORTED) lines 1505 to 1513 deleted*/ + } +/*ECATCHANGE_END(V5.13) EOE1*/ } /** @} */ diff --git a/mailbox.h b/mailbox.h index d095141..7446ce3 100644 --- a/mailbox.h +++ b/mailbox.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -98,7 +99,9 @@ typedef struct MBX_STRUCT_PACKED_START UINT16 Length; /**< \brief Length*/ UINT16 Address; /**< \brief Address*/ +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 103 to 120 deleted*/ UINT8 Flags[2]; /**< \brief Flags*/ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 122 to 125 deleted*/ #define MBX_OFFS_TYPE 1 /**< \brief Protocol type offset*/ #define MBX_OFFS_COUNTER 1 /**< \brief Protocol counter offset*/ #define MBX_MASK_TYPE 0x0F /**< \brief Protocol type mask*/ @@ -162,11 +165,13 @@ PROTO UINT16 u16EscAddrReceiveMbx; /**< \brief Receive mailbox PROTO UINT16 u16EscAddrSendMbx; /**< \brief Send mailbox address (default SM1)*/ PROTO UINT8 u8MbxWriteCounter; /**< \brief Write mailbox counter*/ PROTO UINT8 u8MbxReadCounter; /**< \brief Read mailbox counter*/ +/*ET9300 Project Handler :(#if !MAILBOX_QUEUE) lines 193 to 195 deleted*/ PROTO UINT8 u8MailboxSendReqStored; /**< \brief Mailbox send request stored*/ PROTO TMBX MBXMEM * psWriteMbx; /**< \brief Pointer to write mailbox buffer*/ PROTO TMBX MBXMEM * psReadMbx; /**< \brief Pointer to read mailbox buffer*/ PROTO TMBX MBXMEM * psRepeatMbx; /**< \brief Pointer to repeat mailbox buffer*/ PROTO TMBX MBXMEM * psStoreMbx; /**< \brief Pointer to store mailbox buffer*/ +/*ET9300 Project Handler :(#if !MAILBOX_QUEUE) lines 201 to 203 deleted*/ PROTO TMBXQUEUE MBXMEM sMbxSendQueue; /**< \brief Send mailbox queue*/ PROTO TMBXQUEUE MBXMEM sMbxReceiveQueue; /**< \brief Receive mailbox queue*/ diff --git a/objdef.c b/objdef.c index 05ea603..76b7797 100644 --- a/objdef.c +++ b/objdef.c @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -14,8 +15,13 @@ \brief Implementation This file contains the object dictionary access functions -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 COE1: handling objects with 255 entries
+V5.13 COE4: update default entry name handling in case of 16Bit characters, add CoE Read/write indication functions
+V5.13 COE9: prevent compiler warning in get entry description if char is 8bit
+V5.13 TEST7: add entries with bit9-16 types

Changes to version V5.11:
V5.12 COE10: update object entry string handling
V5.12 COE3: update entry access right handling
@@ -47,7 +53,7 @@ V5.10 ECAT13: Update Synchronisation handling (FreeRun,SM Sync, Sync0, Sync1)
Update 0x1C3x entries
V5.10 ECAT3: Add new datatype handling (BITARRxx)
- Use read/write marco to access STRING entries
+ Use read/write macro to access STRING entries
V5.10 SDO1: Handle access to enums on odd memory addresses (only for MBX_16BIT_ACCESS)
V5.10 SDO2: Check for termination char in every substring
V5.10 SDO5: Check also for PDO mapping object if the subindex 0 was set to 0 before the entries will be changed.
@@ -111,7 +117,7 @@ V4.00 COEAPPL 2: The handling of backup parameters was included according to
*/ -#define OBJDEF 0x4000 +#define OBJDEF 0x4000 #define OBJDEFMAX 0x0A /*--------------------------------------------------------------------------------------- @@ -132,7 +138,11 @@ V4.00 COEAPPL 2: The handling of backup parameters was included according to
#undef _OBJDEF_ /*remove definition of _OBJDEF_ (#ifdef is used in objdef.h)*/ +#include "applInterface.h" +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 143 to 145 deleted*/ + +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 147 to 149 deleted*/ @@ -183,6 +193,7 @@ OBJCONST TOBJECT OBJMEM * OBJ_GetObjectHandle( UINT16 index ) OBJCONST TOBJECT OBJMEM * pObjEntry = (OBJCONST TOBJECT OBJMEM *) COE_GetObjectDictionary(); while (pObjEntry!= NULL) +/*ET9300 Project Handler :(#if !STATIC_OBJECT_DIC #else) lines 201 to 203 deleted*/ { if (pObjEntry->Index == index) @@ -190,6 +201,7 @@ OBJCONST TOBJECT OBJMEM * OBJ_GetObjectHandle( UINT16 index ) return pObjEntry; } pObjEntry = (TOBJECT OBJMEM *) pObjEntry->pNext; +/*ET9300 Project Handler :(#if !STATIC_OBJECT_DIC #else) lines 212 to 214 deleted*/ } return 0; } @@ -213,65 +225,12 @@ UINT32 OBJ_GetObjectLength( UINT16 index, UINT8 subindex, OBJCONST TOBJECT OBJME /* get the information of ObjCode and MaxSubindex in local variables to support different types of microcontroller */ UINT8 objCode = (pObjEntry->ObjDesc.ObjFlags & OBJFLAGS_OBJCODEMASK) >> OBJFLAGS_OBJCODESHIFT; -/*ECATCHANGE_START(V5.12) COE6*/ UINT8 maxSubindex = (pObjEntry->ObjDesc.ObjFlags & OBJFLAGS_MAXSUBINDEXMASK) >> OBJFLAGS_MAXSUBINDEXSHIFT; -/*ECATCHANGE_END(V5.12) COE6*/ - UINT32 size = 0; - - if ( bCompleteAccess ) - { - if ( objCode == OBJCODE_VAR ) - { - return 0; - } - else if ((objCode == OBJCODE_ARR) - || (IS_RX_PDO(pObjEntry->Index) || IS_TX_PDO(pObjEntry->Index)) - ) - { - - /* we have to get the maxSubindex from the actual value of subindex 0, - which is stored as UINT16 at the beginning of the object's variable */ - maxSubindex = (UINT8) ((UINT16 MBXMEM *) (pObjEntry->pVarPtr))[0]; - - - size = pObjEntry->pEntryDesc[1].BitLength *maxSubindex; - -/* no padding required: Bit entries within an array object may overlap byte borders*/ - - /* we have to convert the size in bytes */ - size = BIT2BYTE(size); - - if ( subindex == 0 ) - { - /* add size for subindex 0 (is transmitted as UINT16) */ - size += 2; - } - return size; - } - else - { - UINT8 i; - - /* add the sizes of all entries */ - for (i = 1; i <= maxSubindex; i++) - { - size += pObjEntry->pEntryDesc[i].BitLength; - } - /* we have to convert the size in bytes */ - size = BIT2BYTE(size); - - if ( subindex == 0 ) - { - /* add size for subindex 0 (is transmitted as UINT16) */ - size += 2; - } - return size; - } - } - else +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 239 to 314 deleted*/ { if ( objCode == OBJCODE_VAR ) { +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 318 to 326 deleted*/ return (BIT2BYTE(pObjEntry->pEntryDesc->BitLength)); @@ -283,14 +242,15 @@ UINT32 OBJ_GetObjectLength( UINT16 index, UINT8 subindex, OBJCONST TOBJECT OBJME } else if((objCode == OBJCODE_ARR) || (IS_RX_PDO(pObjEntry->Index) || IS_TX_PDO(pObjEntry->Index)) +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 340 to 343 deleted*/ ) { return (BIT2BYTE(pObjEntry->pEntryDesc[1].BitLength)); } else { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 350 to 356 deleted*/ { -/*ECATCHANGE_START(V5.12) COE6*/ if (maxSubindex < subindex) { return 0; @@ -300,7 +260,6 @@ UINT32 OBJ_GetObjectLength( UINT16 index, UINT8 subindex, OBJCONST TOBJECT OBJME { return (BIT2BYTE(pObjEntry->pEntryDesc[subindex].BitLength)); } -/*ECATCHANGE_END(V5.12) COE6*/ } } } @@ -350,8 +309,10 @@ UINT16 OBJ_GetNoOfObjects(UINT8 listType) OBJCONST TOBJECT OBJMEM * pObjEntry = (OBJCONST TOBJECT OBJMEM *) COE_GetObjectDictionary(); UINT16 n = 0; +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 416 to 422 deleted*/ while (pObjEntry != NULL) +/*ET9300 Project Handler :(#if !STATIC_OBJECT_DIC #else) lines 426 to 428 deleted*/ { /* count the objects of the requested list type */ if ( pObjEntry->Index >= 0x1000 ) @@ -379,6 +340,7 @@ UINT16 OBJ_GetNoOfObjects(UINT8 listType) } /* next object in object dictionary */ pObjEntry = (TOBJECT OBJMEM *) pObjEntry->pNext; +/*ET9300 Project Handler :(#if !STATIC_OBJECT_DIC #else) lines 457 to 459 deleted*/ } return n; @@ -407,6 +369,7 @@ UINT16 OBJ_GetObjectList(UINT16 listType, UINT16 *pIndex, UINT16 size, UINT16 UINT16 listFlags = 0x0020 << listType; OBJCONST TOBJECT OBJMEM * pObjEntry; +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 488 to 500 deleted*/ if ( pIndex[0] == 0x1000 ) { @@ -427,6 +390,7 @@ UINT16 OBJ_GetObjectList(UINT16 listType, UINT16 *pIndex, UINT16 size, UINT16 if ( pObjEntry != NULL ) { while (pObjEntry != NULL && size > 1 ) +/*ET9300 Project Handler :(#if !STATIC_OBJECT_DIC #else) lines 522 to 524 deleted*/ { /* get the next index of the requested object list if there is enough space in the mailbox buffer */ if ( pObjEntry->Index >= 0x1000 ) @@ -436,11 +400,13 @@ UINT16 OBJ_GetObjectList(UINT16 listType, UINT16 *pIndex, UINT16 size, UINT16 if ( t ) { UINT8 maxSubindex = (pObjEntry->ObjDesc.ObjFlags & OBJFLAGS_MAXSUBINDEXMASK) >> OBJFLAGS_MAXSUBINDEXSHIFT; - UINT8 i = 0; +/*ECATCHANGE_START(V5.13) COE1*/ + UINT16 i = 0; +/*ECATCHANGE_END(V5.13) COE1*/ while ( t && i <= maxSubindex ) { - if ( OBJ_GetEntryDesc(pObjEntry, i)->ObjAccess & listFlags ) + if ( OBJ_GetEntryDesc(pObjEntry, (UINT8)i)->ObjAccess & listFlags ) { t = 0; } @@ -456,6 +422,7 @@ UINT16 OBJ_GetObjectList(UINT16 listType, UINT16 *pIndex, UINT16 size, UINT16 } } pObjEntry = (TOBJECT OBJMEM *) pObjEntry->pNext; +/*ET9300 Project Handler :(#if !STATIC_OBJECT_DIC #else) lines 557 to 559 deleted*/ } } @@ -528,19 +495,23 @@ UINT16 OBJ_GetDesc( UINT16 index, UINT8 subindex, OBJCONST TOBJECT OBJMEM * pObj { if ( objCode == OBJCODE_REC ) { +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 632 to 653 deleted*/ { // get pointer to description of subindex 1 : // 16bit variable to avoid overflow if subindex 0xFF is read UINT16 i = 1; UINT16 tmpSubindex = subindex; +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 660 to 666 deleted*/ { OBJCONST UCHAR OBJMEM * pSubDesc = (OBJCONST UCHAR OBJMEM *) OBJGETNEXTSTR( pDesc ); -/* ECATCHANGE_START(V5.12) COE10*/ while (( i <= tmpSubindex ) - &&( pSubDesc[0] != 0xFF && pSubDesc[0] != 0xFE && pSubDesc[0] != 0xFFFF)) -/* ECATCHANGE_END(V5.12) COE10*/ + &&( pSubDesc[0] != 0xFF && pSubDesc[0] != 0xFE +/* ECATCHANGE_START(V5.13) COE9*/ +/*ET9300 Project Handler :(#if MEMORY_UNIT_16BIT) lines 673 to 676 deleted*/ +/* ECATCHANGE_END(V5.13) COE9*/ + )) { if ( i == tmpSubindex ) { @@ -569,7 +540,9 @@ UINT16 OBJ_GetDesc( UINT16 index, UINT8 subindex, OBJCONST TOBJECT OBJMEM * pObj if ( pData ) { UCHAR OBJMEM TmpDescr[13]; - OBJSTRCPY(TmpDescr,aSubindexDesc,SIZEOF(TmpDescr)); + /* ECATCHANGE_START(V5.13) COE4*/ + MEMCPY(TmpDescr, aSubindexDesc, SIZEOF(TmpDescr)); + /* ECATCHANGE_END(V5.13) COE4*/ OBJ_CopyNumberToString( &TmpDescr[9], subindex ); MBXSTRCPY( pData, TmpDescr, SIZEOF(TmpDescr) ); @@ -600,6 +573,7 @@ OBJCONST TSDOINFOENTRYDESC OBJMEM * OBJ_GetEntryDesc(OBJCONST TOBJECT OBJMEM * p if ((objCode == OBJCODE_ARR) || (IS_RX_PDO(pObjEntry->Index) || IS_TX_PDO(pObjEntry->Index)) +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 742 to 746 deleted*/ ) { /* object is an array */ @@ -616,6 +590,7 @@ OBJCONST TSDOINFOENTRYDESC OBJMEM * OBJ_GetEntryDesc(OBJCONST TOBJECT OBJMEM * p } else { +/*ET9300 Project Handler :(#if DIAGNOSIS_SUPPORTED) lines 763 to 771 deleted*/ { /* object is a variable or a record return the corresponding entry */ pEntry = &pObjEntry->pEntryDesc[Subindex]; @@ -710,8 +685,10 @@ UINT16 OBJ_GetEntryOffset(UINT8 subindex, OBJCONST TOBJECT OBJMEM * pObjEntry) { bitOffset += pEntry->BitLength; } - - bitOffset += 16; + else + { + bitOffset += 16; + } } break; case DEFTYPE_UNSIGNED32: @@ -744,6 +721,26 @@ UINT16 OBJ_GetEntryOffset(UINT8 subindex, OBJCONST TOBJECT OBJMEM * pObjEntry) } } break; + + case DEFTYPE_REAL64: + case DEFTYPE_INTEGER64: + case DEFTYPE_UNSIGNED64: +#if OBJ_DWORD_ALIGN + /* the 64-bit variables in the structure are dword-aligned, + align the actual bitOffset to a dword */ + bitOffset = (bitOffset + 31) & 0xFFE0; +#elif OBJ_WORD_ALIGN + /* the 64-bit variables in the structure are word-aligned, + align the actual bitOffset to a word */ + bitOffset = (bitOffset + 15) & 0xFFF0; +#endif + + if (i < subindex) + { + + bitOffset += 64; + } + break; default: /* align the actual bitOffset to a byte */ if (i < subindex) @@ -855,10 +852,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O UINT8 objCode = (pObjEntry->ObjDesc.ObjFlags & OBJFLAGS_OBJCODEMASK) >> OBJFLAGS_OBJCODESHIFT; UINT16 maxSubindex = (pObjEntry->ObjDesc.ObjFlags & OBJFLAGS_MAXSUBINDEXMASK) >> OBJFLAGS_MAXSUBINDEXSHIFT; OBJCONST TSDOINFOENTRYDESC OBJMEM *pEntry; - /* lastSubindex is used for complete access to make loop over the requested entries - to be read, we initialize this variable with the requested subindex that only - one loop will be done for a single access */ - UINT16 lastSubindex = subindex; +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 1053 to 1058 deleted*/ if ( objCode != OBJCODE_VAR && index >= 0x1000 ) { @@ -867,21 +861,10 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O object's variable */ maxSubindex = (*((UINT16 *) (pObjEntry->pVarPtr))) & 0x00FF; +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1067 to 1080 deleted*/ } - if ( bCompleteAccess ) - { - if ( objCode == OBJCODE_VAR || index < 0x1000 ) - { - /* complete access is not supported with simple objects or ENUM descriptions */ - return ABORTIDX_UNSUPPORTED_ACCESS; - } - - - /* we read until the maximum subindex */ - lastSubindex = maxSubindex; - } - else +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 1083 to 1097 deleted*/ if ( subindex > maxSubindex ) { /* the maximum subindex is reached */ @@ -897,9 +880,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O { /* check if we have read access (bits 0-2 (PREOP, SAFEOP, OP) of ObjAccess) by comparing with the actual state (bits 1-3 (PREOP, SAFEOP, OP) of AL Status) */ -/*ECATCHANGE_START(V5.12) COE3*/ if (0 == (((UINT8) ((pEntry->ObjAccess & ACCESS_READ)<<1)) & (nAlStatus & STATE_MASK))) -/*ECATCHANGE_END(V5.12) COE3*/ { /* we don't have read access */ if ( (pEntry->ObjAccess & ACCESS_READ) == 0 ) @@ -914,13 +895,21 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O } } } -/* ECATCHANGE_START(V5.12) COE7*/ else { return ABORTIDX_UNSUPPORTED_ACCESS; } -/* ECATCHANGE_END(V5.12) COE7*/ + +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1133 to 1140 deleted*/ } + + /* ECATCHANGE_START(V5.13) COE4*/ + if (pAPPL_CoeReadInd != NULL) + { + pAPPL_CoeReadInd(index, subindex, bCompleteAccess); + } + /* ECATCHANGE_END(V5.13) COE4*/ + if ( pObjEntry->Read != NULL ) { /* Read function is defined, we call the object specific read function */ @@ -940,12 +929,19 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O p = (CHAR **) pVarPtr; pVarPtr = (UINT16 MBXMEM *)p[subindex-1]; + /*ECATCHANGE_START(V5.13) */ +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS && !MEMORY_UNIT_16BIT) lines 1170 to 1200 deleted*/ { // Get enum value (first 32Bit) +/*ECATCHANGE_START(V5.13) */ +/*ET9300 Project Handler :(#if MEMORY_UNIT_16BIT) lines 1204 to 1210 deleted*/ + +/*ET9300 Project Handler :(#if (BIG_ENDIAN_16BIT || BIG_ENDIAN_FORMAT)) lines 1212 to 1215 deleted*/ pData[0] = pVarPtr[0]; pData[1] = pVarPtr[1]; pData += 2; pVarPtr += 2; +/*ECATCHANGE_END(V5.13) */ // Get enum description OBJTOMBXSTRCPY(pData,pVarPtr,size-4); @@ -958,7 +954,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O /* a variable object is read */ - for (i = subindex; i <= lastSubindex; i++) +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 1235 to 1237 deleted*/ { /* if only a single entry is requested, this loop will only be done once */ UINT16 MBXMEM *pVarPtr = (UINT16 MBXMEM *) pObjEntry->pVarPtr; @@ -980,9 +976,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O /* get the corresponding entry description */ pEntry = OBJ_GetEntryDesc(pObjEntry, (UINT8)i); -/*ECATCHANGE_START(V5.12) COE3*/ if (0 != (((UINT8) ((pEntry->ObjAccess & ACCESS_READ)<<1)) & (nAlStatus & STATE_MASK)) ) -/*ECATCHANGE_END(V5.12) COE3*/ { if ( i == subindex /* requested entry */ || (bCompleteAccess && i >= subindex) ) /* complete access and entry should be read */ @@ -993,6 +987,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O if ( i == 0 && objCode != OBJCODE_VAR ) { /* we read subindex 0 of an array or record */ +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1270 to 1276 deleted*/ { pData[0] = SWAPWORD((UINT16)maxSubindex); } @@ -1053,6 +1048,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O case DEFTYPE_BIT6: case DEFTYPE_BIT7: case DEFTYPE_BIT8: +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1337 to 1348 deleted*/ case DEFTYPE_BITARR8: /* in this example the objects are defined in that way, that the bit types are always inside a 16-bit field, @@ -1126,6 +1122,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O /* in this example the objects are defined in that way, that the 32 bit type are always starting at an exact WORD offset */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT || BIG_ENDIAN_FORMAT) lines 1422 to 1425 deleted*/ pData[0] = pVarPtr[0]; pData[1] = pVarPtr[1]; pData += 2; @@ -1141,6 +1138,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O /* in this example the objects are defined in that way, that the 64 bit type are always starting at an exact WORD offset */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT || BIG_ENDIAN_FORMAT) lines 1442 to 1447 deleted*/ pData[0] = pVarPtr[0]; pData[1] = pVarPtr[1]; pData[2] = pVarPtr[2]; @@ -1270,7 +1268,7 @@ UINT8 OBJ_Read( UINT16 index, UINT8 subindex, UINT32 objSize, OBJCONST TOBJECT O object shall be done or not \return result of the write operation (0 (success) or an abort code (ABORTIDX_.... defined in - sdosrv.h)) + sdoserv.h)) \brief This function writes the requested object *//////////////////////////////////////////////////////////////////////////////////////// @@ -1284,10 +1282,7 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT UINT16 maxConfiguredSubindex = (pObjEntry->ObjDesc.ObjFlags & OBJFLAGS_MAXSUBINDEXMASK) >> OBJFLAGS_MAXSUBINDEXSHIFT; //required to check if value for Subindex0 is valid OBJCONST TSDOINFOENTRYDESC OBJMEM *pEntry; BOOL bClearSubindex0Required = FALSE; - /* lastSubindex is used for complete access to make loop over the requested entries - to be read, we initialize this variable with the requested subindex that only - one loop will be done for a single access */ - UINT16 lastSubindex = subindex; +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 1592 to 1597 deleted*/ /* if subindex 0 is writable, the maximum subindex should be checked in an object specific function, because for the PDO mapping and PDO assign the object shall only be written if subindex 0 is 0. */ @@ -1298,35 +1293,15 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT object's variable */ maxSubindex = (UINT8) ((UINT16 MBXMEM *) (pObjEntry->pVarPtr))[0]; -/*ECATCHANGE_START(V5.12) COE9*/ /*If the subindex0 of a PDO assign or PDO mapping object is 0 the maximum subindex is specified by the object description*/ if(maxSubindex == 0 && (IS_PDO_ASSIGN(index) || IS_RX_PDO(index) || IS_TX_PDO(index) || (index == 0xF030))) -/*ECATCHANGE_END(V5.12) COE9*/ { maxSubindex = maxConfiguredSubindex; } } - if ( bCompleteAccess ) - { - if ( objCode == OBJCODE_VAR ) - { - /* complete access is not supported with simple objects */ - return ABORTIDX_UNSUPPORTED_ACCESS; - } - - if ((subindex == 0) && (dataSize > 0)) - { - /* we change the subindex 0 */ - maxSubindex = (UINT8) SWAPWORD(pData[0]); - } - - - /* we write until the maximum subindex */ - lastSubindex = maxSubindex; - } - else +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 1616 to 1636 deleted*/ if (subindex > maxSubindex) { /* the maximum subindex is reached */ @@ -1342,19 +1317,15 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT /* check if we have write access (bits 3-5 (PREOP, SAFEOP, OP) of ObjAccess) by comparing with the actual state (bits 1-3 (PREOP, SAFEOP, OP) of AL Status) */ -/*ECATCHANGE_START(V5.12) COE3*/ if (0 == (((UINT8)((pEntry->ObjAccess & ACCESS_WRITE) >> 2)) & (nAlStatus & STATE_MASK) )) -/*ECATCHANGE_END(V5.12) COE3*/ { /* we don't have write access */ if ( (pEntry->ObjAccess & ACCESS_WRITE) == 0 ) { -/* ECATCHANGE_START(V5.12) COE7*/ if (pEntry->ObjAccess == 0) { return ABORTIDX_UNSUPPORTED_ACCESS; } -/* ECATCHANGE_END(V5.12) COE7*/ else { /* it is a read only entry */ @@ -1367,14 +1338,15 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT return ABORTIDX_IN_THIS_STATE_DATA_CANNOT_BE_READ_OR_STORED; } } + +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1674 to 1681 deleted*/ + } /* Subindex 0 shall be set to zero if a single PDO / PDO assign entry is written or a complete access without subindex0 is requested */ -/*ECATCHANGE_START(V5.12) COE9*/ if((subindex > 0) && (IS_PDO_ASSIGN(index) || IS_RX_PDO(index)|| IS_TX_PDO(index) || (index == 0xF030)) -/*ECATCHANGE_END(V5.12) COE9*/ ) { /*Check if Subindex0 was cleared before*/ @@ -1388,7 +1360,18 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT if ( pObjEntry->Write != NULL ) { /* Write function is defined, we call the object specific write function */ - return pObjEntry->Write(index, subindex, dataSize, pData, bCompleteAccess); + /* ECATCHANGE_START(V5.13) COE4*/ + UINT8 result = 0; + + result = pObjEntry->Write(index, subindex, dataSize, pData, bCompleteAccess); + + if ((result == 0) && (pAPPL_CoeWriteInd != NULL)) + { + pAPPL_CoeWriteInd(index, subindex, bCompleteAccess); + } + + return result; + /* ECATCHANGE_END(V5.13) COE4*/ } else { @@ -1400,8 +1383,9 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT return 0; //no error } +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1725 to 1731 deleted*/ /* we use the standard write function */ - for (i = subindex; i <= lastSubindex; i++) +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 1733 to 1735 deleted*/ { /* if only a single entry is requested, this loop will only be done once */ UINT16 MBXMEM *pVarPtr = (UINT16 MBXMEM *) pObjEntry->pVarPtr; @@ -1415,9 +1399,7 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT /* we check if we have write access (bits 3-5 (PREOP, SAFEOP, OP) of ObjAccess) by comparing with the actual state (bits 1-3 (PREOP, SAFEOP, OP) of AL Status) */ -/*ECATCHANGE_START(V5.12) COE3*/ if (0 != (((UINT8)((pEntry->ObjAccess & ACCESS_WRITE) >> 2)) & (nAlStatus & STATE_MASK) )) -/*ECATCHANGE_END(V5.12) COE3*/ { /* we have write access for this entry */ if (i != 0) @@ -1500,6 +1482,7 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT case DEFTYPE_BIT6: case DEFTYPE_BIT7: case DEFTYPE_BIT8: +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1832 to 1843 deleted*/ case DEFTYPE_BITARR8: /* in this example the objects are defined in that way, that the bit types are always inside a 16-bit field, @@ -1596,7 +1579,6 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT bSyncSetByUser = TRUE; } -/*ECATCHANGE_START(V5.12) ECAT1*/ if (i == 8) /* "Get Cycle Time" written*/ { @@ -1621,7 +1603,6 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT sSyncManInPar.u8SyncError = 0; } } /* Subindex 8 written*/ -/*ECATCHANGE_END(V5.12) ECAT1*/ } pVarPtr[0] = u16NewData; @@ -1642,6 +1623,7 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT /* in this example the objects are defined in that way, that the 32 bit type are always starting at an exact WORD offset */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT || BIG_ENDIAN_FORMAT) lines 1992 to 2003 deleted*/ if(bClearSubindex0Required && ((pVarPtr[0] != pData[0]) || (pVarPtr[1] != pData[1]))) @@ -1654,6 +1636,7 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT pVarPtr[1] = pData[1]; pData += 2; } +/*ET9300 Project Handler :(#if TEST_APPLICATION && DIAGNOSIS_SUPPORTED) lines 2017 to 2028 deleted*/ break; case DEFTYPE_REAL64: case DEFTYPE_INTEGER64: @@ -1665,6 +1648,7 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT } /* in this example the objects are defined in that way, that the 64 bit type are always starting at an exact WORD offset */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT || BIG_ENDIAN_FORMAT) lines 2040 to 2045 deleted*/ pVarPtr[0] = pData[0]; pVarPtr[1] = pData[1]; pVarPtr[2] = pData[2]; @@ -1709,6 +1693,7 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT /* set flag */ bWritten = 1; +/*ET9300 Project Handler :(#if STORE_BACKUP_PARAMETER_IMMEDIATELY && BACKUP_PARAMETER_SUPPORTED) lines 2091 to 2098 deleted*/ } } else @@ -1743,6 +1728,13 @@ UINT8 OBJ_Write( UINT16 index, UINT8 subindex, UINT32 dataSize, OBJCONST TOBJECT } } + /* ECATCHANGE_START(V5.13) COE4*/ + if (pAPPL_CoeWriteInd != NULL) + { + pAPPL_CoeWriteInd(index, subindex, bCompleteAccess); + } + /* ECATCHANGE_END(V5.13) COE4*/ + return 0; } /** @} */ diff --git a/objdef.h b/objdef.h index aca0ac0..be74ddc 100644 --- a/objdef.h +++ b/objdef.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -134,9 +135,9 @@ V5.01 : Start file change log #define SYNCTYPE_TIMESVARIABLE 0x4000 /**< \brief Dynamic Cycle Times supported*/ -#define IS_PDO_ASSIGN(x) ((x >= 0x1C10) && (x <= 0x1C2F)) /**< \brief Marco to check if object index is SyncManager assign object*/ -#define IS_RX_PDO(x) (((x) >= 0x1600) && ((x) <= 0x17FF)) /**< \brief Marco to check if object index RxPDO mapping object*/ -#define IS_TX_PDO(x) (((x) >= 0x1A00) && ((x) <= 0x1BFF)) /**< \brief Marco to check if object index TxPDO mapping object*/ +#define IS_PDO_ASSIGN(x) ((x >= 0x1C10) && (x <= 0x1C2F)) /**< \brief Macro to check if object index is SyncManager assign object*/ +#define IS_RX_PDO(x) (((x) >= 0x1600) && ((x) <= 0x17FF)) /**< \brief Macro to check if object index RxPDO mapping object*/ +#define IS_TX_PDO(x) (((x) >= 0x1A00) && ((x) <= 0x1BFF)) /**< \brief Macro to check if object index TxPDO mapping object*/ /** @@ -177,7 +178,7 @@ typedef struct OBJ_STRUCT_PACKED_START UINT32 u32Sync0CycleTime; /**< \brief SunbIndex 010: Sync0 cycle time*/ UINT16 u16SmEventMissedCounter; /**< \brief SunbIndex 011: SyncManager event missed counter*/ UINT16 u16CycleExceededCounter; /**< \brief SunbIndex 012: Cycle exceed counter*/ - UINT16 u16Si13Reserved; /**< \brief SunbIndex 013: Shift too short (not supported, only padding)*/ + UINT16 u16ShiftTooShort; /**< \brief SunbIndex 013: Shift too short*/ UINT16 u16Si14Reserved; /**< \brief SubIndex14 not supported*/ UINT32 u32Si15Reserved; /**< \brief SubIndex15 not supported*/ UINT32 u32Si16Reserved; /**< \brief SubIndex16 not supported*/ diff --git a/sdoserv.c b/sdoserv.c index 337bd8e..564f8df 100644 --- a/sdoserv.c +++ b/sdoserv.c @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -14,8 +15,10 @@ \brief Implementation The SDO server handles all sdo and sdo information services -\version 5.12 +\version 5.13 +
Changes to version V5.12:
+V5.13 COE5: handle complete access if segmented transfer is required, handle unsupported segmented uploads

Changes to version V5.11:
V5.12 COE2: do not clear the object index low byte in case of creating a SDO Abort
V5.12 COE5: updates in case of MBX_16BIT_ACCESS == 0
@@ -37,7 +40,7 @@ V5.10 SDO4: Block SDO Info services for indices less 0x1000
V5.10 SDO7: Correct mailbox length calculation on segmented or normal SDO upload response
V5.10 SDO8: Fix invalid fragment calculation on SdoInfo list response
V5.10 TEST5: test 0x2020.1 change limit from 10 to 16 Byte
- Add test object 0x3009/0x300A (huge array and record objects)
+ Add test object 0x3009/0x300A (huge array and record objects)

Changes to version V5.0:
V5.01 MBX1: Allocate always complete 16Bit memory areas
V5.01 SDO2: Prevent invalid memory access in case of 8Bit mailbox memory handling
@@ -76,26 +79,26 @@ V4.08 SDO 2: For a segmented response the command was wrong in the response

Changes to version V4.06:
V4.07 SDO 1: In SdoRes the command specifier was not set correctly in case of an abort
V4.07 ECAT 1: The sources for SPI and MCI were merged (in ecat_def.h
- set the switch MCI_HW to 1 when using the MCI,
- set the switch SPI_HW to 1 when using the SPI
+ set the switch MCI_HW to 1 when using the MCI,
+ set the switch SPI_HW to 1 when using the SPI

Changes to version V4.05:
V4.06 SDO 1: The variable dataSize was used wrong in function SdoRes

Changes to version V4.03:
V4.04 SDO 1: The SDO interface was changed in that way that a SDO response
- could be sent by the application to a later time. In that case
- the functions OBJ_Read and OBJ_Write shall return the value
- ABORTIDX_WORKING. To send the SDO response the new function SDOS_SdoRes
- has to be called by the application. While waiting for the call
- of SDOS_SdoRes the SDO interface will answer to another SDO request
- with the error MBXERR_SERVICEINWORK in the mailbox protocol
+ could be sent by the application to a later time. In that case
+ the functions OBJ_Read and OBJ_Write shall return the value
+ ABORTIDX_WORKING. To send the SDO response the new function SDOS_SdoRes
+ has to be called by the application. While waiting for the call
+ of SDOS_SdoRes the SDO interface will answer to another SDO request
+ with the error MBXERR_SERVICEINWORK in the mailbox protocol

Changes to version V3.20:
V4.00 SDO 1: The size of the written data in case of a SDO Download will be
- in the function OBJ_Write to be more flexible
+ in the function OBJ_Write to be more flexible
V4.00 SDO 2: The object lists will be generated in the functions OBJ_GetNoOfObjects
- and OBJ_GetObjectList in objdef.c to decouple the SDO services from
- the implementation of the object dictionary
+ and OBJ_GetObjectList in objdef.c to decouple the SDO services from
+ the implementation of the object dictionary
V4.00 SDO 3: The name of an object or entry description will only be transmitted
- if it fits in the mailbox because the fragmentation is not supported in the sample code.
+ if it fits in the mailbox because the fragmentation is not supported in the sample code.
V4.00 SDO 4: SDOs with size greater than 65535 were not handled correctly, that is fixed now */ @@ -116,11 +119,13 @@ V4.00 SDO 4: SDOs with size greater than 65535 were not handled correctly, that /*remove definition of _SDOSERV_ (#ifdef is used in objdef.h)*/ +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 122 to 124 deleted*/ +/*ET9300 Project Handler :(#if TEST_APPLICATION && EOE_SUPPORTED) lines 126 to 128 deleted*/ extern OBJCONST TOBJECT OBJMEM asObjDef[]; -extern UINT16 OBJ_GetDesc( UINT16 index, UINT8 subindex, OBJCONST TOBJECT OBJMEM * pObjEntry, UINT16 MBXMEM * pData ); +extern UINT16 OBJ_GetDesc(UINT16 index, UINT8 subindex, OBJCONST TOBJECT OBJMEM * pObjEntry, UINT16 MBXMEM * pData); extern OBJCONST TSDOINFOENTRYDESC OBJMEM * OBJ_GetEntryDesc(OBJCONST TOBJECT OBJMEM * pObjEntry, UINT8 Subindex); extern OBJCONST TSDOINFOOBJDESC OBJMEM * OBJ_GetObjDesc(OBJCONST TOBJECT OBJMEM * pObjEntry); @@ -132,357 +137,62 @@ extern OBJCONST TSDOINFOOBJDESC OBJMEM * OBJ_GetObjDesc(OBJCONST TOBJECT OBJMEM const UINT32 MBXMEM cAbortCode[] = { - ABORT_NOERROR, - ABORT_TOGGLE_BIT_NOT_CHANGED, - ABORT_SDO_PROTOCOL_TIMEOUT, - ABORT_COMMAND_SPECIFIER_UNKNOWN, - ABORT_OUT_OF_MEMORY, - ABORT_UNSUPPORTED_ACCESS, - ABORT_WRITE_ONLY_ENTRY, - ABORT_READ_ONLY_ENTRY, - ABORT_OBJECT_NOT_EXISTING, - ABORT_OBJECT_CANT_BE_PDOMAPPED, - ABORT_MAPPED_OBJECTS_EXCEED_PDO, - ABORT_PARAM_IS_INCOMPATIBLE, - ABORT_INTERNAL_DEVICE_INCOMPATIBILITY, - ABORT_HARDWARE_ERROR, - ABORT_PARAM_LENGTH_ERROR, - ABORT_PARAM_LENGTH_TOO_LONG, - ABORT_PARAM_LENGTH_TOO_SHORT, - ABORT_SUBINDEX_NOT_EXISTING, - ABORT_VALUE_EXCEEDED, - ABORT_VALUE_TOO_GREAT, - ABORT_VALUE_TOO_SMALL, - ABORT_MODULE_ID_LIST_NOT_MATCH, - ABORT_MAX_VALUE_IS_LESS_THAN_MIN_VALUE, - ABORT_GENERAL_ERROR, - ABORT_DATA_CANNOT_BE_READ_OR_STORED, - ABORT_DATA_CANNOT_BE_READ_OR_STORED_BECAUSE_OF_LOCAL_CONTROL, - ABORT_DATA_CANNOT_BE_READ_OR_STORED_IN_THIS_STATE, - ABORT_NO_OBJECT_DICTIONARY_IS_PRESENT, - ABORT_ENTRY_CANT_BE_WRITTEN_SI0_NOT_0, - ABORT_COMPLETE_ACCESS_NOT_SUPPORTED + ABORT_NOERROR, + ABORT_TOGGLE_BIT_NOT_CHANGED, + ABORT_SDO_PROTOCOL_TIMEOUT, + ABORT_COMMAND_SPECIFIER_UNKNOWN, + ABORT_OUT_OF_MEMORY, + ABORT_UNSUPPORTED_ACCESS, + ABORT_WRITE_ONLY_ENTRY, + ABORT_READ_ONLY_ENTRY, + ABORT_OBJECT_NOT_EXISTING, + ABORT_OBJECT_CANT_BE_PDOMAPPED, + ABORT_MAPPED_OBJECTS_EXCEED_PDO, + ABORT_PARAM_IS_INCOMPATIBLE, + ABORT_INTERNAL_DEVICE_INCOMPATIBILITY, + ABORT_HARDWARE_ERROR, + ABORT_PARAM_LENGTH_ERROR, + ABORT_PARAM_LENGTH_TOO_LONG, + ABORT_PARAM_LENGTH_TOO_SHORT, + ABORT_SUBINDEX_NOT_EXISTING, + ABORT_VALUE_EXCEEDED, + ABORT_VALUE_TOO_GREAT, + ABORT_VALUE_TOO_SMALL, + ABORT_MODULE_ID_LIST_NOT_MATCH, + ABORT_MAX_VALUE_IS_LESS_THAN_MIN_VALUE, + ABORT_GENERAL_ERROR, + ABORT_DATA_CANNOT_BE_READ_OR_STORED, + ABORT_DATA_CANNOT_BE_READ_OR_STORED_BECAUSE_OF_LOCAL_CONTROL, + ABORT_DATA_CANNOT_BE_READ_OR_STORED_IN_THIS_STATE, + ABORT_NO_OBJECT_DICTIONARY_IS_PRESENT, + ABORT_ENTRY_CANT_BE_WRITTEN_SI0_NOT_0, + ABORT_COMPLETE_ACCESS_NOT_SUPPORTED }; UINT16 VARMEM nSdoInfoIndex; OBJCONST TOBJECT OBJMEM * VARMEM pSdoInfoObjEntry; -TINITSDOMBX MBXMEM * VARMEM pSdoResStored; -BOOL VARMEM bSdoInWork = FALSE; - -UINT8 VARMEM nSdoSegService; -UINT8 VARMEM bSdoSegFollows; -UINT8 VARMEM bSdoSegAccess; -UINT16 VARMEM nSdoSegIndex; -UINT8 VARMEM nSdoSegSubindex; -UINT32 VARMEM nSdoSegBytesToHandle; -UINT8 VARMEM bSdoSegLastToggle; -UINT32 VARMEM nSdoSegCompleteSize; -OBJCONST TOBJECT OBJMEM * VARMEM pSdoSegObjEntry; +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 179 to 182 deleted*/ +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 184 to 203 deleted*/ /*--------------------------------------------------------------------------------------- ------ ------ module internal function declarations ------ ---------------------------------------------------------------------------------------*/ -static UINT8 SdoDownloadSegmentInd(TDOWNLOADSDOSEGREQMBX MBXMEM * pSdoInd); -static UINT8 SdoUploadSegmentInd(TUPLOADSDOSEGREQMBX MBXMEM * pSdoInd); +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 209 to 212 deleted*/ /*--------------------------------------------------------------------------------------- ------ ------ Functions ------ ---------------------------------------------------------------------------------------*/ -///////////////////////////////////////////////////////////////////////////////////////// -/** - \param pSdoInd Pointer to the received mailbox data from the master. - - \return Indicates if an error occurred while the operation ( good = 0 ). - - \brief This function is called when a Download SDO Segment request - service is received from the master. If its the last segment - the data will be written to the object dictionary. The - function sends a response by itself. -*//////////////////////////////////////////////////////////////////////////////////////// - -static UINT8 SdoDownloadSegmentInd( TDOWNLOADSDOSEGREQMBX MBXMEM * pSdoInd ) -{ - UINT8 abort = 0; - UINT32 bytesToSave = 0; - -/* ECATCHANGE_START(V5.12) ECAT2*/ - if ( SWAPWORD(pSdoInd->SdoHeader.SegHeader & SEGHEADER_TOGGLE) == bSdoSegLastToggle ) -/* ECATCHANGE_END(V5.12) ECAT2*/ - { - /* toggle bit has not toggled... */ - abort = ABORTIDX_TOGGLE_BIT_NOT_CHANGED; - } - else - { - /* maxData contains the maximum data to be received with a SDO-DownloadSegment */ - UINT16 maxData = u16ReceiveMbxSize - MBX_HEADER_SIZE - SEGMENT_NORM_HEADER_SIZE; - /* the new toggle bit is stored in bSdoSegLastToggle */ - /* ECATCHANGE_START(V5.12) ECAT2*/ - bSdoSegLastToggle = SWAPWORD(pSdoInd->SdoHeader.SegHeader & SEGHEADER_TOGGLE); - /* ECATCHANGE_END(V5.12) ECAT2*/ - - /* a SDO-Download Segment is only allowed if a SDO-Download Request was received before, - in that case a buffer for the received data was allocated in SDOS_SdoInd before */ - if ( pSdoSegData ) - { - /* bytesToSave contains the remaining data with this and maybe the following - SDO-Download Segment services */ - bytesToSave = nSdoSegCompleteSize - nSdoSegBytesToHandle; - - if ( pSdoInd->SdoHeader.SegHeader & SEGHEADER_NOMOREFOLLOWS ) - { - /* the last segment is received, check if the length of the remaining data is the - same as the length of the received data */ - if ( bytesToSave <= maxData ) - { - UINT16 mbxSize = SWAPWORD(pSdoInd->MbxHeader.Length); - - /* for the check it is distinguished if the remaining bytes are less than 8 (in that - case 7 data bytes were sent and the SDO-Download Segment header contains the information - how much bytes are valid (CAN-compatibility)), otherwise the length has to match exactly - and the SDO-Download Segment-Headerbyte is ignored */ - if (((bytesToSave <= (UINT32)(mbxSize - SEGMENT_NORM_HEADER_SIZE)) - &&( bytesToSave == ((UINT16) (MIN_SEGMENTED_DATA - ((pSdoInd->SdoHeader.SegHeader & SEGHEADER_SEGDATASIZE) >> SEGHEADERSHIFT_SEGDATASIZE))) ) - ) - ||( ( bytesToSave > MIN_SEGMENTED_DATA ) - && (bytesToSave == (UINT32)(mbxSize - SEGMENT_NORM_HEADER_SIZE)) - ) ) - { - /* length is correct */ - bSdoSegFollows = FALSE; - } - else - { - abort = ABORTIDX_PARAM_LENGTH_ERROR; - } - } - else - { - abort = ABORTIDX_PARAM_LENGTH_ERROR; - } - } - else - { - /* its not the last segment */ - bSdoSegFollows = TRUE; - /* we have to check if we expect less bytes than the maximum size which can be send with a single - SDO Download Segment */ - if ( bytesToSave <= maxData ) - { - abort = ABORTIDX_PARAM_LENGTH_ERROR; - } - else - { - /* length is okay, bytesToSave contains the data size to be copied */ - bytesToSave = maxData; - } - } - - if ( abort == 0 ) - { - /* the received data is copied in the buffer */ - MBXMEMCPY( ((UINT8*)pSdoSegData) + (nSdoSegBytesToHandle), pSdoInd->SdoHeader.Data, bytesToSave ); - - if ( bSdoSegFollows == FALSE ) - { - /* it was the last segment, OBJ_Write will called to make the Write-operation */ - abort = OBJ_Write( nSdoSegIndex, nSdoSegSubindex, nSdoSegCompleteSize, pSdoSegObjEntry, (UINT16 MBXMEM *) pSdoSegData, bSdoSegAccess ); - if ( abort == ABORTIDX_WORKING ) - { - /* the application generates the SDO-Response later on by calling SDOS_SdoRes (only possible if object access function pointer is defined) */ - u8PendingSdo = SDO_PENDING_SEG_WRITE; - bStoreCompleteAccess = bSdoSegAccess; - u8StoreSubindex = nSdoSegSubindex; - u16StoreIndex = nSdoSegIndex; - u32StoreDataSize = nSdoSegCompleteSize; - pStoreData = pSdoSegData; - - pSdoPendFunc = pSdoSegObjEntry->Write; - - bSdoInWork = TRUE; - pSdoResStored = (TINITSDOMBX MBXMEM *) pSdoInd; - - bSdoSegFollows = FALSE; - nSdoSegService = 0; - nSdoSegBytesToHandle = 0; - - return ABORTIDX_WORKING; - } - else - { - /* the allocated buffer can be released */ - FREEMEM( (UINT16 VARMEM *) pSdoSegData ); - pSdoSegData = NULL; - } - } - } - } - else - { - abort = ABORTIDX_COMMAND_SPECIFIER_UNKNOWN; - } - } - - if ( abort == 0) - { - /* send the SDO Download Segment response */ - pSdoInd->MbxHeader.Length = SEGMENT_NORM_RES_SIZE; - pSdoInd->CoeHeader &= ~COEHEADER_COESERVICEMASK; - pSdoInd->CoeHeader |= ((UINT16)COESERVICE_SDORESPONSE) << COEHEADER_COESERVICESHIFT; - /* the SDO Download Segment header depends if it was the last segment or not */ -/* ECATCHANGE_START(V5.12) ECAT2*/ - if ( bSdoSegLastToggle ) - { - pSdoInd->SdoHeader.SegHeader = SWAPWORD(SDOSERVICE_DOWNLOADSEGMENTRES|SEGHEADER_TOGGLE); - } - else - { - pSdoInd->SdoHeader.SegHeader = SWAPWORD(SDOSERVICE_DOWNLOADSEGMENTRES); - } -/* ECATCHANGE_END(V5.12) ECAT2*/ - - if ( bSdoSegFollows == TRUE ) - { - /* segments are still expected, nSdoSegBytesToHandle contains the number of received data bytes */ - nSdoSegBytesToHandle += bytesToSave; - } - else - { - /* the last segment was received, the variables are reset */ - nSdoSegBytesToHandle = 0; - nSdoSegService = 0; - } - } - else - { - /* the Abort-Response will be sent in SDOS_SdoInd*/ - bSdoSegFollows = FALSE; - nSdoSegService = 0; - if (pSdoSegData) - { - /* the memory has to be released if it is not released before. - In case of AbortIdx_Working the buffer will be freed in SDOS_SdoRes*/ - FREEMEM( (UINT16 VARMEM *) pSdoSegData ); - pSdoSegData = NULL; - } - - nSdoSegBytesToHandle = 0; - } - - return abort; -} - -///////////////////////////////////////////////////////////////////////////////////////// -/** - \param pSdoInd Pointer to the received mailbox data from the master. - - \return Indicates if an error occurred while the operation ( good = 0 ). - - \brief This function is called when a Upload SDO Segment request service - is received from the master. It prepares and operates the - response and sends it by itself. -*//////////////////////////////////////////////////////////////////////////////////////// - -static UINT8 SdoUploadSegmentInd( TUPLOADSDOSEGREQMBX MBXMEM * pSdoInd ) -{ - UINT8 abort = 0; - TUPLOADSDOSEGRESMBX MBXMEM * pSdoSegRes = (TUPLOADSDOSEGRESMBX MBXMEM *)pSdoInd; - -/* ECATCHANGE_START(V5.12) ECAT2*/ - if ( SWAPWORD(pSdoInd->SegHeader & SEGHEADER_TOGGLE) == bSdoSegLastToggle ) -/* ECATCHANGE_END(V5.12) ECAT2*/ - { - /* toggle bit has not toggled... */ - abort = ABORTIDX_TOGGLE_BIT_NOT_CHANGED; - } - else - { - /* maxData contains the maximum data to be sent with a SDO-Upload Segment response */ - - UINT32 size = 0; - UINT16 maxData; - - { - maxData = u16SendMbxSize - MBX_HEADER_SIZE - SEGMENT_NORM_HEADER_SIZE; - } - - /* the new toggle bit is stored in bSdoSegLastToggle */ - bSdoSegLastToggle = pSdoInd->SegHeader & SEGHEADER_TOGGLE; - - if ( nSdoSegCompleteSize < (nSdoSegBytesToHandle + maxData) ) - { - /* the remaining data can be send with one SDO Upload Segment response, - size contains the data to be copied */ - size = nSdoSegCompleteSize - nSdoSegBytesToHandle; - bSdoSegFollows = FALSE; - } - else - { - /* more data will follow, size contains the data to be copied */ - size = maxData; - bSdoSegFollows = TRUE; - } - - /* copy the object data in the SDO Upload segment response */ - MBXMEMCPY( pSdoSegRes->SdoHeader.Data, &(((UINT8*)pSdoSegData)[nSdoSegBytesToHandle]), size ); - - /* the SDO Upload Segment header depends if there is still data to be sent */ - pSdoSegRes->CoeHeader &= ~COEHEADER_COESERVICEMASK; - pSdoSegRes->CoeHeader |= ((UINT16)COESERVICE_SDORESPONSE) << COEHEADER_COESERVICESHIFT; - - /*Clear SDO header*/ - pSdoSegRes->SdoHeader.SegHeader &= ~SEGHEADER_MASK; -/* ECATCHANGE_START(V5.12) ECAT2*/ - if (bSdoSegFollows) - { - pSdoSegRes->SdoHeader.SegHeader |= SWAPWORD(SDOSERVICE_UPLOADSEGMENTRES | bSdoSegLastToggle); - } - else - { - pSdoSegRes->SdoHeader.SegHeader |= SWAPWORD(SDOSERVICE_UPLOADSEGMENTRES | bSdoSegLastToggle | SEGHEADER_NOMOREFOLLOWS); - } -/* ECATCHANGE_END(V5.12) ECAT2*/ - - // operate CAN specific flag segDataSize: - /* HBu 06.02.06: the sizes were wrong */ - if ( size < MIN_SEGMENTED_DATA ) - { - // at least MIN_SEGMENTED_DATA bytes have to be send: - pSdoSegRes->MbxHeader.Length = SEGMENT_NORM_RES_SIZE; - pSdoSegRes->SdoHeader.SegHeader |= (MIN_SEGMENTED_DATA - size) << SEGHEADERSHIFT_SEGDATASIZE; - } - else - { - pSdoSegRes->MbxHeader.Length = ((UINT16) size) + SEGMENT_NORM_HEADER_SIZE; - } - - if ( bSdoSegFollows == TRUE ) - { - // updating the value of send bytes: - nSdoSegBytesToHandle += size; - } - else - { - FREEMEM( (UINT16 VARMEM *) pSdoSegData ); - pSdoSegData = NULL; - nSdoSegBytesToHandle = 0; - nSdoSegService = 0; - } - } - - return abort; -} - +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 219 to 561 deleted*/ ///////////////////////////////////////////////////////////////////////////////////////// /** \param abort Result of the SDO access - \param command SDO command index + \param command SDO command index \param completeAccess Indicates if complete access was requested \param dataSize Available data buffer in the response \param objLength Complete size of the object @@ -493,82 +203,83 @@ static UINT8 SdoUploadSegmentInd( TUPLOADSDOSEGREQMBX MBXMEM * pSdoInd ) void SdoRes(UINT8 abort, UINT8 command, UINT8 completeAccess, UINT16 dataSize, UINT32 objLength, TINITSDOMBX MBXMEM *pSdoRes) { - /* for an upload segment response the toggle bit was overwritten */ - if ((command != SDOSERVICE_UPLOADSEGMENTREQ) && (command != SDOSERVICE_DOWNLOADSEGMENTREQ)) - { - pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] = 0; - } - if ( abort == 0 ) - { - /* SDO-Download or SDO-Upload was successful, generate the SDO- and CoE-Header */ - pSdoRes->CoeHeader &= ~COEHEADER_COESERVICEMASK; - pSdoRes->CoeHeader |= ((UINT16)COESERVICE_SDORESPONSE) << COEHEADER_COESERVICESHIFT; - if ( command == SDOSERVICE_INITIATEUPLOADREQ ) - { - // HBu 06.02.06: Complete Access Bit in the SDO-Upload-Response too */ - if ( (objLength <= 4) && (objLength > 0) ) - { - /* Expedited Upload Response */ - pSdoRes->MbxHeader.Length = EXPEDITED_FRAME_SIZE; - pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOHEADER_SIZEINDICATOR | - SDOHEADER_TRANSFERTYPE | - completeAccess | - ((MAX_EXPEDITED_DATA - ((UINT8)objLength)) << SDOHEADERSHIFT_DATASETSIZE) | - SDOSERVICE_INITIATEUPLOADRES; - } - else - { - /* Normal or Segmented Upload Response */ - if (dataSize < objLength) - { - pSdoRes->MbxHeader.Length = UPLOAD_NORM_RES_SIZE+dataSize; - } - else - { - pSdoRes->MbxHeader.Length = UPLOAD_NORM_RES_SIZE+((UINT16)objLength); - } - ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoRes)->CompleteSize[0] = SWAPWORD((UINT16)objLength); - ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoRes)->CompleteSize[1] = SWAPWORD((UINT16)(objLength>>16)); - pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOHEADER_SIZEINDICATOR | - completeAccess | - SDOSERVICE_INITIATEUPLOADRES; + /* for an upload segment response the toggle bit was overwritten */ + if ((command != SDOSERVICE_UPLOADSEGMENTREQ) && (command != SDOSERVICE_DOWNLOADSEGMENTREQ)) + { +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 580 to 586 deleted*/ + pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] = 0; + } + if (abort == 0) + { + /* SDO-Download or SDO-Upload was successful, generate the SDO- and CoE-Header */ + pSdoRes->CoeHeader &= ~COEHEADER_COESERVICEMASK; + pSdoRes->CoeHeader |= ((UINT16)COESERVICE_SDORESPONSE) << COEHEADER_COESERVICESHIFT; + if (command == SDOSERVICE_INITIATEUPLOADREQ) + { + // HBu 06.02.06: Complete Access Bit in the SDO-Upload-Response too */ + if ((objLength <= 4) && (objLength > 0)) + { + /* Expedited Upload Response */ + pSdoRes->MbxHeader.Length = EXPEDITED_FRAME_SIZE; +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 602 to 608 deleted*/ + pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOHEADER_SIZEINDICATOR | + SDOHEADER_TRANSFERTYPE | + completeAccess | + ((MAX_EXPEDITED_DATA - ((UINT8)objLength)) << SDOHEADERSHIFT_DATASETSIZE) | + SDOSERVICE_INITIATEUPLOADRES; + } + else + { + /* Normal or Segmented Upload Response */ +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 619 to 625 deleted*/ + { + pSdoRes->MbxHeader.Length = UPLOAD_NORM_RES_SIZE + ((UINT16)objLength); + } + ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoRes)->CompleteSize[0] = SWAPWORD((UINT16)objLength); + ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoRes)->CompleteSize[1] = SWAPWORD((UINT16)(objLength >> 16)); +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 631 to 635 deleted*/ + pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOHEADER_SIZEINDICATOR | + completeAccess | + SDOSERVICE_INITIATEUPLOADRES; - } - } - /* for a segmented response the command was wrong in the response */ - else if ( command == SDOSERVICE_DOWNLOADSEGMENTREQ ) - { - /* Download segmented response */ - pSdoRes->MbxHeader.Length = DOWNLOAD_NORM_RES_SIZE; - pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOSERVICE_DOWNLOADSEGMENTRES; - } - else if ( command != SDOSERVICE_UPLOADSEGMENTREQ ) - { - /* Download response */ - pSdoRes->MbxHeader.Length = DOWNLOAD_NORM_RES_SIZE; - pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOSERVICE_INITIATEDOWNLOADRES; - } - } - else - { - /* generate a SDO-Abort-Request */ - pSdoRes->MbxHeader.Length = ABORT_NORM_RES_SIZE; - pSdoRes->CoeHeader &= ~COEHEADER_COESERVICEMASK; - pSdoRes->CoeHeader |= ((UINT16)COESERVICE_SDOREQUEST) << COEHEADER_COESERVICESHIFT; - /* ECATCHANGE_START(V5.12) COE2*/ - pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOSERVICE_ABORTTRANSFER; - /* ECATCHANGE_END(V5.12) COE2*/ + } + } + /* for a segmented response the command was wrong in the response */ + else if (command == SDOSERVICE_DOWNLOADSEGMENTREQ) + { + /* Download segmented response */ + pSdoRes->MbxHeader.Length = DOWNLOAD_NORM_RES_SIZE; +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 648 to 650 deleted*/ + pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOSERVICE_DOWNLOADSEGMENTRES; + } + else if (command != SDOSERVICE_UPLOADSEGMENTREQ) + { + /* Download response */ + pSdoRes->MbxHeader.Length = DOWNLOAD_NORM_RES_SIZE; +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 658 to 660 deleted*/ + pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOSERVICE_INITIATEDOWNLOADRES; + } + } + else + { + /* generate a SDO-Abort-Request */ + pSdoRes->MbxHeader.Length = ABORT_NORM_RES_SIZE; + pSdoRes->CoeHeader &= ~COEHEADER_COESERVICEMASK; + pSdoRes->CoeHeader |= ((UINT16)COESERVICE_SDOREQUEST) << COEHEADER_COESERVICESHIFT; +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 671 to 673 deleted*/ + pSdoRes->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= SDOSERVICE_ABORTTRANSFER; - ((TABORTSDOTRANSFERREQMBX MBXMEM *) pSdoRes)->AbortCode = SWAPDWORD(cAbortCode[abort]); - } +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 677 to 680 deleted*/ + ((TABORTSDOTRANSFERREQMBX MBXMEM *) pSdoRes)->AbortCode = SWAPDWORD(cAbortCode[abort]); + } - // HBu 02.05.06: if the CoE-response could not be sent because the - // send mailbox is full it should be stored - if (MBX_MailboxSendReq((TMBX MBXMEM *) pSdoRes, COE_SERVICE) != 0) - { - /* we store the CoE mailbox service to send it later (in COE_ContinueInd) when the mailbox is read */ - pCoeSendStored = (TMBX MBXMEM *) pSdoRes; - } + // HBu 02.05.06: if the CoE-response could not be sent because the + // send mailbox is full it should be stored + if (MBX_MailboxSendReq((TMBX MBXMEM *) pSdoRes, COE_SERVICE) != 0) + { + /* we store the CoE mailbox service to send it later (in COE_ContinueInd) when the mailbox is read */ + pCoeSendStored = (TMBX MBXMEM *) pSdoRes; + } } ///////////////////////////////////////////////////////////////////////////////////////// @@ -578,491 +289,244 @@ void SdoRes(UINT8 abort, UINT8 command, UINT8 completeAccess, UINT16 dataSize, U \return Indicates if an error occurred while the operation ( good = 0 ). \brief This function is called when a SDO request service - is received from the master and calls depending from - the command the concerning function. + is received from the master and calls depending from + the command the concerning function. *//////////////////////////////////////////////////////////////////////////////////////// UINT8 SDOS_SdoInd(TINITSDOMBX MBXMEM *pSdoInd) { - UINT8 abort = 0; - UINT8 sdoHeader = (pSdoInd->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] & SDOHEADER_COMMANDMASK); - /* the SDO-command is in bit 5-7 of the first SDO-Byte */ - UINT8 command = (sdoHeader & SDOHEADER_COMMAND); - /* mbxSize contains the size of the mailbox (CoE-Header (2 Bytes) + SDO-Header (8 Bytes) + SDO-Data (if the data length is greater than 4)) */ - UINT16 mbxSize = SWAPWORD(pSdoInd->MbxHeader.Length); - UINT16 index; - UINT8 subindex; - OBJCONST TOBJECT OBJMEM * pObjEntry; - /* this variable contains the information, if all entries of an object will be read (bCompleteAccess > 0) or a single entry */ - UINT8 bCompleteAccess = 0; - UINT32 objLength = 0; - UINT32 dataSize = 0; + UINT8 abort = 0; +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 708 to 710 deleted*/ + UINT8 sdoHeader = (pSdoInd->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] & SDOHEADER_COMMANDMASK); + /* the SDO-command is in bit 5-7 of the first SDO-Byte */ + UINT8 command = (sdoHeader & SDOHEADER_COMMAND); + /* mbxSize contains the size of the mailbox (CoE-Header (2 Bytes) + SDO-Header (8 Bytes) + SDO-Data (if the data length is greater than 4)) */ + UINT16 mbxSize = SWAPWORD(pSdoInd->MbxHeader.Length); + UINT16 index; + UINT8 subindex; + OBJCONST TOBJECT OBJMEM * pObjEntry; + /* this variable contains the information, if all entries of an object will be read (bCompleteAccess > 0) or a single entry */ + UINT8 bCompleteAccess = 0; + UINT32 objLength = 0; + UINT32 dataSize = 0; - if ( bSdoInWork ) - { - /* the last SDO is still in work */ - return MBXERR_SERVICEINWORK; - } +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 725 to 731 deleted*/ + +/* ECATCHANGE_START(V5.13) COE5*/ + if (sdoHeader & SDOHEADER_COMPLETEACCESS) + { + bCompleteAccess = 1; + } +/* ECATCHANGE_END(V5.13) COE5*/ + + switch (command) + { + case SDOSERVICE_INITIATEDOWNLOADREQ: + case SDOSERVICE_INITIATEUPLOADREQ: + /* the variable index contains the requested index of the SDO service */ +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 745 to 747 deleted*/ + index = ((UINT16)(pSdoInd->SdoHeader.Sdo[SDOHEADER_INDEXHIOFFSET] & SDOHEADER_INDEXHIMASK)); + index <<= 8; +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 753 to 757 deleted*/ + index += (pSdoInd->SdoHeader.Sdo[SDOHEADER_INDEXLOOFFSET]); + /* the variable subindex contains the requested subindex of the SDO service */ + subindex = pSdoInd->SdoHeader.Sdo[SDOHEADER_SUBINDEXOFFSET]; - switch (command) - { - case SDOSERVICE_INITIATEDOWNLOADREQ: - case SDOSERVICE_INITIATEUPLOADREQ: - /* the variable index contains the requested index of the SDO service */ -/*ECATCHANGE_START(V5.12) COE5*/ - index = ((UINT16)(pSdoInd->SdoHeader.Sdo[SDOHEADER_INDEXHIOFFSET] & SDOHEADER_INDEXHIMASK)); -/*ECATCHANGE_END(V5.12) COE5*/ -/* ECATCHANGE_START(V5.12) ECAT2*/ - index <<= 8; -/*ECATCHANGE_START(V5.12) COE5*/ - index += (pSdoInd->SdoHeader.Sdo[SDOHEADER_INDEXLOOFFSET]); - /* the variable subindex contains the requested subindex of the SDO service */ - subindex = pSdoInd->SdoHeader.Sdo[SDOHEADER_SUBINDEXOFFSET]; -/*ECATCHANGE_END(V5.12) COE5*/ - -/* ECATCHANGE_END(V5.12) ECAT2*/ +/*ET9300 Project Handler :(#if TEST_APPLICATION && EOE_SUPPORTED) lines 764 to 834 deleted*/ +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 837 to 855 deleted*/ + /* OBJ_GetObjectHandle checks if the requested index is defined in the object dictionary */ + pObjEntry = OBJ_GetObjectHandle(index); - /* OBJ_GetObjectHandle checks if the requested index is defined in the object dictionary */ - pObjEntry = OBJ_GetObjectHandle( index ); + if (pObjEntry) + { + /* transferType contains the information if the SDO Download Request or the SDO Upload Response + can be an expedited service (SDO data length <= 4, that means the data is stored in the + SDO-Header completely */ + UINT8 bTransferType = 0; + /* pData is the pointer to the received (SDO-Download) or sent (SDO-Upload) SDO data in the mailbox */ + UINT16 MBXMEM * pData = NULL; +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 868 to 870 deleted*/ - if ( pObjEntry ) - { - /* transferType contains the information if the SDO Download Request or the SDO Upload Response - can be an expedited service (SDO data length <= 4, that means the data is stored in the - SDO-Header completely */ - UINT8 bTransferType = 0; - /* pData is the pointer to the received (SDO-Download) or sent (SDO-Upload) SDO data in the mailbox */ - UINT16 MBXMEM * pData = NULL; - UINT8 segTransfer = 0; + { + UINT8 maxSubindex = (pObjEntry->ObjDesc.ObjFlags & OBJFLAGS_MAXSUBINDEXMASK) >> OBJFLAGS_MAXSUBINDEXSHIFT; - { -/*ECATCHANGE_START(V5.12) COE6*/ - UINT8 maxSubindex = (pObjEntry->ObjDesc.ObjFlags & OBJFLAGS_MAXSUBINDEXMASK) >> OBJFLAGS_MAXSUBINDEXSHIFT; + if (subindex > maxSubindex) + { + abort = ABORTIDX_SUBINDEX_NOT_EXISTING; + } + else + { + dataSize = objLength = OBJ_GetObjectLength(index, subindex, pObjEntry, (UINT8)(sdoHeader & SDOHEADER_COMPLETEACCESS)); + } - if (subindex > maxSubindex) - { - abort = ABORTIDX_SUBINDEX_NOT_EXISTING; - } - else - { - dataSize = objLength = OBJ_GetObjectLength(index, subindex, pObjEntry, (UINT8)(sdoHeader & SDOHEADER_COMPLETEACCESS)); - } + if (abort == 0) + { + if (command == SDOSERVICE_INITIATEUPLOADREQ) + { + /* SDO Upload */ + if (mbxSize != EXPEDITED_FRAME_SIZE) + { + /* a SDO Upload request has always a fixed size (2 Byte CoE-Header plus 8 Byte SDO-Header) */ + return MBXERR_INVALIDSIZE; + } + /* distinguish between expedited and normal upload response within the length of the response data */ + if ((objLength <= MAX_EXPEDITED_DATA) && objLength != 0) + { + /* Expedited Upload */ + bTransferType = 1; + /* pData is the pointer where the object data has to be copied for the response */ + pData = (UINT16 MBXMEM *) ((TINITSDOUPLOADEXPRESMBX MBXMEM *) pSdoInd)->Data; + /* initialize the 4 data bytes of the SDO upload response because the requested object data + could be less than 4 */ + pData[0] = 0; + pData[1] = 0; + } + else + { +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 908 to 930 deleted*/ +/* ECATCHANGE_START(V5.13) COE5*/ + dataSize = u16SendMbxSize - MBX_HEADER_SIZE - UPLOAD_NORM_RES_SIZE; + if (dataSize < objLength) + { + /* Segmented Upload */ + if (bCompleteAccess) + { + abort = ABORTIDX_COMPLETE_ACCESS_NOT_SUPPORTED; + } + else + { + abort = ABORTIDX_PARAM_LENGTH_ERROR; + } + } +/* ECATCHANGE_END(V5.13) COE5*/ + else + { + /* Normal Upload */ - if( abort == 0) -/*ECATCHANGE_END(V5.12) COE6*/ - { - if (command == SDOSERVICE_INITIATEUPLOADREQ) - { - /* SDO Upload */ - if (mbxSize != EXPEDITED_FRAME_SIZE) - { - /* a SDO Upload request has always a fixed size (2 Byte CoE-Header plus 8 Byte SDO-Header) */ - return MBXERR_INVALIDSIZE; - } - /* distinguish between expedited and normal upload response within the length of the response data */ - if ((objLength <= MAX_EXPEDITED_DATA) && objLength != 0) - { - /* Expedited Upload */ - bTransferType = 1; - /* pData is the pointer where the object data has to be copied for the response */ - /* ECATCHANGE_START(V5.12)*/ - pData = (UINT16 MBXMEM *) ((TINITSDOUPLOADEXPRESMBX MBXMEM *) pSdoInd)->Data; - /* ECATCHANGE_END(V5.12)*/ - /* initialize the 4 data bytes of the SDO upload response because the requested object data - could be less than 4 */ - pData[0] = 0; - pData[1] = 0; - } - else - { - /* HBu 06.02.06: the variable dataSize has to be set to the available size in one mailbox */ - dataSize = u16SendMbxSize - MBX_HEADER_SIZE - UPLOAD_NORM_RES_SIZE; - if (dataSize < objLength) - { - /* Segmented Upload */ - segTransfer = 1; - } - else - { - /* Normal Upload */ - /* ECATCHANGE_START(V5.12)*/ - pData = (UINT16 MBXMEM *) ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoInd)->Data; - /* ECATCHANGE_END(V5.12)*/ - } - } - } - else - { - /* SDO-Download: store if the request is a expedited or normal request */ - bTransferType = sdoHeader & SDOHEADER_TRANSFERTYPE; - } - } - } + /* pData is the pointer where the object data has to be copied for the response */ + pData = (UINT16 MBXMEM *) ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoInd)->Data; + } + } + } + else + { + /* SDO-Download: store if the request is a expedited or normal request */ + bTransferType = sdoHeader & SDOHEADER_TRANSFERTYPE; + } + } + } -/*ECATCHANGE_START(V5.12) COE6*/ - if ((abort == 0 ) && (command == SDOSERVICE_INITIATEDOWNLOADREQ )) -/*ECATCHANGE_END(V5.12) COE6*/ - { - /* SDO Download */ - if ( bTransferType ) - { - /* Expedited Download */ - if ( mbxSize != EXPEDITED_FRAME_SIZE ) - { - /* an Expedited SDO Download request has always a fixed size (2 Byte CoE-Header plus 8 Byte SDO-Header) */ - return MBXERR_INVALIDSIZE; - } - /* dataSize gets the real size of the downloaded object data (1,2,3 or 4) */ - dataSize = MAX_EXPEDITED_DATA - ((sdoHeader & SDOHEADER_DATASETSIZE) >> SDOHEADERSHIFT_DATASETSIZE); - /* pData is the pointer to the downloaded object data */ - pData = (UINT16 MBXMEM *) &pSdoInd[1]; - } - else - { - /* Normal Download */ - /* downloadSize gets the real size of the downloaded data */ - /* '&' operator was too much */ + if ((abort == 0) && (command == SDOSERVICE_INITIATEDOWNLOADREQ)) + { + /* SDO Download */ + if (bTransferType) + { + /* Expedited Download */ + if (mbxSize != EXPEDITED_FRAME_SIZE) + { + /* an Expedited SDO Download request has always a fixed size (2 Byte CoE-Header plus 8 Byte SDO-Header) */ + return MBXERR_INVALIDSIZE; + } + /* dataSize gets the real size of the downloaded object data (1,2,3 or 4) */ + dataSize = MAX_EXPEDITED_DATA - ((sdoHeader & SDOHEADER_DATASETSIZE) >> SDOHEADERSHIFT_DATASETSIZE); + /* pData is the pointer to the downloaded object data */ + pData = (UINT16 MBXMEM *) &pSdoInd[1]; + } + else + { + /* Normal Download */ + /* downloadSize gets the real size of the downloaded data */ + /* '&' operator was too much */ - UINT32 downloadSize = ((UINT32)(SWAPWORD(((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->CompleteSize[1]))<<16) + (SWAPWORD(((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->CompleteSize[0])); + UINT32 downloadSize = ((UINT32)(SWAPWORD(((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->CompleteSize[1])) << 16) + (SWAPWORD(((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->CompleteSize[0])); - /* HBu 29.03.06: if it is a segmented download the mbxSize has to be the complete mailbox size */ - if ( (MBX_HEADER_SIZE+EXPEDITED_FRAME_SIZE+downloadSize) > u16ReceiveMbxSize ) - { - if ( mbxSize != (u16ReceiveMbxSize-MBX_HEADER_SIZE) ) - { - return MBXERR_INVALIDSIZE; - } - } - else - { - if ( mbxSize != (EXPEDITED_FRAME_SIZE+downloadSize) ) - { - /* the mbxSize and the downloadSize are not consistent (mbxSize = downloadSize + 2 byte CoE-Header + 8 byte SDO Header */ - return MBXERR_INVALIDSIZE; - } - } + /* HBu 29.03.06: if it is a segmented download the mbxSize has to be the complete mailbox size */ + if ((MBX_HEADER_SIZE + EXPEDITED_FRAME_SIZE + downloadSize) > u16ReceiveMbxSize) + { + if (mbxSize != (u16ReceiveMbxSize - MBX_HEADER_SIZE)) + { + return MBXERR_INVALIDSIZE; + } + } + else + { + if (mbxSize != (EXPEDITED_FRAME_SIZE + downloadSize)) + { + /* the mbxSize and the downloadSize are not consistent (mbxSize = downloadSize + 2 byte CoE-Header + 8 byte SDO Header */ + return MBXERR_INVALIDSIZE; + } + } - /* pData is the pointer to the downloaded object data */ - pData = (UINT16 MBXMEM *) ((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->Data; - /* the received dataSize will be checked in the object specific functions called from - OBJ_Write (in objdef.c) */ - dataSize = downloadSize; - if ( dataSize > (UINT32)(mbxSize - DOWNLOAD_NORM_REQ_SIZE) ) - { - /* Segmented Download */ - segTransfer = 1; - } - } - } + /* pData is the pointer to the downloaded object data */ + pData = (UINT16 MBXMEM *) ((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->Data; + /* the received dataSize will be checked in the object specific functions called from + OBJ_Write (in objdef.c) */ + dataSize = downloadSize; + if (dataSize > (UINT32)(mbxSize - DOWNLOAD_NORM_REQ_SIZE)) + { +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1012 to 1015 deleted*/ + abort = ABORTIDX_PARAM_LENGTH_ERROR; + } + } + } -/*ECATCHANGE_START(V5.12) COE6*/ - if ((abort == 0) && (sdoHeader & SDOHEADER_COMPLETEACCESS )) -/*ECATCHANGE_END(V5.12) COE6*/ - { - bCompleteAccess = 1; - // HBu 02.05.06: Complete Access is only supported with subindex 0 and 1 - if (subindex > 1) - { - abort = ABORTIDX_UNSUPPORTED_ACCESS; - } - } +/* ECATCHANGE_START(V5.13) COE5*/ + if ((abort == 0) && (bCompleteAccess == 1)) +/* ECATCHANGE_END(V5.13) COE5*/ +/*ET9300 Project Handler :(#if COMPLETE_ACCESS_SUPPORTED) lines 1025 to 1033 deleted*/ + { + abort = ABORTIDX_UNSUPPORTED_ACCESS; + } - if ( abort == 0 ) - { - if ( segTransfer ) - { - bSdoSegFollows = TRUE; - bSdoSegLastToggle = 1; - bSdoSegAccess = bCompleteAccess; - nSdoSegIndex = index; - nSdoSegSubindex = subindex; - pSdoSegObjEntry = pObjEntry; - if ( command == SDOSERVICE_INITIATEUPLOADREQ ) - { - nSdoSegCompleteSize = objLength; - } - else - { - nSdoSegCompleteSize = dataSize; - } + if (abort == 0) + { +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1041 to 1126 deleted*/ + { +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1128 to 1139 deleted*/ + if (command == SDOSERVICE_INITIATEUPLOADREQ) + { + /* Expedited or Normal Upload */ + abort = OBJ_Read(index, subindex, objLength, pObjEntry, pData, bCompleteAccess); +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 1144 to 1165 deleted*/ + } + else + { + /* Expedited or Normal Download */ + abort = OBJ_Write(index, subindex, dataSize, pObjEntry, pData, bCompleteAccess); +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 1171 to 1192 deleted*/ + } + } /* else if ( objLength == 0 ) */ + } /* if ( abort == 0 ) */ - if (pSdoSegData != NULL) - { - FREEMEM( (UINT16 VARMEM *) pSdoSegData); - pSdoSegData = NULL; - } - pSdoSegData = (UINT16 VARMEM *) ALLOCMEM( ROUNDUPBYTE2WORD(nSdoSegCompleteSize) ); + } //if(pObjEntry) (Object handle found) + else + { + abort = ABORTIDX_OBJECT_NOT_EXISTING; + } + break; - if ( pSdoSegData == NULL ) - { - if(bCompleteAccess) - { - abort = ABORTIDX_UNSUPPORTED_ACCESS; - } - else - { - abort = ABORTIDX_OUT_OF_MEMORY; - } - } - else - { - if ( command == SDOSERVICE_INITIATEUPLOADREQ ) - { - /* Segmented Upload */ - abort = OBJ_Read( index, subindex, objLength, pObjEntry, (UINT16 MBXMEM *) pSdoSegData, bCompleteAccess ); - if ( abort == 0 ) - { -/* ECATCHANGE_START(V5.12)*/ - MBXMEMCPY((UINT16 *) ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoInd)->Data, pSdoSegData, dataSize ); -/* ECATCHANGE_END(V5.12)*/ - nSdoSegService = SDOSERVICE_UPLOADSEGMENTREQ; - } - else if ( abort == ABORTIDX_WORKING ) - { - /* the application generates the SDO-Response later on by calling SDOS_SdoRes (only possible if object access function pointer is defined) */ - u8PendingSdo = SDO_PENDING_SEG_READ; - bStoreCompleteAccess = bCompleteAccess; - u8StoreSubindex = subindex; - u16StoreIndex = index; - u32StoreDataSize = objLength; - pStoreData = pSdoSegData; - pSdoPendFunc = pObjEntry->Read; +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1204 to 1224 deleted*/ + default: + abort = ABORTIDX_COMMAND_SPECIFIER_UNKNOWN; + break; + } - bSdoInWork = TRUE; - /* we have to store the buffer and the response header */ - pSdoResStored = pSdoInd; +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 1230 to 1232 deleted*/ + { + /* type cast was added because of warning */ + SdoRes(abort, command, (UINT8)(sdoHeader & SDOHEADER_COMPLETEACCESS), (UINT16)dataSize, objLength, pSdoInd); + } - /*update command field*/ - pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] &= ~SDOHEADER_COMMANDMASK; - pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= (sdoHeader & (SDOHEADER_COMPLETEACCESS | SDOHEADER_COMMAND)); - nSdoSegService = SDOSERVICE_UPLOADSEGMENTREQ; - return 0; - } - } - else - { - /* Segmented Download */ -/* ECATCHANGE_START(V5.12)*/ - MBXMEMCPY( pSdoSegData, (UINT16 *)((TINITSDODOWNLOADNORMREQMBX MBXMEM *) pSdoInd)->Data, mbxSize-DOWNLOAD_NORM_REQ_SIZE ); -/* ECATCHANGE_END(V5.12)*/ - nSdoSegService = SDOSERVICE_DOWNLOADSEGMENTREQ; - dataSize = (mbxSize-DOWNLOAD_NORM_REQ_SIZE); - } - - nSdoSegBytesToHandle = dataSize; - } - } - else - { - if ( objLength == 0 ) - { - /* the objLength is not known, therefore the variables for a possible segmented transfer - should be initialized */ - nSdoSegIndex = index; - nSdoSegSubindex = subindex; - pSdoSegObjEntry = pObjEntry; - } - if ( command == SDOSERVICE_INITIATEUPLOADREQ ) - { - /* Expedited or Normal Upload */ - abort = OBJ_Read( index, subindex, objLength, pObjEntry, pData, bCompleteAccess ); - if ( abort == ABORTIDX_WORKING ) - { - /* the application generates the SDO-Response later on by calling SDOS_SdoRes (only possible if object access function pointer is defined) */ - u8PendingSdo = SDO_PENDING_READ; - bStoreCompleteAccess = bCompleteAccess; - u8StoreSubindex = subindex; - u16StoreIndex = index; - u32StoreDataSize = objLength; - pStoreData = pData; - pSdoPendFunc = pObjEntry->Read; - - bSdoInWork = TRUE; - /* we have to store the buffer and the response header */ - pSdoResStored = pSdoInd; - - /*update command field*/ - pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] &= ~SDOHEADER_COMMANDMASK; - pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= (sdoHeader & (SDOHEADER_COMPLETEACCESS | SDOHEADER_COMMAND)); - return 0; - } - } - else - { - /* Expedited or Normal Download */ - abort = OBJ_Write( index, subindex, dataSize, pObjEntry, pData, bCompleteAccess ); - if ( abort == ABORTIDX_WORKING ) - { - /* the application generates the SDO-Response later on by calling SDOS_SdoRes (only possible if object access function pointer is defined) */ - u8PendingSdo = SDO_PENDING_WRITE; - bStoreCompleteAccess = bCompleteAccess; - u8StoreSubindex = subindex; - u16StoreIndex = index; - u32StoreDataSize = dataSize; - pStoreData = pData; - pSdoPendFunc = pObjEntry->Write; - - bSdoInWork = TRUE; - /* we have to store the buffer and the response header */ - pSdoResStored = pSdoInd; - - /*update command field*/ - pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] &= ~SDOHEADER_COMMANDMASK; - pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] |= (sdoHeader & (SDOHEADER_COMPLETEACCESS | SDOHEADER_COMMAND)); - return 0; - } - } - } /* else if ( objLength == 0 ) */ - } /* if ( abort == 0 ) */ - - } //if(pObjEntry) (Object handle found) - else - { - abort = ABORTIDX_OBJECT_NOT_EXISTING; - } - break; - - case SDOSERVICE_DOWNLOADSEGMENTREQ: - case SDOSERVICE_UPLOADSEGMENTREQ: - if ( command == nSdoSegService ) - { - if ( command == SDOSERVICE_DOWNLOADSEGMENTREQ ) - { - abort = SdoDownloadSegmentInd( (TDOWNLOADSDOSEGREQMBX MBXMEM *) pSdoInd ); - } - else - { - abort = SdoUploadSegmentInd( (TUPLOADSDOSEGREQMBX MBXMEM *) pSdoInd ); - } - } - else - { - abort = ABORTIDX_COMMAND_SPECIFIER_UNKNOWN; - } - break; - - default: - abort = ABORTIDX_COMMAND_SPECIFIER_UNKNOWN; - break; - } - - if(abort != ABORTIDX_WORKING) - { - /* type cast was added because of warning */ - SdoRes(abort, command, (UINT8) (sdoHeader & SDOHEADER_COMPLETEACCESS), (UINT16) dataSize, objLength, pSdoInd); - } - - return 0; + return 0; } -///////////////////////////////////////////////////////////////////////////////////////// -/** - \param abort Result of the SDO access - \param objLength Complete size of the object - \param pData Pointer to the mailbox buffer +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 1241 to 1308 deleted*/ - \brief This function is called when a SDO response shall be sent -*//////////////////////////////////////////////////////////////////////////////////////// - -void SDOS_SdoRes(UINT8 abort, UINT32 objLength, UINT16 MBXMEM *pData) -{ - UINT16 dataSize = 0; - - if (bSdoInWork) - { - /* SDO-Response is expected */ - UINT8 command = pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] & SDOHEADER_COMMAND; - UINT8 completeAccess = pSdoResStored->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] & SDOHEADER_COMPLETEACCESS; - - if ( command == SDOSERVICE_INITIATEUPLOADREQ ) - { - /* dataSize contains the available size in one mailbox */ - dataSize = u16SendMbxSize - MBX_HEADER_SIZE - UPLOAD_NORM_RES_SIZE; - if ( dataSize < objLength ) - { - /* Segmented Upload, the variables for the segmented transfer should be initialized */ - bSdoSegFollows = TRUE; - bSdoSegLastToggle = 1; - bSdoSegAccess = completeAccess; - nSdoSegCompleteSize = objLength; - nSdoSegService = SDOSERVICE_UPLOADSEGMENTREQ; - pSdoSegData = (UINT16 VARMEM *) pData; - /* the first segment shall be copied */ -/* ECATCHANGE_START(V5.12)*/ - MBXMEMCPY((UINT16 *)((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoResStored)->Data, pData, dataSize); -/* ECATCHANGE_END(V5.12)*/ - nSdoSegBytesToHandle = dataSize; - } - else - if ( (objLength <= 4) && (objLength > 0) ) - { - /* Expedited response */ - if ( pData != ((TINITSDOUPLOADEXPRESMBX MBXMEM *) pSdoResStored)->Data ) - { - /* the data is not in the response buffer yet, it shall be copied */ -/* ECATCHANGE_START(V5.12)*/ - MBXMEMCPY((UINT16 *)((TINITSDOUPLOADEXPRESMBX MBXMEM *) pSdoResStored)->Data, pData, objLength); -/* ECATCHANGE_END(V5.12)*/ - } - } - else - { - /* Normal response */ - if ( pData != ((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoResStored)->Data ) - { - /* the data is not in the response buffer yet, it shall be copied */ -/* ECATCHANGE_START(V5.12)*/ - MBXMEMCPY((UINT16 *)((TINITSDOUPLOADNORMRESMBX MBXMEM *) pSdoResStored)->Data, pData, objLength); -/* ECATCHANGE_END(V5.12)*/ - } - } - } - - /* SDO access is finished, send the response */ - bSdoInWork = FALSE; - SdoRes(abort, command, completeAccess, dataSize, objLength, pSdoResStored); - } -} - -/* ECATCHANGE_START(V5.12) MBX3*/ -///////////////////////////////////////////////////////////////////////////////////////// -/** -\brief Clear the variables handling a pending SDO Response - This function shall be called before the other mailbox data pointer are set to NULL -*//////////////////////////////////////////////////////////////////////////////////////// - -void SODS_ClearPendingResponse() -{ - if ((bSdoInWork == TRUE) && (pSdoResStored != NULL) && (((TMBX MBXMEM *)pSdoResStored) != psRepeatMbx) && (((TMBX MBXMEM *)pSdoResStored) != psStoreMbx)) - { - APPL_FreeMailboxBuffer(pSdoResStored); - pSdoResStored = NULL; - } - - u8PendingSdo = 0; - bStoreCompleteAccess = FALSE; - u16StoreIndex = 0; - u8StoreSubindex = 0; - u32StoreDataSize = 0; - pStoreData = NULL; - pSdoPendFunc = NULL; - bSdoInWork = FALSE; - - if (pSdoSegData != NULL) - { - FREEMEM((UINT16 VARMEM *) pSdoSegData); - pSdoSegData = NULL; - } - - nSdoSegBytesToHandle = 0; - nSdoSegService = 0; - -} -/* ECATCHANGE_END(V5.12) MBX3*/ +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE || SEGMENTED_SDO_SUPPORTED) lines 1310 to 1350 deleted*/ ///////////////////////////////////////////////////////////////////////////////////////// /** @@ -1071,303 +535,274 @@ void SODS_ClearPendingResponse() \return Indicates if an error occurred while the operation ( good = 0 ). \brief This function is called when a SDO-Info request service - is received from the master and calls depending from - the opcode the concerning function. + is received from the master and calls depending from + the opcode the concerning function. *//////////////////////////////////////////////////////////////////////////////////////// -UINT8 SDOS_SdoInfoInd( TSDOINFORMATION MBXMEM *pSdoInfoInd ) +UINT8 SDOS_SdoInfoInd(TSDOINFORMATION MBXMEM *pSdoInfoInd) { - UINT8 abort = 0; - /* the variable opCode contains the requested SDO Information type */ - UINT8 opCode = (UINT8) ((pSdoInfoInd->SdoHeader.InfoHead & INFOHEAD_OPCODE_MASK) >> INFOHEAD_OPCODE_SHIFT); - OBJCONST TOBJECT OBJMEM * pObjEntry; - UINT16 index; - UINT8 flags = COE_SERVICE; + UINT8 abort = 0; + /* the variable opCode contains the requested SDO Information type */ + UINT8 opCode = (UINT8)((pSdoInfoInd->SdoHeader.InfoHead & INFOHEAD_OPCODE_MASK) >> INFOHEAD_OPCODE_SHIFT); + OBJCONST TOBJECT OBJMEM * pObjEntry; + UINT16 index; + UINT8 flags = COE_SERVICE; - /* it has to be checked if the mailbox protocol is correct, the sent mailbox data length has to - great enough for the service header of the requested SDO Information type */ - if ( opCode == SDOINFOSERVICE_ENTRYDESCRIPTION_Q ) - { - if ( pSdoInfoInd->MbxHeader.Length < SIZEOF_SDOINFOENTRYREQSTRUCT ) - { - return MBXERR_SIZETOOSHORT; - } - } - else - { - if ( pSdoInfoInd->MbxHeader.Length < SIZEOF_SDOINFOLISTSTRUCT ) - { - return MBXERR_SIZETOOSHORT; - } - } + /* it has to be checked if the mailbox protocol is correct, the sent mailbox data length has to + great enough for the service header of the requested SDO Information type */ + if (opCode == SDOINFOSERVICE_ENTRYDESCRIPTION_Q) + { + if (pSdoInfoInd->MbxHeader.Length < SIZEOF_SDOINFOENTRYREQSTRUCT) + { + return MBXERR_SIZETOOSHORT; + } + } + else + { + if (pSdoInfoInd->MbxHeader.Length < SIZEOF_SDOINFOLISTSTRUCT) + { + return MBXERR_SIZETOOSHORT; + } + } - switch (opCode) - { - case SDOINFOSERVICE_OBJDICTIONARYLIST_Q: - /* an object list is requested, check if the list type is supported */ - if (SWAPWORD(pSdoInfoInd->SdoHeader.Data.List.ListType) <= INFO_LIST_TYPE_MAX) - { - UINT16 size = 0; - /* the variable listType contains the requested listType */ - UINT8 listType = (UINT8)SWAPWORD(pSdoInfoInd->SdoHeader.Data.List.ListType); + switch (opCode) + { + case SDOINFOSERVICE_OBJDICTIONARYLIST_Q: + /* an object list is requested, check if the list type is supported */ + if (SWAPWORD(pSdoInfoInd->SdoHeader.Data.List.ListType) <= INFO_LIST_TYPE_MAX) + { + UINT16 size = 0; + /* the variable listType contains the requested listType */ + UINT8 listType = (UINT8)SWAPWORD(pSdoInfoInd->SdoHeader.Data.List.ListType); - /* the SDO Information Header has to be stored because this function will be - called again if the response could not be sent with one mailbox service, the - variable nSdoInfoFragmentsLeft is 0 zero for the first call and unequal 0 - for the following calls */ - MBXMEMCPY(aSdoInfoHeader, pSdoInfoInd, SDO_INFO_HEADER_BYTE_SIZE); - if (listType-- == 0) - { - /* List-Type 0: length of the lists */ - UINT8 i; + /* the SDO Information Header has to be stored because this function will be + called again if the response could not be sent with one mailbox service, the + variable nSdoInfoFragmentsLeft is 0 zero for the first call and unequal 0 + for the following calls */ + MBXMEMCPY(aSdoInfoHeader, pSdoInfoInd, SDO_INFO_HEADER_BYTE_SIZE); + if (listType-- == 0) + { + /* List-Type 0: length of the lists */ + UINT8 i; - /* the needed mailbox size for List-Type 0 response is just 24 bytes, the mailbox has always - to be at least 24 bytes to support the SDO Information service */ - nSdoInfoFragmentsLeft = 0; - for (i = 0; i < INFO_LIST_TYPE_MAX; i++) - { - UINT16 n = OBJ_GetNoOfObjects(i); + /* the needed mailbox size for List-Type 0 response is just 24 bytes, the mailbox has always + to be at least 24 bytes to support the SDO Information service */ +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1411 to 1413 deleted*/ + for (i = 0; i < INFO_LIST_TYPE_MAX; i++) + { + UINT16 n = OBJ_GetNoOfObjects(i); - /* copy the number of objects of the list type in the SDO Information response */ - ((UINT16 MBXMEM *) &pSdoInfoInd->CoeHeader)[(SIZEOF_SDOINFOLISTSTRUCT >> 1) + i] = SWAPWORD(n); - } + /* copy the number of objects of the list type in the SDO Information response */ + ((UINT16 MBXMEM *) &pSdoInfoInd->CoeHeader)[(SIZEOF_SDOINFOLISTSTRUCT >> 1) + i] = SWAPWORD(n); + } - /* size of the mailbox service response */ - size = (INFO_LIST_TYPE_MAX << 1) + SIZEOF_SDOINFOLISTSTRUCT; - } - else - { - /* object list with indexes is requested */ - UINT16 MBXMEM * pData; - UINT16 n = 0; + /* size of the mailbox service response */ + size = (INFO_LIST_TYPE_MAX << 1) + SIZEOF_SDOINFOLISTSTRUCT; + } + else + { + /* object list with indexes is requested */ + UINT16 MBXMEM * pData; + UINT16 n = 0; - if (nSdoInfoFragmentsLeft) - { - /* the next fragment of the SDO Information response shall be sent */ - /* initialize size with the maximum size fits into one mailbox service */ - { - size = u16SendMbxSize - SIZEOF_SDOINFO - MBX_HEADER_SIZE; - } - /* initialize pData with the pointer where the fragment has to be copied */ - pData = &((UINT16 MBXMEM *) &pSdoInfoInd->CoeHeader)[SIZEOF_SDOINFO >> 1]; - /* initialize index with the next index to be sent */ - index = nSdoInfoIndex; - /* decrement the number of fragments to be sent */ - nSdoInfoFragmentsLeft--; - } - else - { - /* the first fragment of the SDO Information response has to be sent */ - /* get the number of objects of the requested object list */ - n = OBJ_GetNoOfObjects(listType); - /* we start with index 0x1000 */ - index = 0x1000; - /* initialize size with the maximum size fits into one mailbox service */ - { - size = u16SendMbxSize - SIZEOF_SDOINFOLISTSTRUCT - MBX_HEADER_SIZE; - } - /* initialize pData with the pointer where the fragment has to be copied */ - pData = &((UINT16 MBXMEM *) &pSdoInfoInd->CoeHeader)[SIZEOF_SDOINFOLISTSTRUCT >> 1]; - /*Check if List need to be send in fragments*/ - if ((n << 1) > size) - { - /*number of Bytes to transmit don't fit into one mailbox datagram*/ +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1431 to 1455 deleted*/ + { + /* the first fragment of the SDO Information response has to be sent */ + /* get the number of objects of the requested object list */ + n = OBJ_GetNoOfObjects(listType); + /* we start with index 0x1000 */ + index = 0x1000; + /* initialize size with the maximum size fits into one mailbox service */ +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1463 to 1470 deleted*/ + { + size = u16SendMbxSize - SIZEOF_SDOINFOLISTSTRUCT - MBX_HEADER_SIZE; + } + /* initialize pData with the pointer where the fragment has to be copied */ + pData = &((UINT16 MBXMEM *) &pSdoInfoInd->CoeHeader)[SIZEOF_SDOINFOLISTSTRUCT >> 1]; + /*Check if List need to be send in fragments*/ + if ((n << 1) > size) +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1478 to 1493 deleted*/ + { + abort = ABORTIDX_UNSUPPORTED_ACCESS; + } + } - /*calculate number of fragments which need to be send - total number of bytes - bytes which will be transmitted with the current response plus the fragment size - 1 (to round up) divided by the size of the following fragments - */ - UINT16 Fragsize = size + 2; - - nSdoInfoFragmentsLeft = (((n << 1) - size + (Fragsize - 1)) / Fragsize); - } - else - { - nSdoInfoFragmentsLeft = 0; - } - } + /* get the next part of the requested object list */ + size = OBJ_GetObjectList(listType, &index, size, pData, &abort); - /* get the next part of the requested object list */ - size = OBJ_GetObjectList(listType, &index, size, pData, &abort); + /* store index for next fragment */ + nSdoInfoIndex = index; + /* size contains before the instruction the size still available in the mailbox buffer + and shall contain the size of the mailbox response data after the next instruction */ +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1507 to 1514 deleted*/ + { + size = u16SendMbxSize - size - MBX_HEADER_SIZE; + } + } - /* store index for next fragment */ - nSdoInfoIndex = index; - /* size contains before the instruction the size still available in the mailbox buffer - and shall contain the size of the mailbox response data after the next instruction */ - { - size = u16SendMbxSize - size - MBX_HEADER_SIZE; - } - } + /* size of the mailbox response data */ + pSdoInfoInd->MbxHeader.Length = size; - /* size of the mailbox response data */ - pSdoInfoInd->MbxHeader.Length = size; + if (abort == 0) + { + pSdoInfoInd->SdoHeader.InfoHead &= ~INFOHEAD_OPCODE_MASK; + pSdoInfoInd->SdoHeader.InfoHead |= (UINT16)(SDOINFOSERVICE_OBJDICTIONARYLIST_S << INFOHEAD_OPCODE_SHIFT); + pSdoInfoInd->SdoHeader.FragmentsLeft = 0; +/*ET9300 Project Handler :(#if !SEGMENTED_SDO_SUPPORTED #else) lines 1529 to 1545 deleted*/ + } + } + break; - if (abort == 0) - { - pSdoInfoInd->SdoHeader.InfoHead &= ~INFOHEAD_OPCODE_MASK; - pSdoInfoInd->SdoHeader.InfoHead |= (UINT16)(SDOINFOSERVICE_OBJDICTIONARYLIST_S << INFOHEAD_OPCODE_SHIFT); - /* number of fragments still has to be sent */ - pSdoInfoInd->SdoHeader.FragmentsLeft = SWAPWORD(nSdoInfoFragmentsLeft); + case SDOINFOSERVICE_OBJDESCRIPTION_Q: + case SDOINFOSERVICE_ENTRYDESCRIPTION_Q: + /* get the requested index */ + index = SWAPWORD(pSdoInfoInd->SdoHeader.Data.Obj.Index); - if (nSdoInfoFragmentsLeft) - { - /* there still are fragments to be sent, - the InComplete flag in the SDO Information response has to be sent */ - pSdoInfoInd->SdoHeader.InfoHead &= ~INFOHEADER_INCOMPLETE_MASK; - pSdoInfoInd->SdoHeader.InfoHead |= (UINT16)(SDOINFOSERVICE_INCOMPLETE << INFOHEAD_OPCODE_SHIFT); - /* the FRAGMENTS_FOLLOW flag has to be set for the function MBX_MailboxSendReq to - indicate the mailbox handler that still fragments has to be sent so that this - function shall be called again from COE_ContinueInd when the actual mailbox buffer - was sent */ - flags = FRAGMENTS_FOLLOW | COE_SERVICE; - } - } - } - break; +/*ET9300 Project Handler :(#if TEST_APPLICATION && EOE_SUPPORTED) lines 1555 to 1623 deleted*/ - case SDOINFOSERVICE_OBJDESCRIPTION_Q: - case SDOINFOSERVICE_ENTRYDESCRIPTION_Q: - /* get the requested index */ - index = SWAPWORD(pSdoInfoInd->SdoHeader.Data.Obj.Index); +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1625 to 1642 deleted*/ + + if (index < 0x1000) + { + /*SDO Info access is only allowed for objects >= 0x1000*/ + abort = ABORTIDX_UNSUPPORTED_ACCESS; + } + else + { + /* get the object handle of the requested index */ + pObjEntry = OBJ_GetObjectHandle(index); + + if (pObjEntry) + { + /* object exists */ + UINT16 size = 0; + + if (opCode == SDOINFOSERVICE_OBJDESCRIPTION_Q) + { + /* object description is requested */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 1662 to 1666 deleted*/ + OBJTOMBXMEMCPY(&pSdoInfoInd->SdoHeader.Data.Obj.Res, OBJ_GetObjDesc(pObjEntry), SDO_INFO_OBJ_DESC_SIZE); +/*ET9300 Project Handler :(#if TEST_APPLICATION) lines 1671 to 1683 deleted*/ + /* the mailbox should be big enough that the maximum object description + fits in the mailbox (the fragmentation is not done in the sample code), + so it will be checked only if the object description fits */ + size = OBJ_GetDesc(index, 0, pObjEntry, NULL) + SIZEOF_SDOINFOOBJSTRUCT; - if(index < 0x1000) - { - /*SDO Info access is only allowed for objects >= 0x1000*/ - abort = ABORTIDX_UNSUPPORTED_ACCESS; - } - else - { - /* get the object handle of the requested index */ - pObjEntry = OBJ_GetObjectHandle( index ); + if (size > (u16SendMbxSize - MBX_HEADER_SIZE)) + { + /* size of the object description does not fit in the mailbox, + the object description will be sent without the name */ + size = SIZEOF_SDOINFOOBJSTRUCT; + } + else + { + /* object description fits in the mailbox, get the name of the object */ + size = OBJ_GetDesc(index, 0, pObjEntry, ((UINT16 MBXMEM *) &(&pSdoInfoInd->SdoHeader.Data.Obj.Res)[1])) + SIZEOF_SDOINFOOBJSTRUCT; + } + } + else + { + /* entry description is requested, + get the requested subindex */ + UINT8 subindex = (UINT8)((pSdoInfoInd->SdoHeader.Data.Entry.Info & ENTRY_MASK_SUBINDEX) >> ENTRY_SUBINDEX_SHIFT); - if ( pObjEntry ) - { - /* object exists */ - UINT16 size = 0; - - if ( opCode == SDOINFOSERVICE_OBJDESCRIPTION_Q ) - { - /* object description is requested */ - OBJTOMBXMEMCPY(&pSdoInfoInd->SdoHeader.Data.Obj.Res, OBJ_GetObjDesc(pObjEntry), SDO_INFO_OBJ_DESC_SIZE); + /* get the maximum subindex */ + UINT8 maxSubindex = (OBJ_GetObjDesc(pObjEntry)->ObjFlags & OBJFLAGS_MAXSUBINDEXMASK) >> OBJFLAGS_MAXSUBINDEXSHIFT; + if (subindex <= maxSubindex) + { + UINT16 ObjectFlags; + /* requested subindex is not too great */ + /* get the entry description of the requested entry */ +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 1715 to 1720 deleted*/ + OBJTOMBXMEMCPY(&pSdoInfoInd->SdoHeader.Data.Entry.Res, OBJ_GetEntryDesc(pObjEntry, subindex), SIZEOF(TSDOINFOENTRYDESC)); - /* the mailbox should be big enough that the maximum object description - fits in the mailbox (the fragmentation is not done in the sample code), - so it will be checked only if the object description fits */ - size = OBJ_GetDesc(index, 0, pObjEntry, NULL) + SIZEOF_SDOINFOOBJSTRUCT; + /* the transmission of the value info is not supported yet of the sample code */ + pSdoInfoInd->SdoHeader.Data.Entry.Info &= ~ENTRY_MASK_VALUEINFO; + ObjectFlags = OBJ_GetObjDesc(pObjEntry)->ObjFlags; + ObjectFlags = (ObjectFlags & OBJFLAGS_OBJCODEMASK) >> OBJFLAGS_OBJCODESHIFT; - if ( size > (u16SendMbxSize - MBX_HEADER_SIZE) ) - { - /* size of the object description does not fit in the mailbox, - the object description will be sent without the name */ - size = SIZEOF_SDOINFOOBJSTRUCT; - } - else - { - /* object description fits in the mailbox, get the name of the object */ - size = OBJ_GetDesc(index, 0, pObjEntry, ((UINT16 MBXMEM *) &(&pSdoInfoInd->SdoHeader.Data.Obj.Res)[1])) + SIZEOF_SDOINFOOBJSTRUCT; - } - } - else - { - /* entry description is requested, - get the requested subindex */ - UINT8 subindex = (UINT8) ((pSdoInfoInd->SdoHeader.Data.Entry.Info & ENTRY_MASK_SUBINDEX) >> ENTRY_SUBINDEX_SHIFT); + if (((ObjectFlags == OBJCODE_ARR) || (ObjectFlags == OBJCODE_REC)) && (subindex == 0)) + { + OBJTOMBXSTRCPY(((UINT16 MBXMEM *) &(&pSdoInfoInd->SdoHeader.Data.Entry.Res)[1]), aSubindexDesc, SIZEOF(aSubindexDesc)); + size = 12 + SIZEOF_SDOINFO + SIZEOF(TSDOINFOENTRY); // 12: Length of "SubIndex 000" + } + else + { + /* the mailbox should be big enough that the maximum entry description + fits in the mailbox (the fragmentation is not done in the sample code), + so it will be checked only if the entry description fits */ + size = OBJ_GetDesc(index, subindex, pObjEntry, NULL) + SIZEOF_SDOINFO + SIZEOF(TSDOINFOENTRY); + if (size > (u16SendMbxSize - MBX_HEADER_SIZE)) + { + /* size of the object description does not fit in the mailbox, + the object description will be sent without the name */ + size = SIZEOF_SDOINFO + SIZEOF(TSDOINFOENTRY); + } + else + { + /* object description fits in the mailbox, get the name of the entry */ + size = OBJ_GetDesc(index, subindex, pObjEntry, ((UINT16 MBXMEM *) &(&pSdoInfoInd->SdoHeader.Data.Entry.Res)[1])) + SIZEOF_SDOINFO + SIZEOF(TSDOINFOENTRY); + } + } + } + else + { + abort = ABORTIDX_SUBINDEX_NOT_EXISTING; + } + } - /* get the maximum subindex */ - UINT8 maxSubindex = (OBJ_GetObjDesc(pObjEntry)->ObjFlags & OBJFLAGS_MAXSUBINDEXMASK) >> OBJFLAGS_MAXSUBINDEXSHIFT; + if (abort == 0) + { + { + /* for the object and entry description the sample code does not support the fragmentation, + the mailbox has to be big enough */ + pSdoInfoInd->SdoHeader.FragmentsLeft = 0; + /* store the size of the mailbox data in the mailbox buffer */ + pSdoInfoInd->MbxHeader.Length = size; + /* set the opCode of the SDO Information response */ + pSdoInfoInd->SdoHeader.InfoHead &= ~INFOHEAD_OPCODE_MASK; + pSdoInfoInd->SdoHeader.InfoHead |= (UINT16)((opCode + 1) << INFOHEAD_OPCODE_SHIFT); + } + } + } + else + { + abort = ABORTIDX_OBJECT_NOT_EXISTING; + } + } + break; + default: + abort = ABORTIDX_COMMAND_SPECIFIER_UNKNOWN; + } - if ( subindex <= maxSubindex ) - { - UINT16 ObjectFlags; - /* requested subindex is not too great */ - /* get the entry description of the requested entry */ - OBJTOMBXMEMCPY(&pSdoInfoInd->SdoHeader.Data.Entry.Res, OBJ_GetEntryDesc(pObjEntry, subindex), SIZEOF(TSDOINFOENTRYDESC)); + if (abort) + { + /* send a SDO Information Error response */ + pSdoInfoInd->MbxHeader.Length = SIZEOF_SDOINFOERRORSTRUCT; - /* the transmission of the value info is not supported yet of the sample code */ - pSdoInfoInd->SdoHeader.Data.Entry.Info &= ~ENTRY_MASK_VALUEINFO; - ObjectFlags = OBJ_GetObjDesc(pObjEntry)->ObjFlags; - ObjectFlags = (ObjectFlags & OBJFLAGS_OBJCODEMASK) >> OBJFLAGS_OBJCODESHIFT; + pSdoInfoInd->SdoHeader.InfoHead &= ~INFOHEAD_OPCODE_MASK; + pSdoInfoInd->SdoHeader.InfoHead |= (UINT16)((SDOINFOSERVICE_ERROR_Q) << INFOHEAD_OPCODE_SHIFT); - if(((ObjectFlags == OBJCODE_ARR) || (ObjectFlags == OBJCODE_REC)) && (subindex == 0) ) - { - OBJTOMBXSTRCPY( ((UINT16 MBXMEM *) &(&pSdoInfoInd->SdoHeader.Data.Entry.Res)[1]), aSubindexDesc, SIZEOF(aSubindexDesc) ); - size = 12 + SIZEOF_SDOINFO + SIZEOF(TSDOINFOENTRY); // 12: Length of "SubIndex 000" - } - else - { - /* the mailbox should be big enough that the maximum entry description - fits in the mailbox (the fragmentation is not done in the sample code), - so it will be checked only if the entry description fits */ - size = OBJ_GetDesc(index, subindex, pObjEntry, NULL) + SIZEOF_SDOINFO + SIZEOF(TSDOINFOENTRY); - if ( size > (u16SendMbxSize - MBX_HEADER_SIZE) ) - { - /* size of the object description does not fit in the mailbox, - the object description will be sent without the name */ - size = SIZEOF_SDOINFO + SIZEOF(TSDOINFOENTRY); - } - else - { - /* object description fits in the mailbox, get the name of the entry */ - size = OBJ_GetDesc(index, subindex, pObjEntry, ((UINT16 MBXMEM *) &(&pSdoInfoInd->SdoHeader.Data.Entry.Res)[1])) + SIZEOF_SDOINFO + SIZEOF(TSDOINFOENTRY); - } - } - } - else - { - abort = ABORTIDX_SUBINDEX_NOT_EXISTING; - } - } + pSdoInfoInd->SdoHeader.FragmentsLeft = 0; +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 1792 to 1795 deleted*/ + pSdoInfoInd->SdoHeader.Data.Error.ErrorCode = SWAPDWORD(cAbortCode[abort]); - if ( abort == 0 ) - { - { - /* for the object and entry description the sample code does not support the fragmentation, - the mailbox has to be big enough */ - pSdoInfoInd->SdoHeader.FragmentsLeft = 0; - /* store the size of the mailbox data in the mailbox buffer */ - pSdoInfoInd->MbxHeader.Length = size; - /* set the opCode of the SDO Information response */ - pSdoInfoInd->SdoHeader.InfoHead &= ~INFOHEAD_OPCODE_MASK; - pSdoInfoInd->SdoHeader.InfoHead |= (UINT16)((opCode + 1) << INFOHEAD_OPCODE_SHIFT); - } - } - } - else - { - abort = ABORTIDX_OBJECT_NOT_EXISTING; - } - } - break; - default: - abort = ABORTIDX_COMMAND_SPECIFIER_UNKNOWN; - } +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 1799 to 1801 deleted*/ + } - if ( abort ) - { - /* send a SDO Information Error response */ - pSdoInfoInd->MbxHeader.Length = SIZEOF_SDOINFOERRORSTRUCT; + if (MBX_MailboxSendReq((TMBX MBXMEM *) pSdoInfoInd, flags) != 0) + { + /* if the mailbox response could not be sent (or stored), the response will be + stored in the variable pCoeSendStored and will be sent automatically + from the mailbox handler (COE_ContinueInd) when the send mailbox will be read + the next time from the master */ + pCoeSendStored = (TMBX MBXMEM *) pSdoInfoInd; + } - pSdoInfoInd->SdoHeader.InfoHead &= ~INFOHEAD_OPCODE_MASK; - pSdoInfoInd->SdoHeader.InfoHead |= (UINT16) ((SDOINFOSERVICE_ERROR_Q) << INFOHEAD_OPCODE_SHIFT); - - pSdoInfoInd->SdoHeader.FragmentsLeft = 0; - pSdoInfoInd->SdoHeader.Data.Error.ErrorCode = SWAPDWORD(cAbortCode[abort]); - - nSdoInfoFragmentsLeft = 0; - } - - if (MBX_MailboxSendReq((TMBX MBXMEM *) pSdoInfoInd, flags) != 0) - { - /* if the mailbox response could not be sent (or stored), the response will be - stored in the variable pCoeSendStored and will be sent automatically - from the mailbox handler (COE_ContinueInd) when the send mailbox will be read - the next time from the master */ - pCoeSendStored = (TMBX MBXMEM *) pSdoInfoInd; - } - - return 0; + return 0; } /** @} */ diff --git a/sdoserv.h b/sdoserv.h index 9e5223f..04372a4 100644 --- a/sdoserv.h +++ b/sdoserv.h @@ -1,6 +1,7 @@ /* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. +* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf */ /** @@ -98,7 +99,9 @@ V5.01 : Start file change log */ typedef struct MBX_STRUCT_PACKED_START { +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 101 to 128 deleted*/ UINT8 Sdo[4]; /**< \brief 32Bit SDO header buffer*/ +/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 130 to 135 deleted*/ #define SDOHEADER_COMMANDOFFSET 0 /**< \brief Memory offset for the command*/ #define SDOHEADER_INDEXLOOFFSET 1 /**< \brief Memory offset for the low Byte of the object index*/ #define SDOHEADER_INDEXHIOFFSET 2 /**< \brief Memory offset for the high Byte of the object index*/ @@ -144,6 +147,7 @@ TINITSDOMBX; */ typedef struct MBX_STRUCT_PACKED_START { +/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 183 to 209 deleted*/ UINT8 SegHeader; /**< \brief 8Bit header buffer*/ #define SEGHEADER_MASK ((UINT8) 0xFF) /**< \brief SDO header mask*/ #define SEGHEADER_NOMOREFOLLOWS ((UINT8) 0x01) /**< \brief More segments follow flag*/ @@ -498,6 +502,7 @@ typedef struct MBX_STRUCT_PACKED_START { UINT16 Index; /**< \brief Index of the parent object*/ UINT16 Info; /**< \brief Info data including the subindex and identifier for the payload data*/ +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 565 to 570 deleted*/ #define ENTRY_MASK_SUBINDEX 0x00FF /**< \brief Subindex mask*/ #define ENTRY_SUBINDEX_SHIFT 0 /**< \brief Subindex shift*/ #define ENTRY_MASK_VALUEINFO 0xFF00 /**< \brief Value info mask*/ @@ -527,6 +532,7 @@ TSDOINFOERROR; typedef struct MBX_STRUCT_PACKED_START { UINT16 InfoHead; /**< \brief Opcode, Incomplete flag and 8 reserved bits*/ +/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 601 to 606 deleted*/ #define INFOHEAD_OPCODE_MASK 0x007F /**< \brief Opcode mask*/ #define INFOHEAD_OPCODE_SHIFT 0 /**< \brief Opcode shift*/ #define INFOHEADER_INCOMPLETE_MASK 0x0080 /**< \brief Incomplete mask*/ @@ -575,17 +581,7 @@ TSDOINFORMATION; /** @}*/ -/** - * \addtogroup SdoPendingHandler SDO Pending Response - * @{ - * If this feature is enabled (SDO_RES_INTERFACE 1) a SDO request may set to pending and is completed afterwards. - * This can be used to forward the read/write request an additional thread, uController. - */ -#define SDO_PENDING_WRITE 0x1 /**< \brief SDO write request is pending*/ -#define SDO_PENDING_SEG_WRITE 0x2 /**< \brief SDO segmented write request is pending*/ -#define SDO_PENDING_READ 0x3 /**< \brief SDO read request is pending*/ -#define SDO_PENDING_SEG_READ 0x4 /**< \brief SDO segmented read request is pending*/ -/** @}*/ +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 656 to 668 deleted*/ #endif //_SDOSRV_H_ @@ -601,30 +597,13 @@ TSDOINFORMATION; #define PROTO extern #endif -/** - * \addtogroup SdoPendingHandler SDO Pending Response - *@{ - */ -PROTO UINT8 u8PendingSdo; /**< \brief Identifier for the pending SDO service (see SDO_PENDING_XXX defines)*/ -PROTO BOOL bStoreCompleteAccess; /**< \brief Indicates if the pending SDO service is an complete access*/ -PROTO UINT8 u8StoreSubindex; /**< \brief Contains the subindex for the pending SDO request*/ -PROTO UINT16 u16StoreIndex; /**< \brief Contains the Index for the pending SDO request*/ -PROTO UINT32 u32StoreDataSize; /**< \brief Complete data size to be handled*/ -PROTO UINT16 MBXMEM *pStoreData; /**< \brief Pointer to the buffer to be handled*/ -PROTO UINT8 (* pSdoPendFunc)( UINT16 Index, UINT8 Subindex, UINT32 Size, UINT16 MBXMEM * pData, UINT8 bCompleteAccess ); /**< \brief Function pointer for the SDO pending request handler*/ -/** @}*/ +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 684 to 697 deleted*/ PROTO MEM_ADDR VARMEM aSdoInfoHeader[GET_MEM_SIZE(SDO_INFO_HEADER_BYTE_SIZE)]; /**< \brief SDO Info buffer*/ -/** - * \addtogroup SegmentedSdo Segmented SDO - * @{ - */ -PROTO UINT16 VARMEM * VARMEM pSdoSegData; /**< \brief Pointer to the buffer handling to full object/entry data*/ -PROTO UINT16 VARMEM nSdoInfoFragmentsLeft; /**< \brief Number of fragments which need to be transmitted*/ -/** @}*/ +/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 703 to 711 deleted*/ /*----------------------------------------------------------------------------------------- @@ -635,10 +614,8 @@ PROTO UINT16 VARMEM nSdoInfoFragmentsLeft; /**< \brief N PROTO UINT8 SDOS_SdoInfoInd(TSDOINFORMATION MBXMEM *pSdoInfoInd); PROTO UINT8 SDOS_SdoInd(TINITSDOMBX MBXMEM *pSdoInd); -PROTO void SDOS_SdoRes(UINT8 abort, UINT32 objLength, UINT16 MBXMEM *pData); -/* ECATCHANGE_START(V5.12) MBX3*/ -PROTO void SODS_ClearPendingResponse(); -/* ECATCHANGE_END(V5.12) MBX3*/ +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 722 to 724 deleted*/ +/*ET9300 Project Handler :(#if SDO_RES_INTERFACE || SEGMENTED_SDO_SUPPORTED) lines 725 to 727 deleted*/ #undef PROTO diff --git a/tiescfoe.c b/tiescfoe.c new file mode 100644 index 0000000..0175c80 --- /dev/null +++ b/tiescfoe.c @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2021 Texas Instruments Incorporated + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* ========================================================================== */ +/* Include Files */ +/* ========================================================================== */ + +#include +#include + +#include /* for memset */ +#include + +/* ========================================================================== */ +/* Macros & Typedefs */ +/* ========================================================================== */ + +/* ========================================================================== */ +/* Global Variables */ +/* ========================================================================== */ + +#if FOE_SUPPORTED + +extern unsigned char bBootMode; /**< \brief Indicates in slave is in BOOT mode*/ + +static uint8_t foe_download_flag; +static uint8_t file_write_offset; + +/*Section of RAM chosen to store FoE Data*/ +#define S0RAM_BASE 0x20000000U; + +uint8_t *ptr = S0RAM_BASE; + +#endif /* FOE_SUPPORTED */ + +/* ========================================================================== */ +/* Function Declarations */ +/* ========================================================================== */ + +/*----------------------------------------------------------------------------------------- +------ +------ application specific functions +------ +-----------------------------------------------------------------------------------------*/ + +#if FOE_SUPPORTED +/** +* \brief This function should be called when a firmware download command is received +* from EtherCAT master +* +* \param password password received from master +*/ +void tiesc_start_foe_download(uint32_t password); + +/** +* \brief Stores the received data as part of firmware download from EtherCAT master. +* This may get called multiple times during firmware download. This function +* performs OSPI flash writes for every 256-bytes received from master. +* +* \param pData Pointer to data buffer +* \param Size Number of bytes received +*/ + +void tiesc_store_foe_data(uint16_t *pData, uint16_t Size); + +uint16_t tiesc_foe_read(uint16_t *pName, uint16_t nameSize, uint32_t password, + uint16_t maxBlockSize, uint16_t *pData); + +uint16_t tiesc_foe_read_data(uint32_t offset, uint16_t maxBlockSize, + uint16_t *pData); + +uint16_t tiesc_foe_read_data(uint32_t offset, uint16_t maxBlockSize, + uint16_t *pData); + +uint16_t tiesc_foe_write_data(uint16_t *pData, uint16_t Size, + unsigned char bDataFollowing); + +uint16_t tiesc_foe_write(uint16_t *pName, uint16_t nameSize, uint32_t password); +#endif /* FOE_SUPPORTED */ + +/* ========================================================================== */ +/* Function Defintions */ +/* ========================================================================== */ + +/*----------------------------------------------------------------------------------------- +------ +------ generic functions +------ +-----------------------------------------------------------------------------------------*/ + +#if FOE_SUPPORTED + +void tiesc_start_foe_download(uint32_t password) +{ + foe_download_flag = 1; +} + +/* Function to store Data received from FoE operation*/ +void tiesc_store_foe_data(uint16_t *pData, uint16_t Size) +{ + int i; + + for(i=0;i> 8; + uint8_t b = pData[i]; + memset(ptr + file_write_offset, b, 1); + file_write_offset++; + memset(ptr + file_write_offset, a, 1); + file_write_offset++; + } +} + +void tiesc_boot_2_init_handler() +{ + if(foe_download_flag) + { + /* Reset the flag */ + foe_download_flag = 0; + } +} + +/*Dummy function defined, functionality not supported here*/ +uint16_t tiesc_foe_read(uint16_t *pName, uint16_t nameSize, uint32_t password, + uint16_t maxBlockSize, uint16_t *pData) +{ + return TIESC_ECAT_FOE_ERRCODE_NOTFOUND; +} + +/*Dummy function defined, functionality not supported here*/ +uint16_t tiesc_foe_read_data(uint32_t offset, uint16_t maxBlockSize, + uint16_t *pData) +{ + return maxBlockSize; +} + +/* Function called Subsequently for every FoE Write Block*/ +uint16_t tiesc_foe_write_data(uint16_t *pData, uint16_t Size, + unsigned char bDataFollowing) +{ + if(bBootMode) + { + tiesc_store_foe_data(pData, Size); + return 0; + } + else + { + return TIESC_ECAT_FOE_ERRCODE_BOOTSTRAPONLY; + } +} + +/* Function called to initiate FoE Write Operation*/ +uint16_t tiesc_foe_write(uint16_t *pName, uint16_t nameSize, uint32_t password) +{ + if(bBootMode) + { + tiesc_start_foe_download(password); + return 0; + } + else + { + return TIESC_ECAT_FOE_ERRCODE_BOOTSTRAPONLY; + } +} + +#endif /* FOE_SUPPORTED */ + +/* Initialises FoE Related functions to be called by the stack*/ +void tiesc_foe_init(void) +{ +#if FOE_SUPPORTED + pAPPL_FoeRead = tiesc_foe_read; + pAPPL_FoeReadData = tiesc_foe_read_data; + pAPPL_FoeWriteData = tiesc_foe_write_data; + pAPPL_FoeWrite = tiesc_foe_write; + foe_download_flag = 0; +#endif +} diff --git a/tiescfoe.h b/tiescfoe.h new file mode 100644 index 0000000..d6231fd --- /dev/null +++ b/tiescfoe.h @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2021 Texas Instruments Incorporated + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _TIESC_FOE_H_ +#define _TIESC_FOE_H_ + +/* ========================================================================== */ +/* Macros & Typedefs */ +/* ========================================================================== */ + +#if FOE_SUPPORTED + +#define TIESC_ECAT_FOE_ERRCODE_NOTFOUND 0x8001 /**< The file requested by an FoE upload service could not be found on the server*/ +#define TIESC_ECAT_FOE_ERRCODE_BOOTSTRAPONLY 0x8008 /**< FoE only supported in Bootstrap*/ +#define TIESC_ECAT_FOE_ERRCODE_NOTINBOOTSTRAP 0x8009 /**< This file may not be accessed in BOOTSTRAP state*/ + +#endif /* FOE_SUPPORTED */ + +/* ========================================================================== */ +/* Structure Declarations */ +/* ========================================================================== */ + +/* ========================================================================== */ +/* Function Declarations */ +/* ========================================================================== */ + +/** +* \brief This function is called when the state is switched from BOOT to Init +*/ +void tiesc_boot_2_init_handler(); + +void tiesc_foe_init(void); + +#endif /* _TIESC_FOE_H_*/

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 z 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%0AksD`;6EAh&Y0vTVLY15@x;SHR?_LH)}Z=R>Gp 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