реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> MSPGCC + MSP430X - проблемы с .far_rom
MrYuran
сообщение Feb 12 2014, 11:01
Сообщение #1


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Здравствуй, народ!
Нид ё хелп!

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

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

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

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

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

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

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

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

PS: есть ещё свежак от TI+RH, но там похоже пока только голое ядро, все остальное нужно навешивать самостоятельно.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 12 2014, 11:58
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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

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

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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 14 2014, 07:58
Сообщение #3


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Докладываю о статусе прогресса 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?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 14 2014, 10:20
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



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 легло на вектора?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 14 2014, 11:53
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Подключил вручную 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 */


Жесть какая-то..


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Feb 18 2014, 09:46
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Продолджаю блог 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=...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th July 2025 - 21:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016