工具与软件:
您好!
我有一个可以很好地使用 TI Clang 编译器的 EtherCAT 示例。 但是、对于 GCC 编译器、EtherCAT 演示因对 PRU 的未对齐访问而停止。 我有编译器标志"-munaligned-access"、但这没有帮助、因为未对齐的 memcpy 在 RAM 中运行良好、但 在访问其他外设存储器时可能会导致问题(好像发生了这种情况)。
值得注意的是、长度不均的值(如45)可以正常工作、但长度值(如47)为 memcpy 摊位。 作为权变措施、我从 EtherCAT 演示中修改了 memcpy 包装器函数、并按分段复制最后一个字节。
void * tiesc_memcpy(uint8_t *dst, const uint8_t *src, uint32_t size_bytes)
{
#if 0
memcpy(dst, src, size_bytes);
return dst;
#endif
if(size_bytes % 4 != 3)
{
memcpy(dst, src, size_bytes);
}
else
{
memcpy(dst, src, size_bytes - 3);
for(int i = size_bytes - 3; i < size_bytes; i++)
{
dst[i] = src[i];
}
}
return dst;
}
我正在使用的 GCC 版本是 GCC-10.3-2021.10。 您是否有比使用此权变措施更好的想法?
提前感谢、
Álvaro μ A