Ошибка компиляции TI Red Hat mspgcc-430
Итак, я пытаюсь скомпилировать код, написанный на C для msp430fx в Linux. Недавно я перекомпилировал новую версию mspgcc, потому что ранее использовалась версия 4.3, и она не была совместима / стабильна с расширенным режимом (20 бит -mlarge).
Я следил за этим сайтом.
После установки я запускаю простую (main, вызываю некоторую случайную функцию), и она хорошо компилируется, но теперь, компилируя этот большой проект, в конце я получаю эту ошибку:
msp430-gcc -o build / MoteISTv5_mspgcc / projects / common / 03oos_macpong_prog -mmcu = msp430f5438a -Wall -Wno-main -mlarge -O0 -g -ggdb build / MoteISTv5_mspgcc / projects / common / 03oos_macpong /pgp_m_macmacmacmacmacoma_maco_macoma_boco_boxo.dll БСП / доски -Lbuild/MoteISTv5_mspgcc/ ядро / openos -Lbuild/MoteISTv5_mspgcc/ драйверы -Lbuild/MoteISTv5_mspgcc/ OpenStack -Lbuild/MoteISTv5_mspgcc/openapps -lopenstack -lopenapps -lkernel -ldrivers -lbsp / опт / MSP430-набора инструментов / Библиотека / GCC /msp430-none-elf/4.9.1/../../../../msp430-none-elf/bin/ld: невозможно открыть файл сценария компоновщика msp430f5438a.ld: такого файла или каталога не существует collect2: error: ld вернул 1 scons состояния выхода: *** [build/MoteISTv5_mspgcc/projects/common/03oos_macpong_prog] Ошибка 1 scons: сборка прекращена из-за ошибок.
Поскольку я не очень разбираюсь в компиляторах, мне нужна помощь в решении этой проблемы. Кто-нибудь может помочь?
Спасибо заранее,
Диого Герра
1 ответ
РЕДАКТИРОВАТЬ: В этой новой версии msp430-elf-gcc эта функция называется _read_SR() вместо __read_status_register().
======================= / ====================== / === ==================
Ну, по-видимому, мне пришлось принудительно установить каталог файла.ld во флаги компилятора с помощью -L .
Но теперь с новым msp430-gcc v4.9.1 он не распознает функцию __read_status_register, а в mspgcc-legacy (4.6.3) он скомпилирован без проблем...
Я немного просмотрел и, видимо, библиотеки bin не поддерживают большинство __ "функций специального процессора". Они сказали, что мы должны использовать встроенную сборку для доступа к специальным регистрам, что неудобно. "Они бы удалили эту поддержку?
Если вам нужно использовать встроенную сборку, вот пример для __read_status_register()
static inline __attribute__((always_inline))
unsigned int __read_status_register( void){
unsigned int xReturn;
asm volatile( "MOV R2, %0"
: "=r" (xReturn)); // output parameters
return xReturn;
}
Чтобы узнать больше, вы можете использовать этот сайт, который я нашел очень полезным.