工具与软件:
您好!
我有一个可以很好地使用 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