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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> MSP-GCC 4. Кто-нибудь пробовал?, Случайно наткнулся:)
MrYuran
сообщение May 24 2010, 09:37
Сообщение #31


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

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



Цитата(demiurg_spb @ May 21 2010, 18:01) *
Неа. Всё же со всеми новыми способами оптимизации 4й GCC получается получше 3-его.

Прикрутил-таки сегодня "вхоле-програм" и "комбайн". -Os
Код
Build project 9010U - OK.
   text       data        bss        dec        hex    filename
   7518          4        772       8294       2066    9010U.elf
msp430-gcc (MSPGCC4_r4-20100210) 4.4.3
Copyright (C) 2010 Free Software Foundation, Inc.

08.gif

-O3 выдал internal compiler error

-O2:
Код
   text       data        bss        dec        hex    filename
   8876          4        772       9652       25b4    9010U.elf


-O1:
Код
   text       data        bss        dec        hex    filename
   8824          4        772       9600       2580    9010U.elf


Оптимизация выключена:
Код
   text       data        bss        dec        hex    filename
  12574         72       1118      13764       35c4    9010U.elf

Практически то же самое, что 3-я версия давала с -O3
Если это ещё на железке заработает, вывод однозначный. Брать!
По оптимизации вполне сравнимо с ИАРом.


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


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

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



Цитата(MrYuran @ May 24 2010, 13:37) *
По оптимизации вполне сравнимо с ИАРом.
Так и о чём:-)
При таком способе оптимизации очень важно грамотно использовать volatile - и там где раньше и без него могло проканать - теперь не проканает...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 24 2010, 13:50
Сообщение #33


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

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



Цитата(MrYuran @ May 24 2010, 15:37) *
По оптимизации вполне сравнимо с ИАРом.

Круто! Теперь будет занята четверть объёма флешаsmile.gif
Цитата(demiurg_spb @ May 24 2010, 16:40) *
При таком способе оптимизации очень важно грамотно использовать volatile - и там где раньше и без него могло проканать - теперь не проканает...

Кстати да, ждём повторного отчёта, после расстановки всех положенных volatile wink.gif


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


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

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



Цитата(AHTOXA @ May 24 2010, 17:50) *
Круто! Теперь будет занята четверть объёма флешаsmile.gif

Дело не в этом, просто всё должно быть красиво!
Ну и хочется знать хотя бы теоретический предел "сжатия".
К тому же, у меня задачи достаточно легковесные (измериловка, обработка, обмен с хостом), а вот к примеру, для автономного прибора с графическим экранчиком, кучей менюшек и даже встроенным блокнотом уже начинает играть рояль.
Причём, от оптимизации и потребление может зависеть (хотя, на фоне экранчика, жрущего как лошадь 3мА, это всё копейки...)
Или вот например, выпустили серию G2xx. Вот если бы добавили флеша хотя бы до 8кБ, то туда можно было бы упихать что-нибудь стоящее.

Попробовал вчера ещё один проект собрать, там что-то непонятное творит.
Такое ощущение, что вместо elf-а подсовывает неразлинкованный объектник.
Прикрепленный файл  1002TD.elf.lst.zip ( 32.52 килобайт ) Кол-во скачиваний: 80


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


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

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



Цитата(MrYuran @ May 25 2010, 09:43) *
Такое ощущение, что вместо elf-а подсовывает неразлинкованный объектник.
Да ну... Откуда такие предположения? Вроде как при такой компиляции он объектные файлы вообще не создаёт.
У Вас в Makefile конечная цель elf или всё-таки ещё получаете hex или bin и что с ними?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2010, 09:40
Сообщение #36


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

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



Цитата(demiurg_spb @ May 25 2010, 13:24) *
Да ну... Откуда такие предположения? Вроде как при такой компиляции он объектные файлы вообще не создаёт.
У Вас в Makefile конечная цель elf или всё-таки ещё получаете hex или bin и что с ними?

Предположения из листинга, полученного обждампом из эльфа.
Делаю так:
Код
$(NAME).elf : $(CSRC)
    @echo $^
    @$(CC) -c $(CFLAGS) -combine -fwhole-program $^ $(LDFLAGS) -o $@

Как уже писал, в предыдущем проекте всё собралось нормально.
И листинг нормальный.
CODE

Disassembly of section .text:

00001100 <__init_stack>:

1100: 31 40 00 0a mov #2560, r1 ;#0x0a00

00001104 <__low_level_init>:

1104: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80
1108: 20 01

0000110a <__do_clear_bss>:
110a: 3f 40 e6 02 mov #742, r15 ;#0x02e6
110e: 0f 93 tst r15
1110: 04 24 jz $+10 ;abs 0x111a
1112: 1f 83 dec r15
1114: cf 43 48 02 mov.b #0, 584(r15);r3 As==00, 0x0248(r15)
1118: fc 23 jnz $-6 ;abs 0x1112

0000111a <__do_copy_data>:
111a: 3f 40 48 00 mov #72, r15 ;#0x0048
111e: 0f 93 tst r15
1120: 05 24 jz $+12 ;abs 0x112c
1122: 2f 83 decd r15
1124: 9f 4f 68 5a mov 23144(r15),512(r15);0x5a68(r15), 0x0200(r15)
1128: 00 02
112a: fb 23 jnz $-8 ;abs 0x1122

0000112c <__jump_to_main>:
112c: 30 40 54 22 br #0x2254

00001130 <__ctors_end>:
1130: 30 40 3e 12 br #0x123e


а вот "ненормальный":
CODE
Disassembly of section .text.GetRealTime.1824:

00000000 <GetRealTime.1824>:
0: 0b 12 push r11
2: 0b 4f mov r15, r11
4: 08 3c jmp $+18 ;abs 0x16
6: 1e 42 00 00 mov &0x0000,r14
a: 1f 42 00 00 mov &0x0000,r15
e: 8b 4e 00 00 mov r14, 0(r11) ;0x0000(r11)
12: 8b 4f 02 00 mov r15, 2(r11) ;0x0002(r11)
16: 1c 42 00 00 mov &0x0000,r12
1a: 1d 42 00 00 mov &0x0000,r13
1e: 3e 4b mov @r11+, r14
20: 3f 4b mov @r11+, r15
22: 2b 82 sub #4, r11 ;r2 As==10
24: 0c 9e cmp r14, r12
26: ef 23 jnz $-32 ;abs 0x6
28: 0d 9f cmp r15, r13
2a: ed 23 jnz $-36 ;abs 0x6
2c: 3b 41 pop r11
2e: 30 41 ret
Disassembly of section .text.Beep.1817:

00000000 <Beep.1817>:
0: 0b 12 push r11
2: 0a 12 push r10
4: 0b 4f mov r15, r11
6: 3f 40 00 00 mov #0, r15 ;#0x0000
a: b0 12 00 00 call #0x0000
e: 0c 4b mov r11, r12
10: 3a 40 05 00 mov #5, r10 ;#0x0005
14: b0 12 00 00 call #0x0000
18: 0d 43 clr r13
1a: 82 5c 00 00 add r12, &0x0000
1e: 82 6d 00 00 addc r13, &0x0000
22: e2 c3 31 00 bic.b #2, &0x0031 ;r3 As==10
26: 3a 41 pop r10
28: 3b 41 pop r11
2a: 30 41 ret


Если первый выглядит как нормальный бинарник, с конкретными абсолютными адресами, то второй - как нелинкованный выход компилятора.


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


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

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



Давайте посмотрим на всю стоку целиком.
Вот как у меня:
Цитата
avr-gcc -mmcu=atmega162 -MMD -MP -MF ../bin/Veha_CSH162/Veha_C_DAC_RS.dep -gdwarf-2 -DF_CPU=14745600UL -Os -pedantic -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -fno-split-wide-types --combine -fwhole-program -ffunction-sections -fdata-sections -Wl,--relax -ftree-loop-ivcanon -mcall-prologues -fno-tree-scev-cprop -finline-small-functions -fearly-inlining --param inline-call-cost=2 -finline-limit=100 -fno-unit-at-a-time -Wsign-compare -Wa,-adhlns=../bin/Veha_CSH162/Veha_C_DAC_RS.lst -std=c99 -DINTERFACE_DAC_ON -DINTERFACE_RS_ON -DBOOTLOADER_START_ADDRESS=0x3800 -DBOOTLOADER_SIZE=2048 -DLOW_LEVELX_H=low_level3.h -DDEVICE_DESCRIPTOR=0x08030003 -DPROJECT_NAME=Veha_C -DPROJECT_MAJOR_REV=1 -DPROJECT_MINOR_REV=35 -I. -I./conf -I./hal -I./ui -I./io -I./../../../arclib/avr -I./../../../arclib/ic_drivers -I./../../../arclib/common -I./../../../arclib/common/modbus ./../../../arclib/common/bin_bcd.c ./../../../arclib/avr/eeprom_sfloat.c ./../../../arclib/avr/led_keyboard.c ./../../../arclib/avr/led7.c ./ui/led_interface.c ./../../../arclib/common/keys.c ./io/di.c ./io/do.c ./hal/power_good.c ./io/counter.c ./io/cnt_logic.c ./ui/callbacks.c ./ui/edit.c ./ui/prog.c ./hal/timer.c ./../../../arclib/avr/crc16.c ./../../../arclib/avr/rs485.c ./../../../arclib/common/modbus/modbus_buffer.c ./../../../arclib/common/modbus/modbus_timer.c ./../../../arclib/common/modbus/modbus_slave_func.c ./../../../arclib/common/modbus/modbus_slave.c ./io/dac.c ./hal/init_dev.c main.c --output ../bin/Veha_CSH162/Veha_C_DAC_RS.elf -Wl,-Map=../bin/Veha_CSH162/Veha_C_DAC_RS.map,--cref -Wl,--gc-section -lm


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2010, 10:23
Сообщение #38


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

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



А как заставить make выводить весь поток полностью?
У меня выводит только результаты


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


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

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



make -n ?


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


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

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



Цитата
d:\WORK\PROJECTS\MARK-1002T\BAD-1002T\PROGRAM\1002D_05_00>mingw32-make -n all
echo main/demo.c measure/measure.c utils/utils.c timerb/TimerB.c flash/flash.c d
oser/doser.c ds2433/ds2433.c keyboard/keyboard.c heater/heater.c UART/uart.c sys
tem/dco.c indicator/indicator.c
C:\mspgcc4\bin\msp430-gcc -c -mmcu=msp430x149 -O3 -DGCC_MSP430 -Wall -Wshadow -W
pointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return
-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused -std=g
nu99 -fdata-sections -ffunction-sections -I./ -I./main -I./measure -I./utils -I.
/timerb -I./flash -I./doser -I./ds2433 -I./keyboard -I./heater -I./UART -I./syst
em -I./indicator -Wa,-adhlns=./Lst/demo.lst -combine -fwhole-program main/demo.c
measure/measure.c utils/utils.c timerb/TimerB.c flash/flash.c doser/doser.c ds2
433/ds2433.c keyboard/keyboard.c heater/heater.c UART/uart.c system/dco.c indica
tor/indicator.c -mmcu=msp430x149 -Wl,--section-start -Wl,.seg_a=0x1080 -Wl,--gc-
sections -Wl,-Map=1002TD.map,--cref -LC:\mspgcc4"\bin\lib" -LC:\mspgcc4"\msp430\
lib" -LC:\mspgcc4"\msp430\include" -LC:\mspgcc4"\msp430\include\msp430" -Wl,-rel
ax -lc -lm -o 1002TD.elf
echo Build project 1002TD - OK.
C:\mspgcc4\bin\msp430-size -B 1002TD.elf
C:\mspgcc4\bin\msp430-gcc --version


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


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

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



Цитата(MrYuran @ May 25 2010, 14:23) *
А как заставить make выводить весь поток полностью?
У меня выводит только результаты

Цитата(AHTOXA @ May 25 2010, 14:28) *
make -n ?

Или возможно убрать собаку из начала этой строчки.
Цитата(MrYuran @ May 25 2010, 13:40) *
Код
    @$(CC) -c $(CFLAGS) -combine -fwhole-program $^ $(LDFLAGS) -o $@


А так ничего страшного не вижу. Странно...

Единственное, проще включить опцию -pedantic и стандарт С99 вместо gnu99,
тогда не нужно будет столько много ключей про варнинги (-Wmissing-prototypes -Wmissing-declarations...)

Ещё посмотрите на это:
-Wl,--relax
-ftree-loop-ivcanon
-mcall-prologues
-fno-tree-scev-cprop
-finline-small-functions
-fearly-inlining
--param inline-call-cost=2
-finline-limit=100
-fno-unit-at-a-time

И вообще с оптимизацией -Os всегда получаются самые лучшие результаты (разницы по скорости с -O3 реально фактически нет).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2010, 12:06
Сообщение #42


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

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



Короче, я понял.
Он все секции мапит на 0x0000, в результате итоговый размер определяется самой длинной секцией.
Глюк в чистом виде.
фтопку...

Хотя нет... Достаём обратно...
Код
$(NAME).elf : $(CSRC)
    @echo $^
    @$(CC) -c $(CFLAGS) $^ $(LDFLAGS) -o $(NAME).o
    $(CC) $(NAME).o $(LDFLAGS) -o $@
    $(OBJCOPY) -O ihex $(NAME).elf $(NAME).a43

Как я и думал, это был объектник, который надо ещё слинковать laughing.gif
За один проход никак...

Код
   text       data        bss        dec        hex    filename
  23004          2        257      23263       5adf    1002TD.elf

Вот это похоже на правду.

А вот это без -combine и -fwhole-program:
Код
   text       data        bss        dec        hex    filename
  26954          2        302      27258       6a7a    1002TD.elf

Разница, конечно, есть, но не такая сказочная.
На -Os - вообще 22кБ против 23


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


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

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



Противоречивые какие-то чувства навевает...
Поигрался сегодня вдоволь.
Обнаружил странный глюк: (а может, так и должно быть?)
если объявить interrupt функцию как static inline, то она не линкуется, а вместо неё в таблицу векторов забивается _unexpected_
Причём, даже отдельно static или inline тоже вызывают подобный глюк.
В старой версии некоторые комбинации проходят.
Кстати, ключ "вхоле_програм" вызывает подобный глюк при любом раскладе.

Размер таки 4 версия компилит бОльший, чем предыдущая. С 20кБ около 2-х набегает, а вот с 50 - уже все 5, и можно случайно не влезть во флешь со старым проектом...

В поисках флагов для "полновесного" sprintf() наткнулся на вот что:
http://mspgcc.bzr.sf.net/bzr/mspgcc/mspgcc-core/changes
Оказывается, исходный mspgcc жив!
Осталось таки научиться его собирать...


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


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

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



Цитата(MrYuran @ Jun 11 2010, 17:29) *
если объявить interrupt функцию как static inline
Этого делать не надо т.к. при архитектуре mcu с таблицей векторов прерываний невозможно в принципе инлайнить обработчики прерываний.

Цитата(MrYuran @ Jun 11 2010, 17:29) *
Причём, даже отдельно static или inline тоже вызывают подобный глюк.
со static - это действительно бага.

Цитата
Кстати, ключ "вхоле_програм" вызывает подобный глюк при любом раскладе.
Не бейте пианиста он играет как умеетsmile.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 17 2010, 07:31
Сообщение #45


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

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



ААААААААААААААААААААААААААААААА!!!!!!
smile3046.gif
twak.gif
maniac.gif
Нашел причину всех моих неудач за последний месяц!
Идея была в том, чтобы написать культурный HAL на основе mspgcc-шного iostructures.h
И что я сегодня заметил?!
Код
static  void ClearWatchDog(void)
{
    SYS_WDT.out.SYS_WDT_PIN = 1;
    5300:    b2 d0 80 00     bis    #128,    &0x001e;#0x0080
    5304:    1e 00
/main/../platform/watchdog_lo_level.h:27
    SYS_WDT.out.SYS_WDT_PIN = 0;
    5306:    b2 f0 7f ff     and    #-129,    &0x001e;#0xff7f
    530a:    1e 00

SYS_WDT - это port4:
#if defined(__MSP430_HAS_PORT4__) || defined(__MSP430_HAS_PORT4_R__)
__MSP430_EXTERN__ struct port_simple_t port4 asm("0x001c");
#endif
, где
Код
struct port_simple_t {
  ioregister_t    in;     /* Input */ ->1c
  ioregister_t    out;    /* Output */ ->1d
[b] ioregister_t    dir;    /* Direction */ ->1e[/b]
  ioregister_t    sel;    /* Selection */
};

Ну и каких, собственно, аллюзий out стал по адресу 1e?
То есть всё как бы съехало на 1 адрес, и я вместо того чтобы махнуть ногой, переключаю направление...
После такого стресса перестаёшь верить в разумное и доброе, хочется выдернуть шнур и выдавить стекло.
И в отпуск на полгода...

Ну а это уже ни в какие рамки:
Код
static  void WatchDogInit(void)
{
    SYS_WDT.out.SYS_WDT_PIN = 0;
    44e8:    3f 40 1e 00     mov    #30,    r15;#0x001e
    44ec:    bf f0 7f ff     and    #-129,    0(r15);#0xff7f, 0x0000(r15)
    44f0:    00 00
/main/../platform/watchdog_lo_level.h:16
    SYS_WDT.sel.SYS_WDT_PIN = 0;
    44f2:    bf f0 7f ff     and    #-129,    4(r15);#0xff7f, 0x0004(r15)
    44f6:    04 00
/main/../platform/watchdog_lo_level.h:17
    SYS_WDT.dir.SYS_WDT_PIN = 1;
    44f8:    bf d0 80 00     bis    #128,    2(r15);#0x0080, 0x0002(r15)
    44fc:    02 00

Поля структуры просто перетасованы в каком-то непонятном порядке... и всё сдвинуто

Но ведь работало же как-то раньше!

Кажись допёр... Структуры должны быть packed sad.gif
Может есть такой ключик, чтобы все структуры упаковать?
А то по одной долго возиться, да и править системные исходники не совсем идеологически правильно

######
__attribute__ ((packed)) не помог...
все регистры по 2 байта.
Со старым компилятором то же самое.
Что за жизнь пошла...


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

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

 


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


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