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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
sergik_vrn
сообщение Jan 14 2009, 10:35
Сообщение #31


Частый гость
**

Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491



Цитата(zltigo @ Dec 24 2008, 08:49) *
C появлением V5 ARM компилятора у IAR это утверждение стало совсем уже не однозначным.

есть проект под STR710, в собранном виде с максимальной оптимизацией по размеру на IAR 4.42 еле-еле укладывается в существующие там 256+16К (то есть, свободного места порядка сотен байтов). Это с оптимизацией типов данных, выравнивания, временных переменных и прочей ерунды. После портирования его под IAR 5.20 сборка того же кода с максимальной оптимизацией по размеру дает превышение допустимого объема примерно на 0x400 байт. Следует ли полагать, что я чего-то недоучел/недопортировал/недовключил? Расширять проект еще хочется, так что вопрос весьма актуален
Go to the top of the page
 
+Quote Post
Кононов Василий
сообщение Mar 2 2009, 08:37
Сообщение #32





Группа: Новичок
Сообщений: 4
Регистрация: 15-08-05
Пользователь №: 7 641



Давно пользуюсь IAR для AVR. Поэтому для нового проекта для LPC2103 выбрал компилятор от IAR 4.31. Первое что бросается в глаза - отсутствие поддержки многих слов, таких как __noreturn, __task и прочих... Создается впечатление сырой разработки. Кроме того не могу добиться условного выполнения инструкций ни при каких настройках оптимизации. Хотя оптимизация по размеру - на высоте.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 2 2009, 08:40
Сообщение #33


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Кроме того не могу добиться условного выполнения инструкций ни при каких настройках оптимизации.


Условное выполнение инструкций возможно только в ARM-режиме. В тумбе этого нет.

Цитата
Первое что бросается в глаза - отсутствие поддержки многих слов, таких как __noreturn, __task


Для ARM'а это не актуально.

Да и компиллер не стыдно взять посвежее... 5.30 уже на дворе.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Кононов Василий
сообщение Mar 2 2009, 09:49
Сообщение #34





Группа: Новичок
Сообщений: 4
Регистрация: 15-08-05
Пользователь №: 7 641



Специально закачал 5.30 - так же не использует условного выполнения, в ARM режиме то же. __noreturn полезно при использовании многозадачности - компилятор не выполняет сохранения контекста, размер которого достигает 40 байт, при 4 задачах - уже 160 не так много для ARM'а, но все же...
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 2 2009, 10:07
Сообщение #35


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
так же не использует условного выполнения, в ARM режиме то же.


Быть того не может. Наглядный пример

CODE

536 if (coef<0)
\ 0000001C A260A0E1 LSR R6,R2,#+1
\ 00000020 000055E3 CMP R5,#+0
\ 00000024 0700005A BPL ??z_and_q_0
537 {
538 unsigned int tmp;
539 tmp = -coef;
540 tmp += __q>>1; /* for rounding */
\ 00000028 005065E2 RSB R5,R5,#+0
\ 0000002C 055086E0 ADD R5,R6,R5
541 #ifdef USE_MUL
542 coef = -(tmp>__q?MUL_U16(tmp, __iq):0);
\ 00000030 050052E1 CMP R2,R5
\ 00000034 94050230 MULCC R2,R4,R5
\ 00000038 2228A031 LSRCC R2,R2,#+16
\ 0000003C 0020A023 MOVCS R2,#+0
\ 00000040 002062E2 RSB R2,R2,#+0
\ 00000044 040000EA B ??z_and_q_1
543 #else
544 coef = -DIVIDE_(tmp, __q);
545 #endif
546 }
547 else
548 {
549 unsigned int tmp;
550 tmp = coef;
551 tmp += __q>>1; /* for rounding */
\ ??z_and_q_0:
\ 00000048 055086E0 ADD R5,R6,R5
552 #ifdef USE_MUL
553 coef = tmp>__q?MUL_U16(tmp,__iq):0;
\ 0000004C 050052E1 CMP R2,R5
\ 00000050 94050230 MULCC R2,R4,R5
\ 00000054 2228A031 LSRCC R2,R2,#+16
\ 00000058 0020A023 MOVCS R2,#+0
\ ??z_and_q_1:
\ 0000005C 54449FE5 LDR R4,??z_and_q_2 ;; z_q + 780
\ 00000060 004094E5 LDR R4,[R4, #+0]
\ 00000064 044052E0 SUBS R4,R2,R4
554 #else
555 coef = DIVIDE_(tmp, __q);
556 #endif
557 }


И переходы есть, и условное выполнение. Все по необходимости.

Цитата
__noreturn полезно при использовании многозадачности


Кстати. Только что глянул в хелп. Есть __noreturn.

Что-то Вы совсем не то делаете.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Кононов Василий
сообщение Mar 2 2009, 10:20
Сообщение #36





Группа: Новичок
Сообщений: 4
Регистрация: 15-08-05
Пользователь №: 7 641



Говорю про подобные моменты:
Код
//  890     if (bit)
        CMP         R0,#+0
        BEQ         ??korsumcount_5
//  891         dword0 |=1;
        ORR         R1,R1,#0x1
//  892
//  893     databuffshift[0]=dword0;
??korsumcount_5:
        STR         R1,[R2, #+0]


а мог бы сделать так:

Код
//  890     if (bit)
        CMP         R0,#+0
//  891         dword0 |=1;
        ORRNE         R1,R1,#0x1
//  892
//  893     databuffshift[0]=dword0;
        STR         R1,[R2, #+0]


GCC выполняет подобную оптимизацию и без включения оптимизации...

__noreturn в 4.31 ARM - еще отсутствует, хотя в 4.11 для AVR есть.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 2 2009, 10:33
Сообщение #37


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Говорю про подобные моменты:


Вот Ваш код. Собран 5.20

CODE

###############################################################################
# #
# 02/Mar/2009 12:31:04 #
# IAR ANSI C/C++ Compiler V5.20.0.20892/W32 EVALUATION for ARM #
# Copyright 1999-2008 IAR Systems AB. #
# #
# Cpu mode = arm #
# Endian = little #
# Source file = E:\JPEGcoder\CoderARM\t.c #
# Command line = E:\JPEGcoder\CoderARM\t.c -lC #
# E:\JPEGcoder\CoderARM\Debug\List\ -o #
# E:\JPEGcoder\CoderARM\Debug\Obj\ --no_unroll #
# --no_inline --debug --endian=little --cpu=ARM920T -e #
# --fpu=None --dlib_config D:\IAR_ARM520\ARM\INC\DLib_Conf #
# ig_Normal.h -I D:\IAR_ARM520\ARM\INC\ --interwork #
# --cpu_mode arm -Ohs #
# List file = E:\JPEGcoder\CoderARM\Debug\List\t.lst #
# Object file = E:\JPEGcoder\CoderARM\Debug\Obj\t.o #
# #
# #
###############################################################################


\ In section .text, align 4, keep-with-next
E:\JPEGcoder\CoderARM\t.c
1 void foox(unsigned long bit, unsigned long dword0, unsigned long *databuffshift)
2 {
3 if (bit)
\ foox:
\ 00000000 000050E3 CMP R0,#+0
4 dword0 |=1;
\ 00000004 01108113 ORRNE R1,R1,#0x1
5 databuffshift[0]=dword0;
\ 00000008 001082E5 STR R1,[R2, #+0]
6 }
\ 0000000C 1EFF2FE1 BX LR ;; return

Maximum stack usage in bytes:

Function .cstack
-------- -------
foox 0


Section sizes:

Function/Label Bytes
-------------- -----
foox 16


16 bytes in section .text

16 bytes of CODE memory

Errors: none
Warnings: none


Где криминал?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 2 2009, 10:51
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Кононов Василий @ Mar 2 2009, 13:20) *
__noreturn в 4.31 ARM - еще отсутствует, хотя в 4.11 для AVR есть.

А вот 19 веке, ни фирмы Atmel, ни AVR не существовало. Ну и что? __noreturn есть и в 4 и в 5 ветках EWARM, возможно, что его когда-то не было, ну и что?





Цитата(Rst7 @ Mar 2 2009, 13:33) *
Вот Ваш код. Собран 5.20

Четверка, естественно, генерит такой-же.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Кононов Василий
сообщение Mar 2 2009, 11:37
Сообщение #39





Группа: Новичок
Сообщений: 4
Регистрация: 15-08-05
Пользователь №: 7 641



Спасибо за подсказку! Моя ошибка была в попытке использования директивы "#pragma optimize=s 9" для изменения параметров компиляции одной функции. Максимальная оптимизация для всего проекта исправила код.
Не понятно только одно - почему компилятор не использует важной особенности процессора (условное выполнение инструкций) без максимальной оптимизации? Сделано для того что бы поставить галочку - убрал условный переход, значит хорошо выполнил оптимизацию? Разработчики софта считают использование инструкции оптимизацией?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 2 2009, 11:51
Сообщение #40


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Не понятно только одно - почему компилятор не использует важной особенности процессора (условное выполнение инструкций) без максимальной оптимизации?


Я вообще собираю проекты исключительно на максимальной оптимизации. Что там происходит на малых уровнях - не интересует совершенно. И Вам советую поступать так же.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:43
Рейтинг@Mail.ru


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