有一个 ATMEL 库不适用于我的工具链(用于 ARM 的 GNU 工具),我知道为什么,但我不知道为什么它适用于旧的 YAGARTO,我想这也适用于 KEIL 和 IAR
我正在使用不支持对整数(4 字节)的非对齐访问的 ARMV5 处理器(AT91SAM9)。
有一个全局缓冲区定义为:
static unsigned char pPageBuffer[AT91C_IFLASH_PAGE_SIZE];
缓冲区获取一些数据,然后将数据写入闪存,但数据必须一次写入 4 个字节,因此有一个名为 pAlignedSource 的 int 指针可以一次读取 4 个字节的数据。
pAlignedSource = (unsigned int*)pPageBuffer;
但是 pPAgeBuffer 不一定是 4 字节对齐的,因为它是一个 char 数组,并且 pAlignedSource 并不指向对齐的地址。这段代码怎么可能总是在另一个工具链中工作,但不在我的工具链中?,我已经为编译器定义了正确的 CPU,除了两个编译器都获得相同的代码标志。
我的问题是当数据从缓冲区复制到闪存时
*pAlignedDestination++ = *pAlignedSource++;
我以数据的加扰版本结束:/,但是我通过将缓冲区定义为来解决这个问题
static unsigned int pPageBuffer[AT91C_IFLASH_PAGE_SIZE/4];
它成功了,但我仍然对此很好奇。为什么它在其他工具链中起作用?