|
mspgcc и scmrtos = уже работает., Благодарю за помощь клуба:-) |
|
|
|
Mar 17 2008, 12:19
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Всем привет! Пытаюсь подружить 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? :-) Проект прилагается.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
 |
Ответов
|
Mar 17 2008, 12:44
|

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

|
Цитата(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)) ...
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 17 2008, 14:09
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Сергей Борщ @ 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 Но вот выполнение туда не попадает... Вряд ли это линкер. Может у самого компилятора какие-нибудь ключи?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Mar 17 2008, 14:49
|
Местный
  
Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107

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

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

|
Цитата(diwil @ Mar 17 2008, 16:49)  нет ключей - глобальные конструкторы так и не были доделаны. Не очень оптимистично звучит. Но я решил проверить  Результат моих исследований таков - какой-то код для конструкторов генерится. Не очень красивый получается __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: а чем кончилась ваша эпопея?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 27 2008, 20:40
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Сергей Борщ @ 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: а чем кончилась ваша эпопея? Очередной проект обошёлся без РТОС :-) К сожалению я смог выкроить всего неделю на попытку, теперь снова гонка, некогда...
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Mar 27 2008, 21:38
|

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

|
Цитата(AHTOXA @ Mar 7 2008, 22:40)  А мой примерчик не пробовали компилить с этим crt0? Или как раз его? Попробовал. Слегка, дрожащей рукой, поправил makefile и судя по листингу должно работать. Добавил ключ -С в генерацию листинга. Имена функций стали гораздо читабельнее. Жаль, проверить не на чем. Выкладываю - если будет не лень, попробуйте. Еще пробовал добавлять -ffunction-sections компилятору и -Wl,--gc-sections линкеру - тоже работает, выкидывает все лишнее. На -fdata-sections компилятор выдал внутреннюю ошибку и предложил отправить баг-репорт.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 28 2008, 06:21
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(Сергей Борщ @ Mar 28 2008, 02:38)  Попробовал. Слегка, дрожащей рукой, поправил makefile и судя по листингу должно работать. Добавил ключ -С в генерацию листинга. Имена функций стали гораздо читабельнее. Жаль, проверить не на чем. Выкладываю - если будет не лень, попробуйте. Работает! Шикарно! (© Картман:-)) За ключ -C - спасибо, так гораздо лучше:-) Цитата Еще пробовал добавлять -ffunction-sections компилятору и -Wl,--gc-sections линкеру - тоже работает, выкидывает все лишнее. На -fdata-sections компилятор выдал внутреннюю ошибку и предложил отправить баг-репорт. Так я про это уже писал. Мне тогда не пришло в голову попробовать -ffunction-sections отдельно. Ну что же, и то хлеб:-) ЗЫ. Я тогда этот пример ещё погоняю, подровняю немного, распихаю всё обратно по каталогам, чтоб структура была как у всех остальных портов, и будет порт, окей?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Mar 31 2008, 07:16
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(AHTOXA @ Mar 28 2008, 11:21)  Я тогда этот пример ещё погоняю, подровняю немного, распихаю всё обратно по каталогам, чтоб структура была как у всех остальных портов, и будет порт, окей? Собсна вот Трансляция порта scmRTOS для msp430 под mspgcc. Все три примера работают, в деле пока не применял, но твёрдо намерен:-) ЗЫ. Большое спасибо Сергею Борщу за помощь:-)
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
Сообщений в этой теме
AHTOXA mspgcc и scmrtos = уже работает. Mar 17 2008, 12:19   AHTOXA Цитата(diwil @ Mar 17 2008, 19:49) нет кл... Mar 17 2008, 15:34    diwil Цитата(Сергей Борщ @ Mar 27 2008, 22:04) ... Mar 28 2008, 10:55 MrYuran То есть, как я понял, пора переобозвать тему: mspg... Mar 31 2008, 08:16 IgorKossak Цитата(MrYuran @ Mar 31 2008, 11:16) То е... Apr 18 2008, 10:53 MrYuran А ведь действительно mspgcc и scmrtos = работает... Apr 17 2008, 08:53 AHTOXA Цитата(MrYuran @ Apr 17 2008, 14:53) толь... Apr 17 2008, 14:19
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|