Ошибка компиляции 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;
}

Чтобы узнать больше, вы можете использовать этот сайт, который я нашел очень полезным.

Другие вопросы по тегам