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

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> MSP-GCC 4. Кто-нибудь пробовал?, Случайно наткнулся:)
mdmitry
сообщение Nov 6 2009, 15:46
Сообщение #16


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 6 2009, 18:10) *
Так возьмите и допишите. Это не архисложная задача - читать даташит и вписывать из него #define, она не требует знания потрохов компилятора. А чтобы другие не изобретали велосипед - поделитесь результатом своих трудов.

Есть один момент, который сильно смущает. Насколько я представляю, в gcc принята некоторая система в организации заголовочных файлов, связанных с функциональными модулями (usart и другие). Для конкретного контроллера заголовочных файлов несколько и они связаны между собой через определения доступной периферии. Имеется прецедент в виде файла gpio_5xxx.h специально для этой серии. На мой взгляд и остальная периферия получается в этом же виде (отдельные файлы hardmodulname_54xxx.h). НО это есть отклонение от изначальной системы, похоже на латание дыр для совместимости с предыдущими семействами.
Поправьте в чем не прав.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2009, 16:45
Сообщение #17


Гуру
******

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



Цитата(mdmitry @ Nov 6 2009, 17:46) *
Имеется прецедент в виде файла gpio_5xxx.h специально для этой серии. На мой взгляд и остальная периферия получается в этом же виде (отдельные файлы hardmodulname_54xxx.h).
Ну usi.h и usci.h ведь не смущают - разная периферия, разные файлы. Периферия семейства 5xxx настолько существенно отличается от предыдущих семейств, что мне показалось логичным вынести ее в отдельный файл. Может название не совсем уданое, но ничего лучше в голову не пришло.
Цитата(mdmitry @ Nov 6 2009, 17:46) *
похоже на латание дыр для совместимости с предыдущими семействами.
Есть предложения как улучшить - пишите в список рассылки, там последний год оживление наблюдается.


--------------------
На любой вопрос даю любой ответ
"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
mdmitry
сообщение Nov 6 2009, 17:25
Сообщение #18


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 6 2009, 19:45) *
Ну usi.h и usci.h ведь не смущают - разная периферия, разные файлы. Периферия семейства 5xxx настолько существенно отличается от предыдущих семейств, что мне показалось логичным вынести ее в отдельный файл. Может название не совсем уданое, но ничего лучше в голову не пришло.Есть предложения как улучшить - пишите в список рассылки, там последний год оживление наблюдается.

Смущает то, что напрашивается usi_54xx.h и т.д.
ВСЁ для этого семейства специфично и плохо стыкуется с имеющейся структурой файлов. Получается, что проект с другого контроллера нельзя практически перевести на это семейство, сменив только тип контроллера в makefile (расширенная периферия для совместимости предположительно не используется). Потребуется имена включаемых файлов изменять. Если такую переносимость во внимание не принимать, то всё годится.
hardmodulename_54xx.h вполне понятное название.
Предложений по улучшению, к сожалению, нет, одни сомнения.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2009, 18:03
Сообщение #19


Гуру
******

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



Цитата(mdmitry @ Nov 6 2009, 19:25) *
Получается, что проект с другого контроллера нельзя практически перевести на это семейство, сменив только тип контроллера в makefile (расширенная периферия для совместимости предположительно не используется). Потребуется имена включаемых файлов изменять.
Ой!
В проект включается только io.h. Из него, в зависимости от ключа -mmcu, автоматически включается нужный msp430fxxx.h, а уже из него тоже автоматически все необходимые файлы периферии.


--------------------
На любой вопрос даю любой ответ
"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
mdmitry
сообщение Nov 6 2009, 21:25
Сообщение #20


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 6 2009, 21:03) *
В проект включается только io.h. Из него, в зависимости от ключа -mmcu, автоматически включается нужный msp430fxxx.h, а уже из него тоже автоматически все необходимые файлы периферии.

?????
io.h -> msp430x54xx.h ->iomacros.h ->sys/inttypes.h
msp430/wdt_a.h
msp430/sys.h
msp430/gpio_5xxx.h
msp430/mpy32.h
msp430/timera.h
msp430/unified_clock_system.h
msp430/usci.h

msp430/timerb.h не включен
Если оставаться в этой системе для заголовочных файлов, то в соответствующие файлы необходимо внести дополнения.
В примерах включен не только io.h.

В winavr точно приходилось подключать несколько файлов.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 7 2009, 07:45
Сообщение #21


Гуру
******

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



Цитата(mdmitry @ Nov 6 2009, 23:25) *
msp430/timerb.h не включен

Если оставаться в этой системе для заголовочных файлов, то в соответствующие файлы необходимо внести дополнения.
Вот потому timerb.h и не включен, что дополнения в него еще не внесены. То есть явно видно - timerb.h надо править или как минимум проверить на совместимость.
Цитата(mdmitry @ Nov 6 2009, 23:25) *
В примерах включен не только io.h.

В winavr точно приходилось подключать несколько файлов.
Открыл наугад 10 примеров. Во всех включен только io.h. В WinAVR для подключения описания периферии достаточно подключить только io.h. В документации на avr-libc это единственный рекомендуемый способ подключения описания периферии.


--------------------
На любой вопрос даю любой ответ
"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
mdmitry
сообщение Nov 7 2009, 14:08
Сообщение #22


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 7 2009, 10:45) *
В WinAVR для подключения описания периферии достаточно подключить только io.h.

Именно описания периферии, но не ей же единой. Хочется использовать вс,что есть (таймеры, сторожевой и т.д.).
Если говороить только о доступе к периферии, то io.h и полностью согласен с Вами.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 7 2009, 18:33
Сообщение #23


Гуру
******

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



Цитата(mdmitry @ Nov 7 2009, 16:08) *
Хочется использовать вс,что есть (таймеры, сторожевой и т.д.).
То есть функции более высокого уровня (вроде wdt_reset()), уже написанные кем-то? Ну так их тоже можно дополнить до поддержки 5xxx.


--------------------
На любой вопрос даю любой ответ
"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
сообщение May 21 2010, 11:41
Сообщение #24


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

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



Таки попробовал...
Компилятор что-то компилит.
А вот потом начинаются чудеса:
CODE
C:\mspgcc4\bin\msp430-gcc ./Obj/main.o ./Obj/process_MB.o ./Obj/measure.o
./Obj/temperature.o ./Obj/utils.o ./Obj/TimerB.o ./Obj/flash.o ./Obj/gen.o ./Obj/AD7708.o
./Obj/mb.o ./Obj/mbcrc.o ./Obj/mbrtu.o ./Obj/portevent.o ./Obj/portserial.o ./Obj/porttimer.o
./Obj/mbfunccoils.o ./Obj/mbfuncdiag.o ./Obj/mbfuncdisc.o ./Obj/mbfuncholding.o ./Obj/mbfuncinput.o
./Obj/mbfuncother.o ./Obj/mbutils.o ./Obj/dco.o
-mmcu=msp430x149 -Wl,--section-start -Wl,.seg_a=0x1080 -Wl,--gc-sections
-Wl,-Map=9010U.map,--cref -LC:\mspgcc4"\bin\lib" -LC:\mspgcc4"\msp430\lib"
-LC:\mspgcc4"\msp430\include" -LC:\mspgcc4"\msp430\include\msp430" -Wl,-relax -lc -lm -o 9010U.elf
./Obj/mb.o: In function `abs':
mb.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
c:\mspgcc4\bin\msp430-ld.exe: Disabling relaxation: it will not work with multiple definitions
./Obj/mb.o: In function `labs':
mb.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbrtu.o: In function `abs':
mbrtu.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbrtu.o: In function `labs':
mbrtu.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfunccoils.o: In function `abs':
mbfunccoils.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfunccoils.o: In function `labs':
mbfunccoils.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfuncdisc.o: In function `abs':
mbfuncdisc.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfuncdisc.o: In function `labs':
mbfuncdisc.c:(.text.labs+0x0): multiple definition of `labs'
./Obj
/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfuncholding.o: In function `abs':
mbfuncholding.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfuncholding.o: In function `labs':
mbfuncholding.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfuncinput.o: In function `abs':
mbfuncinput.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfuncinput.o: In function `labs':
mbfuncinput.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfuncother.o: In function `abs':
mbfuncother.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfuncother.o: In function `labs':
mbfuncother.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbutils.o: In function `abs':
mbutils.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbutils.o: In function `labs':
mbutils.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
collect2: ld returned 1 exit status
mingw32-make.exe: *** [9010U.elf] Error 1
Process terminated with status 2 (0 minutes, 21 seconds)

А вот листинг и мап:
Прикрепленный файл  9010U.zip ( 52.01 килобайт ) Кол-во скачиваний: 82

что за abs и labs - в упор не понимаю...
-fwhole-program вроде работает, но требует, чтобы компилятору скармливались все файла зараз, иначе потом линкер концов не находит.

Короче, с ходу не взлетел sad.gif
Со старым всё компилится нормально


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 13:06
Сообщение #25


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

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



Нашёл предварительно, где копать:
stdlib.h:

Код
extern __inline__ int abs(int __x) __ATTR_CONST__;
extern __inline__ int abs(int __x)
{
    return (__x < 0)  ?  -__x  :  __x;
}
        
extern __inline__ long labs(long __x) __ATTR_CONST__;
extern __inline__ long labs(long __x)
{
    return (__x < 0)  ?  -__x  :  __x;
}


Ну и каким местом он влезает во все модули, где есть stdlib.h ?
Посмотрел, в старой версии этот файл один-в-один

Таки победил smile.gif
Пришлось extern __inline__ заменить на static __inline__
Цитата
Build project 9010U - OK.
text data bss dec hex filename
20191 72 742 21005 520d 9010U.elf
msp430-gcc (MSPGCC4_r4-20100210) 4.4.3
Copyright © 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ну ничего себе "Better optimization. The generated code is typically 7%-10% smaller than code generated by MSPGCC-3.2.3"
- 20k против 12 от предыдущей версии!


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 21 2010, 13:14
Сообщение #26


Гуру
******

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



Цитата(MrYuran @ May 21 2010, 15:48) *
Ну и каким местом он влезает во все модули, где есть stdlib.h ?
Посмотрел, в старой версии этот файл один-в-один
Сочетание extern и __inline__ выглядит, мягко говоря, странным. Возможно старый и новый компиляторы трактуют __inline__ по-разному или в новых заголовочниках где-нибудь стоит строка
Код
#define __inline__


Цитата(MrYuran @ May 21 2010, 16:06) *
20k против 12 от предыдущей версии!
Так там еще куча ключей должна была добавиться. Возможно с ними и получше будет. Пробуйте вот с этими поиграться:
Код
#CFLAGS += -fno-ivopts
CFLAGS += -fno-tree-scev-cprop
#CFLAGS += -fno-split-wide-types
CFLAGS += -fno-inline-small-functions
CFLAGS += -fno-inline-functions

#adjust --param inline-call-cost= to get minimal code size
CFLAGS += --param inline-call-cost=1
#CFLAGS += -fno-reorder-blocks
#CFLAGS += -fno-reorder-blocks-and-partition
#CFLAGS += -fno-reorder-functions
#CFLAGS += -fno-toplevel-reorder
CFLAGS += -fno-move-loop-invariants
#CFLAGS += -fno-unroll-loops
#CFLAGS += -fno-unroll-all-loops
#CFLAGS += --param max-unroll-times=0
Очень влияет --param inline-call-cost=, причем на разных исходниках оптимум дают разные значения.


--------------------
На любой вопрос даю любой ответ
"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
сообщение May 21 2010, 13:19
Сообщение #27


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

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



Цитата(Сергей Борщ @ May 21 2010, 17:14) *
Сочетание extern и __inline__ выглядит, мягко говоря, странным.

Ну, не я ж это придумал!
За ключики спасибо, буду играться.
Предыдущий результат был с -O3.
-Os даёт 13к против 12.7к, опять не в пользу 4 версии sad.gif
Так и не понял, к какому месту DWARF2 прикручивать...
Но в целом прогресс (с прошлого года) заметен.
Даже установщик кой-какой приделали.
В файлах периферии виднеются F5xx, СС430 и G2xx

Да, и это надо ещё на железке прогнать.
Старый компилятор, хоть и не без глюков, но собирал рабочие бинарники. Этот - пока не знаю.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 21 2010, 13:22
Сообщение #28


фанат дивана
******

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



Цитата(MrYuran @ May 21 2010, 19:06) *
Ну ничего себе "Better optimization. The generated code is typically 7%-10% smaller than code generated by MSPGCC-3.2.3"
- 20k против 12 от предыдущей версии!

Это общая тенденция - 4й GCC генерит больший код, чем 3й. Хотя 20 против 12 - это явный перебор.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 13:34
Сообщение #29


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

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



Цитата
За ключики спасибо, буду играться.

Код
Build project 9010U - OK.
   text       data        bss        dec        hex    filename
  14413         72        742      15227       3b7b    9010U.elf

Уже лучше!
Это -O2
Код
   text       data        bss        dec        hex    filename
  13077         72        742      13891       3643    9010U.elf

-Os
Совсем тепло... biggrin.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 21 2010, 14:01
Сообщение #30


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(AHTOXA @ May 21 2010, 17:22) *
Это общая тенденция - 4й GCC генерит больший код, чем 3й. Хотя 20 против 12 - это явный перебор.
Неа. Всё же со всеми новыми способами оптимизации 4й GCC получается получше 3-его.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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