Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MSPGCC + MSP430X - проблемы с .far_rom
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
MrYuran
Здравствуй, народ!
Нид ё хелп!

Пришлось таки столкнуться с верхней памятью MSP430X, возникли проблемы.

История болезни:

1. Код перевалил за 53кБ на f2618 и перестал влезать в секцию .rom

2. Не долго думая, некоторые функции перенаправили в верхнюю флешь через __attribute__((section(".far_rom")))
вроде прокатило, но функции почему-то легли с адреса 0x200 вместо 0x10000.

3. Добавили флаг -memory-model = large
Линкер съел, компилятор не понял.

4. Выяснилось, что готовая сборка mspgcc_20120911 не поддерживает нужные ключи (или чяднт?)

Насколько я понял, все доработки находятся в DEVEL ветках и их нужно встраивать ручками.
Сборка gcc конечно полезна для общего развития, но совершенно бессмысленна с т.з. производственного процесса.

Нельзя ли где взять готовые сборки, поддерживающие верхнюю флешь?
Или я чего-то неправильно понимаю?

PS: есть ещё свежак от TI+RH, но там похоже пока только голое ядро, все остальное нужно навешивать самостоятельно.
Сергей Борщ
Цитата(MrYuran @ Feb 12 2014, 13:01) *
2. Не долго думая, некоторые функции перенаправили в верхнюю флешь через __attribute__((section(".far_rom")))
вроде прокатило, но функции почему-то легли с адреса 0x200 вместо 0x10000.
Давно этим не занимался, возможно сильно изменили после меня, но я вводил другой атрибут. Там не только переместить функцию надо, но и вызовы ее и из нее другими командами делать, и возврат.
Цитата(MrYuran @ Feb 12 2014, 13:01) *
3. Добавили флаг -memory-model = large
Линкер съел, компилятор не понял.
Такого флага не помню. А в доке совсем ничего нет на эту тему? Помню делал несколько флагов - для проектов только с близким кодом, с дальним кодом и какие-то вариации не то с константами, не то с указателями еще... Практически ничего уже не помню...

У меня два компа сменилось с тех пор, исходники навряд ли найду, да и наворотили там с тех пор уже много чего. Последний раз когда заглядывал в исходники увидел большие куски своего кода под чужими фамилиями. Видимо фамилии тех, кто сливал с sourceforge в официальные исходники.

Добавлено: глянул вику - да, все теперь по-другому. Придется вам разбираться самому.
MrYuran
Докладываю о статусе прогресса sm.gif

Вчера пытались собрать по инструкции экспериментальную версию 4.7.0 и даже с грехом пополам собрали.. велосипед sm.gif
Оказывается, это все уже лежит почти два года.

Я параллельно пытаюсь запустить красно-шляпо-техасскую версию 4.8.0, которая, по всей видимости, и станет дальнейшим продолжением MSPGCC.
Кстати говоря, её вроде как должны включить в общий репозиторий GCC. Глядишь, и klen когда-нибудь порадует нас очередной своей сборкой sm.gif

Вот здесь наконец-то выудил нужную опцию для задания модели памяти:

-mlarge и -msmall соответственно, вместо упоминавшихся в вике -mmemory-model=large

Копаем дальше sm.gif

Я уже дошел до "undefined reference to `__P6OUT'", то есть осталось [заставить] подцепить нужный ld файл..

Кстати, LLVM в лицензиях упомянут не зря:
Код
1>C:\mspgcc_new\msp430\include/in430.h(91):6: warning: conflicting types for built-in function '__delay_cycles' [enabled by default]
1> void __delay_cycles (unsigned long int delay);
1>      ^

Clang-style?
MrYuran
smile3046.gif

Код
c:/msp430gcc/bin/../lib/gcc/msp430-elf/4.8.0/../../../../msp430-elf/bin/ld.exe:
.\exe\1002DT_430_02_00.elf section `.infomem' will not fit in region `VECT0'
c:/msp430gcc/bin/../lib/gcc/msp430-elf/4.8.0/../../../../msp430-elf/bin/ld.exe:
section __interrupt_vector_6 loaded at [0000ffcc,0000ffcd] overlaps section .inf
omem loaded at [0000ffc0,0000ffdd]
c:/msp430gcc/bin/../lib/gcc/msp430-elf/4.8.0/../../../../msp430-elf/bin/ld.exe:
region `VECT0' overflowed by 28 bytes
collect2.exe: error: ld returned 1 exit status
make: *** [.\exe\1002DT_430_02_00.elf] Error 1


Какого.. .infomem легло на вектора?
MrYuran
Подключил вручную memory.ld и peripherals.ld, вроде полегчало.
Однако опять проблема с .infomem


lst:
0000072a l d .infomem 00000000 .infomem

В прошивке соответственно:
Код
@072a
00 00 46 00 c8 00 c8 00 07 02 00 00 00 00 00 00
00 40 00 00 00 40 00 00 00 40 6f 12 03 3a
q


map:
Код
.infomem        0x0000072a       0x1e
.infomem       0x0000072a       0x1e ./Obj/flash.o
                0x0000072a                FlashData


ld:
Код
  infomem          : ORIGIN = 0x1000, LENGTH = 0x0100 /* END=0x10FF, size 256 as 2 128-byte segments */
  infod            : ORIGIN = 0x0001, LENGTH = 0x0080 /* END=0x0000, size 128 */
  infoc            : ORIGIN = 0x0F80, LENGTH = 0x0080 /* END=0x0FFF, size 128 */
  infob            : ORIGIN = 0x1000, LENGTH = 0x0080 /* END=0x107F, size 128 */
  infoa            : ORIGIN = 0x1080, LENGTH = 0x0080 /* END=0x10FF, size 128 */


Жесть какая-то..
MrYuran
Продолджаю блог sm.gif (хай буде)

Итак, пока я вчера ремонтировал поизносившиеся за 8 лет зубы, в теме настал хеппи-энд sm.gif

Итак:
1. mspgcc-20120911-experimental с mspgcc.sf.net (неплохо закопали sm.gif )
2. ключики
CFLAGS += -mmemory-model=large
LDFLAGS += -mmemory-model=large
3. библиотеки подключать из /lib/mcpu-430x/

Вроде бы все..

BSL загрузчик старой версии не поддерживает загрузку в верхнюю память, MspFet тоже не смог, равно как msp430-bsl (pyBSL) из состава раннего mspgcc.
Пришлось у техасцев взять версию посвежее, прокатило.

На 5-м семействе выяснилось, что BSL грузится только через scripter (новая примочка от TI)

Вот такой у нас теперь зоопарк.

PS: забыл добавить: таки функции и данные отправляются наверх вручную, через аттрибут section=...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.