Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: mspgcc и scmrtos = уже работает.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
AHTOXA
Всем привет!
Пытаюсь подружить mspgcc и scmrtos. Вроде уже компилируется:-)
Но не работает.
Такое впечатление, что не вызываются глобальные конструкторы.
Смотрю листинг, вижу что сразу после копирования data и очистки bss прыгает на main:
Код
00001100 <_reset_vector__>:
    1100:    b2 40 80 5a     mov    #23168,    &0x0120;#0x5a80
    1104:    20 01
    1106:    3f 40 6a 1b     mov    #7018,    r15;#0x1b6a
    110a:    3e 40 00 02     mov    #512,    r14;#0x0200
    110e:    3d 40 e0 04     mov    #1248,    r13;#0x04e0
    1112:    0d 9e           cmp    r14,    r13;
    1114:    05 24           jz    $+12    ;abs 0x1120
    1116:    fe 4f 00 00     mov.b    @r15+,    0(r14);
    111a:    1e 53           inc    r14;
    111c:    0e 9d           cmp    r13,    r14;
    111e:    fb 2b           jnc    $-8     ;abs 0x1116
    1120:    3f 40 e0 04     mov    #1248,    r15;#0x04e0
    1124:    3d 40 e0 04     mov    #1248,    r13;#0x04e0
    1128:    0d 9f           cmp    r15,    r13;
    112a:    05 24           jz    $+12    ;abs 0x1136
    112c:    cf 43 00 00     mov.b    #0,    0(r15);r3 As==00
    1130:    1f 53           inc    r15;
    1132:    0f 9d           cmp    r13,    r15;
    1134:    fb 2b           jnc    $-8     ;abs 0x112c
    1136:    30 40 9e 18     br    #0x189e;


0x189e - это уже main.

Это я глючу, или mspgcc? :-)

Проект прилагается.
Сергей Борщ
Цитата(AHTOXA @ Mar 17 2008, 14:19) *
Такое впечатление, что не вызываются глобальные конструкторы.
Возможно, они выкидываются при линковке. Я мельком глянул скрипты линкера и сравнил их со скриптами avr-libc. Посмотрите разницу, попробуйте сделать по аналогии. Может поможет:
Код
mspgcc:
...
    *(.init6)  /* C++ constructors.  */
...
     __ctors_start = .;
     *(.ctors)
     __ctors_end = .;
     __dtors_start = .;
     *(.dtors)
     __dtors_end = .;
    . = ALIGN(2);
...
avr-libc:
...
     __ctors_start = .;
     *(.ctors)
     __ctors_end = .;
     __dtors_start = .;
     *(.dtors)
     __dtors_end = .;
    KEEP(SORT(*)(.ctors))
    KEEP(SORT(*)(.dtors))
...
    *(.init6)  /* C++ constructors.  */
    KEEP (*(.init6))
...
AHTOXA
Цитата(Сергей Борщ @ Mar 17 2008, 17:44) *
Возможно, они выкидываются при линковке. Я мельком глянул скрипты линкера и сравнил их со скриптами avr-libc. Посмотрите разницу, попробуйте сделать по аналогии. Может поможет


К сожалению, не помогло. Что так, что эдак - размер секции text не меняется. Собственно, сами вызовы конструкторов в листинге присутствуют:
Код
0000113a <__ctors_start>:
    113a:    b8 12           call    @r8+    ;
    113c:    94 18           .word    0x1894;    ????
    113e:    06 1a           .word    0x1a06;    ????

00001140 <__ctors_end>:
    1140:    30 40 44 11     br    #0x1144    ;

00001144 <_unexpected_>:
    1144:    00 13           reti


Но вот выполнение туда не попадает... Вряд ли это линкер. Может у самого компилятора какие-нибудь ключи?
diwil
Цитата(AHTOXA @ Mar 17 2008, 17:09) *
Но вот выполнение туда не попадает... Вряд ли это линкер. Может у самого компилятора какие-нибудь ключи?


нет ключей - глобальные конструкторы так и не были доделаны.
AHTOXA
Цитата(diwil @ Mar 17 2008, 19:49) *
нет ключей - глобальные конструкторы так и не были доделаны.


Упс... Вот незадача:-)
Что же делать? Может можно подсунуть при компиляции другой crt0?
Или тупо вызвать конструкторы в начала main?

А Вы не планируете в ближайшем будущем это доделать? smile.gif
Сергей Борщ
Цитата(diwil @ Mar 17 2008, 16:49) *
нет ключей - глобальные конструкторы так и не были доделаны.
Не очень оптимистично звучит. Но я решил проверить smile.gif Результат моих исследований таков - какой-то код для конструкторов генерится. Не очень красивый получается __static_initialization_and_destruction_0, но на первый взгляд вполне рабочий. Нету __do_global_ctors, но их можно добавить вручную. Самая большая (на мой взгляд) проблема - весь стартап из библиотеки, идущей в комплекте mspgcc-win32 20070212, скомпилирован в секцию .init и поэтому код вызова конструкторов просто обходится. В репозитории на sourceforge в папке /gcc/gcc-4.0.2/gcc/config/msp430 лежит файл libgcc.S, в котором стартап уже раскидан по правильным секциям .initX и в котором есть __do_global_ctors.

Вопрос к diwil: можно ли скомпилить libgcc.S из этой папки CVS и использовать с msp-gcc 3.2.3 или они несовместимы и придется выдергивать из него нужные части и прикладывать к проекту в виде crt0.S?
И второй вопрос - какие перспективы у msp-gcc?

P.S. попробовал - вроде получилось. Скомпилил
Код
msp430-gcc  -mmcu=msp430x149 -x assembler-with-cpp -Wa,-gdwarf2 -DL_reset_vector__  -DL_ctors  -c  libgcc.S -o release/obj/libgcc.o
прилинковал - судя по дизассемблерному листингу должно работать.
AHTOXA: а чем кончилась ваша эпопея?
AHTOXA
Цитата(Сергей Борщ @ Mar 28 2008, 00:04) *
P.S. попробовал - вроде получилось. Скомпилил
Код
msp430-gcc  -mmcu=msp430x149 -x assembler-with-cpp -Wa,-gdwarf2 -DL_reset_vector__  -DL_ctors  -c  libgcc.S -o release/obj/libgcc.o
прилинковал - судя по дизассемблерному листингу должно работать.


А мой примерчик не пробовали компилить с этим crt0? Или как раз его?

Цитата
AHTOXA: а чем кончилась ваша эпопея?


Очередной проект обошёлся без РТОС :-) К сожалению я смог выкроить всего неделю на попытку, теперь снова гонка, некогда...
Сергей Борщ
Цитата(AHTOXA @ Mar 7 2008, 22:40) *
А мой примерчик не пробовали компилить с этим crt0? Или как раз его?
Попробовал. Слегка, дрожащей рукой, поправил makefile и судя по листингу должно работать. Добавил ключ -С в генерацию листинга. Имена функций стали гораздо читабельнее. Жаль, проверить не на чем. Выкладываю - если будет не лень, попробуйте.

Еще пробовал добавлять -ffunction-sections компилятору и -Wl,--gc-sections линкеру - тоже работает, выкидывает все лишнее. На -fdata-sections компилятор выдал внутреннюю ошибку и предложил отправить баг-репорт.
AHTOXA
Цитата(Сергей Борщ @ Mar 28 2008, 02:38) *
Попробовал. Слегка, дрожащей рукой, поправил makefile и судя по листингу должно работать. Добавил ключ -С в генерацию листинга. Имена функций стали гораздо читабельнее. Жаль, проверить не на чем. Выкладываю - если будет не лень, попробуйте.


Работает! Шикарно! (© Картман:-))
За ключ -C - спасибо, так гораздо лучше:-)

Цитата
Еще пробовал добавлять -ffunction-sections компилятору и -Wl,--gc-sections линкеру - тоже работает, выкидывает все лишнее. На -fdata-sections компилятор выдал внутреннюю ошибку и предложил отправить баг-репорт.


Так я про это уже писал. Мне тогда не пришло в голову попробовать -ffunction-sections отдельно. Ну что же, и то хлеб:-)

ЗЫ. Я тогда этот пример ещё погоняю, подровняю немного, распихаю всё обратно по каталогам, чтоб структура была как у всех остальных портов, и будет порт, окей?
diwil
Цитата(Сергей Борщ @ Mar 27 2008, 22:04) *
Вопрос к diwil: можно ли скомпилить libgcc.S из этой папки CVS и использовать с msp-gcc 3.2.3 или они несовместимы и придется выдергивать из него нужные части и прикладывать к проекту в виде crt0.S?
И второй вопрос - какие перспективы у msp-gcc?


Можно - будет работать.

А вот насчет перспектив я пока не знаю. У меня умер диск с новыми исходниками и руки пока что не доходят восстановить. Однако, в скором будующем я планирую опять поиграть с этими контроллерами, так что шанс есть smile.gif - сяду и поделаю компилер для начала...
AHTOXA
Цитата(AHTOXA @ Mar 28 2008, 11:21) *
Я тогда этот пример ещё погоняю, подровняю немного, распихаю всё обратно по каталогам, чтоб структура была как у всех остальных портов, и будет порт, окей?


Собсна вот biggrin.gif

Трансляция порта scmRTOS для msp430 под mspgcc.
Все три примера работают, в деле пока не применял, но твёрдо намерен:-)

ЗЫ. Большое спасибо Сергею Борщу за помощь:-)
MrYuran
То есть, как я понял, пора переобозвать тему: mspgcc и scmrtos = работает
smile.gif smile.gif smile.gif
Спасибо за порт, в ближайшее время попробую (как с модбасом разделаюсь)
MrYuran
А ведь действительно mspgcc и scmrtos = работает!

Вчера попробовал, запустилась с лёту.
2 AHTOXA - a14.gif

только небольшая помарочка в файле OS_Target_asm.s
в режиме scmRTOS_CONTEXT_SWITCH_SCHEME == 0 асм ругается на SP и SR
заменил на r1 и r2, всё попёрло
AHTOXA
Цитата(MrYuran @ Apr 17 2008, 14:53) *
только небольшая помарочка в файле OS_Target_asm.s
в режиме scmRTOS_CONTEXT_SWITCH_SCHEME == 0 асм ругается на SP и SR


А, точно, прозевал:-) Спасибо, исправляю.
IgorKossak
Цитата(MrYuran @ Mar 31 2008, 11:16) *
То есть, как я понял, пора переобозвать тему: mspgcc и scmrtos = работает

Переименовал.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.