Существует библиотека ATMEL, которая не работает с моей инструментальной привязкой (инструменты GNU для ARM), и я знаю почему, но я не знаю, почему это работает для старого YAGARTO и я полагаю, что также для KEIL и IARРазличия в инструментальных элементах с выравниванием (почему это даже сработало)
Я работаю в процессоре ARMV5 (AT91SAM9), который не поддерживает неравномерный доступ к ints (4 байта).
есть глобальный буфер определяется как:
static unsigned char pPageBuffer[AT91C_IFLASH_PAGE_SIZE];
Буфер получает некоторые данные, а затем данные записываются на флэш, но данные должны быть приняты во флэш 4 байта, в то время, таким образом, есть int pointer, называемый pAlignedSource, для передачи данных по 4 байта за раз.
pAlignedSource = (unsigned int*)pPageBuffer;
Но pPAgeBuffer не обязательно 4 байта выровнены, как это массив символов, и pAlignedSource не указывает на выровненной адрес. Как возможно, что этот код работает всегда в другой toolchain, но не в моем ?, я уже определил правильный процессор для компилятора, отличный от того, что оба компилятора получают одинаковые флаги кода.
Моя проблема заключается в том, что, когда получает данные копируется из буфера вспышки
*pAlignedDestination++ = *pAlignedSource++;
Я оканчиваться зашифрованной версией данных: /, но я это исправил, определив буфер, как
static unsigned int pPageBuffer[AT91C_IFLASH_PAGE_SIZE/4];
И это было трюк, но мне все еще очень интересно. Почему он работал в другой инструментальной цепочке?
Как это «не работает»? Вероятно, pPageBuffer начинается с байтового выровненного адреса, а затем писать слова должно быть хорошо. То, что я искал, нарушает строгие проблемы с псевдонимом и энтерианством с тем, что вы делаете, но мы знаем, что ваша проблема. – IdeaHat
В случае, если вы попросите, вы можете получить библиотеку [здесь] (http://www.atmel.com/images/at91lib_20100901_softpack_1_5_svn_v8476.zip) в файле flashd_eefc.c function FLSHD_Write – LuisF
Он получает данные с неглавного адреса, но заканчивается каким-то образом scrambled – LuisF