你好,请问CPU访问EtherCAT是按照字去访问嘛?为什么访问的时候offset要除以2呢?memcpy的时候除以了2不会减少实际传输的数据大小嘛?
void
ESC_writeBlockISR(ESCMEM_ADDR *pData, uint16_t address, uint16_t len)
{
uint16_t wordValue;
//
// Create pointer to ESC Address
//
void * escDest = (void *)(ESC_BASE + (uint32_t)(address / 2U));
//
// Determine if length (in bytes) is even or odd
//
if((len & 0x1U) == 0x1U)
{
//
// Odd Length
//
//
// Copy even bytes of buffer data to ESC memory.
// Convert length to words.
//
memcpy(escDest, pData, (size_t)((len - 1U) >> 1U));
//
// Read last 16-bit word
//
wordValue = ESC_readWordISR(address + (len - 1U));
//
// Modify word data and set new data
//
wordValue &= ESC_M_MSB;
wordValue |= (pData[((len - 1U) / 2U)] & ESC_M_LSB);
//
// Write modified value to ESC destination
//
ESC_writeWordISR(wordValue, (address + (len - 1U)));
}
else
{
//
// Even Length
//
//
// Copy buffer data to ESC memory. Convert length to words.
//
memcpy(escDest, pData, (size_t)(len >> 1U));
}
}