Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 01.02.2013, 16:21  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от TAutomatic Посмотреть сообщение
Все эти Ваши выкладки ничего не стоят, если Вы не понимаете, как выполняется и чем заканчивается статическая оптимизация.
И я ничего по этому вопросу не путаю, как бы Вам хотелось.
Самый простой пример статической оптимизации, самый первый и самый простой:
А = 0;
В = 0;
или
А = В = 0;
Проверте, как это работает, если еще не знаете.

А вы полагаете, что вы знаете как ЭТО работает? А заодно и как работает компилятор. Современный компилятор.
Так вот оказывается что вы в очередной раз ошиблись. Я сейчас вам приведу 3 листинга, чтобы это доказать. А потом сядьте и проверьте сами. Итак:
1. IAR 6.40.2 CPU st32f407. Оптимизация NONE. Из реальной проги.
Keil 4.13a. CPU LPC1765. Оптимизация -O0
Ваш вариант присваивания (оптимальный в вашем понимании).
Код:
    435          		MChDin-›data = MChDin-›portlink = 0;									// Выкл. порт связи
   \                     ??MenuChanalAdd_14:
   \   0000017C   0x2000             MOVS     R0,#+0
   \   0000017E   0x7628             STRB     R0,[R5, #+24]
   \   00000180   0xB2C0             UXTB     R0,R0            ;; ZeroExt  R0,R0,#+24,#+24
   \   00000182   0xEE00 0x0A10      VMOV     S0,R0
   \   00000186   0xEEB8 0x0A40      VCVT.F32.U32 S0,S0
   \   0000018A   0xED85 0x0A01      VSTR     S0,[R5, #+4]
    436          //		MChDin-›data = 0;										// Обнулить результат
// Keil
;;;188    	transmite_buffer[0] = //0;//receive_buffer[0];
00001c  2000              MOVS     r0,#0
00001e  1ea1              SUBS     r1,r4,#2
000020  7048              STRB     r0,[r1,#1]
000022  7008              STRB     r0,[r1,#0]
;;;189    	transmite_buffer[1] = 0;//receive_buffer[1];
2. IAR 6.40.2 CPU st32f407. Оптимизация NONE.
Keil 4.13a. CPU LPC1765. Оптимизация -O0.
Мой безграмотный вариант присваивания.
Код:
    436          		MChDin-›portlink = 0;									// Выкл. порт связи
   \                     ??MenuChanalAdd_14:
   \   0000017C   0x2000             MOVS     R0,#+0
   \   0000017E   0x7628             STRB     R0,[R5, #+24]
    437          		MChDin-›data = 0;										// Обнулить результат
   \   00000180   0x2000             MOVS     R0,#+0
   \   00000182   0x6068             STR      R0,[R5, #+4]
// Keil
;;;188    	transmite_buffer[0] = 0;//receive_buffer[0];
00001c  2000              MOVS     r0,#0
00001e  1ea1              SUBS     r1,r4,#2
000020  7008              STRB     r0,[r1,#0]
;;;189    	transmite_buffer[1] = 0;//receive_buffer[1];
000022  7048              STRB     r0,[r1,#1]
2. IAR 6.40.2 CPU st32f407. Оптимизация High Speed.
Код:
    436          		MChDin-›portlink = 0;									// Выкл. порт связи
   \                     ??MenuChanalAdd_9:
   \   00000124   0x2100             MOVS     R1,#+0
   \   00000126   0x7631             STRB     R1,[R6, #+24]
    437          		MChDin-›data = 0;										// Обнулить результат
   \   00000128   0x6071             STR      R1,[R6, #+4]
Надеюсь коментарии излишни?
Цитата:
Затем идет оптимизация и минимизация логических выражений, выбор между конструкциями if или switch в зависимости от количества уровней выбора, прямая и обратная итерация циклов и т.д и т. п.
И заканчивается это правильной передачей параметров в функции....
Вы наверное думаете, что если применили конструкцию if, то компилятор вставит сравнение, а если switch, то таблицу переходов сделает? Про прямую и обратную итерацию циклов я просто молчу...

Так вот. Возьмите себя в руки, отдайте неделю и посмотрите как реально компилятся те или иные конструкции. Тем более если вы руководитель. Вы будете шокированы похоже. Например если вы позволите такую вольность себе как заведёте 4 локальных переменных с разными именами, это не значит что компилятор выделит под это 4 регистра. Он выделит столько, сколько потребуется.
Я недавно был удивлён. Один программист применил конструкцию для определения високосного года типа if(((year/4)*4 != year). Ну я несколько поиздевался и написал if(year&3). Компилятор скомпилил одинаково.
Для завершения скажу что бывают случаи, когда работа с указателями оказывается менее эффективна чем работа с массивом. Давече стлкнулся, при вылизывании фильтра на AVR.

Вы заблуждаетесь по всем пунктам перечисленным. Я больше на эту тему не пишу. А вы спокойно сядьте и разберитесь.
Реклама:
SasaVitebsk вне форума  
Непрочитано 01.02.2013, 16:41  
TAutomatic
Временная регистрация
 
Регистрация: 18.07.2012
Сообщений: 73
Сказал спасибо: 4
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
TAutomatic на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

To SasaVitebsk
Замечательно, Вы наконец хоть раз соизволили открыть файл листинга, посмотреть и попытаться понять смысл.

Последний раз редактировалось TAutomatic; 01.02.2013 в 17:14.
TAutomatic вне форума  
Непрочитано 01.02.2013, 16:59  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от SasaVitebsk Посмотреть сообщение
Один программист применил конструкцию для определения високосного года типа if(((year/4)*4 != year). Ну я несколько поиздевался и написал if(year&3)
Классные "программисты" не знают определения високосного года.
Boba_spb вне форума  
Непрочитано 01.02.2013, 19:15  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от SasaVitebsk Посмотреть сообщение
Один программист применил конструкцию для определения високосного года типа if(((year/4)*4 != year). Ну я несколько поиздевался и написал if(year&3). Компилятор скомпилил одинаково.
Если не затруднит, глянуть бы как эти варианты в ASM развернул Ваш компилятор. Что то сомнения мучают. Глянул - IAR в разное разворачивает.
Boba_spb вне форума  
Непрочитано 01.02.2013, 19:59  
Wiza_
Почётный гражданин KAZUS.RU
 
Регистрация: 29.12.2012
Адрес: Питер
Сообщений: 982
Сказал спасибо: 131
Сказали Спасибо 230 раз(а) в 157 сообщении(ях)
Wiza_ на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

А ничего, что каждый сотый год не високосный ?

Даже еще веселее:
Цитата:
год является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400. Год не является високосным, если он не кратен 4, либо он кратен 100, но при этом не кратен 400.

Последний раз редактировалось Wiza_; 01.02.2013 в 20:02.
Wiza_ вне форума  
Непрочитано 01.02.2013, 20:08  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Вот - правильный ответ !!!!
Boba_spb вне форума  
Непрочитано 01.02.2013, 23:41  
Murka-MakMur
Вид на жительство
 
Аватар для Murka-MakMur
 
Регистрация: 05.09.2007
Адрес: Новороссия ЛНР Рубежное -> РФ Калуга
Сообщений: 360
Сказал спасибо: 10
Сказали Спасибо 73 раз(а) в 58 сообщении(ях)
Murka-MakMur на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Boba_spb Посмотреть сообщение
Вот - правильный ответ !!!!
Не хватает исключения! 2000 таки високосный!
__________________
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Чем больше слёз тем больше облегчения, в слезах и заключается лечение.
Не зли меня
Murka-MakMur вне форума  
Непрочитано 01.02.2013, 23:51  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Wiza_ Посмотреть сообщение
А ничего, что каждый сотый год не високосный ?
Сообщение от Boba_spb Посмотреть сообщение
Вот - правильный ответ !!!!
Не совсем так.
Исходное высказывание:
Сообщение от Wiza_ Посмотреть сообщение
является високосным в двух случаях: либо он кратен 4, но при этом не кратен 100, либо кратен 400.
Означает такую запись:

IsLeapYear := ( (Year mod 4 = 0) and (Year mod 100 ‹› 0) ) or (Year mod 400 = 0);

а на самом деле:

IsLeapYear := (Year mod 4 = 0) and ( (Year mod 100 ‹› 0) or (Year mod 400 = 0) );
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 01.02.2013, 23:52  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

2000 - правило, он кратен 400.
Boba_spb вне форума  
Непрочитано 02.02.2013, 00:07  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от tempora Посмотреть сообщение
Не совсем так.
Исходное высказывание:
Означает такую запись:

IsLeapYear := ( (Year mod 4 = 0) and (Year mod 100 ‹› 0) ) or (Year mod 400 = 0);

а на самом деле:

IsLeapYear := (Year mod 4 = 0) and ( (Year mod 100 ‹› 0) or (Year mod 400 = 0) );
Это одно и то же - если год кратен 400, то он кратен и 4. Так что оба выражения эквивалентны.
Boba_spb вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 01:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot