ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้
- 
	- 1. Кто герой? 2. Может, с типами/диапазонами все-таки не то? - Vladimir Ljaschko(11.05.2011 13:00)
			- 1. IAR Coldfire. 2. Проверил тщательно: прошёл по шагам в дизассемблере, проверил все промежуточные результаты.  SciFi(111 знак., 11.05.2011 13:08)
					- В ЙАР AVR сталкивались с "мутными" ситуациями. В некритичных по быстродействию местах просто разбивали сложную формулу на части, вводя промежуточные переменные, после чего работало. - AU08(11.05.2011 13:54)
							- по-возможности всегда стараюсь разбивать на части, и вводить промежуточные переменные с минимально возможной областью видимости - koyodza(11.05.2011 15:07)
									- Понятно, как этот глюк обойти. Просто этот компилятор ещё генерит неверный код для md5.c на уровне оптимизации high, favor speed. Вот и получается, что засада может быть где угодно. Зато код весьма компактный выдаёт :-) - SciFi(11.05.2011 15:12)
											- это похоже самая беда у IAR`а - периодическая выдача нерабочего кода на максимальных уровнях оптимизации. - Mahagam(11.05.2011 15:39)
													- Это всеобщая беда. PIC-овые компиляторы особливо приучали к отказу от сложных выражений в одной строке. - ASDFS(11.05.2011 15:55)
- ну в 90% случаев при внимательном разборе виноват сам программист: компилятору ещё нужно уметь объяснить, что можно оптимизировать  koyodza(304 знак., 11.05.2011 15:45)
															- Оно да, но если он выкидывает кусок кода - предупреждение бы не помешало. А volatile тоже та еще штука, требуестя в одном-двух местах, а не оптимизируется во всем коде, приходится в другие переменные перекидывать. Вот бы директивой её сделали,  Kit(52 знак., 11.05.2011 17:02)
																	- предупреждения, когда выкидывается кусок кода, можно использовать только когда программа из десяти строк :=)  koyodza(158 знак., 11.05.2011 23:42)
																			- Не вижу связи с размером. Если действие в программе написано, а в код не пошло, тут по-моему однозначно что-то не так. Причем не соптимизировалось, а именно совсем не пошло. От этой функции, например, останется только return:  Kit(114 знак., 12.05.2011 00:35)
																					- связь с размером в том, что в проекте даже на пару тысяч строк варнинг о выбрасывании куска просто сведёт с ума - koyodza(12.05.2011 16:20)
- Такое весьма часто случается при использовании сравнительно универсальных #define и констант при их вызове AlexBi(65 знак., 12.05.2011 09:59)
- Какая ужасная функция. Я бы её тоже заоптимизировал в ноль. И штраф автору назначил, с отбыванием в колонии строгого режима :-) Смотреть надо не на код, а на результат выполнения программы. - SciFi(12.05.2011 00:38)
																							- А если это получилось в результате ошибки, тоже в колонию?:) - Kit(12.05.2011 01:03)
																									- В результате какой ошибки? Что хотелось сделать то? - Vladimir Ljaschko(12.05.2011 09:37)
 
 
- А если это получилось в результате ошибки, тоже в колонию?:) - Kit(12.05.2011 01:03)
																									
 
 
- Не вижу связи с размером. Если действие в программе написано, а в код не пошло, тут по-моему однозначно что-то не так. Причем не соптимизировалось, а именно совсем не пошло. От этой функции, например, останется только return:  Kit(114 знак., 12.05.2011 00:35)
																					
- А не утоните в предупреждениях? Завели временную переменную, а компилятор ее выбросил - получи предупреждение. И как вы представляете себе volatile директивой?  Cepгeй Бopщ(114 знак., 11.05.2011 17:10)
																			- Да, оптимизатор иногда задалбывает вместе с предупреждениями. Особенно "любимая" ситуация - нужно прочитать регистр периферии "в никуда". И начинается... То просто предупреждение, что переменная не используется после присвоения, то еще хуже - vmp(181 знак., 12.05.2011 17:39)
- Я написал "кусок кода", очевидно, что на a=b предупреждений дывать не надо. У меня и написано, что "приходится в другие переменные перекидывать", только это неудобно. А директиву я себе представляю очень просто:  Kit(72 знак., 11.05.2011 22:34)
																					- То есть, в этом месте переменная XXX может быть изменена вне данного кода а в других местах такое не возможно? - Vallav(12.05.2011 08:32)
																							- Именно так - Kit(12.05.2011 12:31)
																									- Возможно, что-то такое может сработать: SciFi(163 знак., 12.05.2011 15:05)
- Так чем вариант не устраивает - ввести временную переменную там, где нужна оптимизированная обработка значения XXX, Vallav(398 знак., 12.05.2011 14:56)
 
 
- Именно так - Kit(12.05.2011 12:31)
																									
- Замечательно. И будет оно читать ячейку XXX до потери сознания, ибо в том месте, где XXX надо было записать вы обрамить забудите. Cepгeй Бopщ(298 знак., 12.05.2011 02:26)
- лучше временными переменными оперировать поактивнее  koyodza(254 знак., 11.05.2011 23:00)
																							- И как у Вас xx может измениться вне данного кода во время исполнения while? - Vallav(12.05.2011 08:37)
																									- В обработчике прерывания - Kit(12.05.2011 12:33)
																											- А адрес xx обработчик прерывания как узнает? Vallav(113 знак., 12.05.2011 14:46)
 
 
- В обработчике прерывания - Kit(12.05.2011 12:33)
																											
- в данном случае xx - локальная и смысла в volatile не вижу. Хотя вот volatile int *xx=&x, может и интересно, надо подумать.  Kit(39 знак., 11.05.2011 23:26)
																									- смысл локальной volatile в том, что доступ к ней не будет оптимизироваться  koyodza(180 знак., 11.05.2011 23:38)
																											- Это понятно, только зачем бы оно могло понадобиться, чтобы кусок кода не снесло? Так IAR на это уже не ведётся:)   Kit(435 знак., 12.05.2011 00:39)
																													- "Можно пользоваться временными переменными, но неудобно" - ага, а прагмы в тех же местах лепить по две удобнее. - Cepгeй Бopщ(12.05.2011 02:29)
- while отличается от for тем, что кроме while() может быть еще и do {...} while(); - rezident(12.05.2011 00:43)
																															- Так и думал, что напомните:)  Kit(70 знак., 12.05.2011 00:53)
																																	- А зачем выдумывать лишние сущности? for всегда с пред-проверкой условия. Так в стандарте C99 указано.   rezident(165 знак., 12.05.2011 01:14 - 01:17)
																																			- Это гипотетически:) Kit(219 знак., 12.05.2011 02:41)
 
 
- А зачем выдумывать лишние сущности? for всегда с пред-проверкой условия. Так в стандарте C99 указано.   rezident(165 знак., 12.05.2011 01:14 - 01:17)
																																			
 
- Так и думал, что напомните:)  Kit(70 знак., 12.05.2011 00:53)
																																	
 
 
- Это понятно, только зачем бы оно могло понадобиться, чтобы кусок кода не снесло? Так IAR на это уже не ведётся:)   Kit(435 знак., 12.05.2011 00:39)
																													
 
- смысл локальной volatile в том, что доступ к ней не будет оптимизироваться  koyodza(180 знак., 11.05.2011 23:38)
																											
 
- И как у Вас xx может измениться вне данного кода во время исполнения while? - Vallav(12.05.2011 08:37)
																									
- Вообще-то в том же IAR есть #pragma optimize=[goal][level][no_optimization...] - rezident(11.05.2011 22:47)
																							- Я в курсе, но полностью отключить оптимизацию куску кода для того, чтобы одна переменная вела себя правильно, это совсем не то, чего хотелось бы. - Kit(11.05.2011 23:00)
																									- Язык программирования отличается от человеческих языков только тем, что результатом компиляции с него является машинный код для процессора. Но, как и в случае общения между людьми, компилятору иногда тоже нужны дополнительные пояснения: что именно  rezident(114 знак., 11.05.2011 23:07)
																											- Не вижу, где-бы это я противоречил столь очевидной истине. Я только говорю, что слов для объяснения не хватает:) - Kit(11.05.2011 23:28)
																													- возможно, Вы просто не все слова выучили ;=)  koyodza(99 знак., 11.05.2011 23:39)
																															- Возможно:) - Kit(12.05.2011 01:02)
 
 
- возможно, Вы просто не все слова выучили ;=)  koyodza(99 знак., 11.05.2011 23:39)
																															
 
- Не вижу, где-бы это я противоречил столь очевидной истине. Я только говорю, что слов для объяснения не хватает:) - Kit(11.05.2011 23:28)
																													
 
- Язык программирования отличается от человеческих языков только тем, что результатом компиляции с него является машинный код для процессора. Но, как и в случае общения между людьми, компилятору иногда тоже нужны дополнительные пояснения: что именно  rezident(114 знак., 11.05.2011 23:07)
																											
 
- Я в курсе, но полностью отключить оптимизацию куску кода для того, чтобы одна переменная вела себя правильно, это совсем не то, чего хотелось бы. - Kit(11.05.2011 23:00)
																									
 
- То есть, в этом месте переменная XXX может быть изменена вне данного кода а в других местах такое не возможно? - Vallav(12.05.2011 08:32)
																							
- +1. Я так и делаю. Кстати, такой способ позволяет наоборот избежать "лишних" предупреждений в том случае, когда в операции используются больше одной volatile-переменных. При использовании двух или большего количества volatile, например, в rezident(105 знак., 11.05.2011 17:24)
 
 
- предупреждения, когда выкидывается кусок кода, можно использовать только когда программа из десяти строк :=)  koyodza(158 знак., 11.05.2011 23:42)
																			
- какбы да. но все равно - IAR лидирует по отказам кода. не раз было, что GCC собирает работоспособный код под любой оптимизацией, что по размеру что по скорости, а ИАР на этом же исходнике на максимуме генерит мертвечинку.  Mahagam(160 знак., 11.05.2011 15:58)
																	- Просто этот ваш md5 написан финскими студентами. Нормальный проприеритарный код (где по одной операции на строчку) IAR компилирует нормально. - fk0(11.05.2011 16:05)
																			- Какие-то странные финские студенты: RSA Data Security, Inc. Created 1991. - SciFi(11.05.2011 16:55)
- То есть сразу признаёмся что парсер исходников у ИАРа - какашка? ))) - Mahagam(11.05.2011 16:06)
 
 
- Просто этот ваш md5 написан финскими студентами. Нормальный проприеритарный код (где по одной операции на строчку) IAR компилирует нормально. - fk0(11.05.2011 16:05)
																			
 
- Оно да, но если он выкидывает кусок кода - предупреждение бы не помешало. А volatile тоже та еще штука, требуестя в одном-двух местах, а не оптимизируется во всем коде, приходится в другие переменные перекидывать. Вот бы директивой её сделали,  Kit(52 знак., 11.05.2011 17:02)
																	
 
- напоминает анекдот про машинисток :=) koyodza(181 знак., 11.05.2011 15:21 - 15:23)
 
- это похоже самая беда у IAR`а - периодическая выдача нерабочего кода на максимальных уровнях оптимизации. - Mahagam(11.05.2011 15:39)
													
 
- Понятно, как этот глюк обойти. Просто этот компилятор ещё генерит неверный код для md5.c на уровне оптимизации high, favor speed. Вот и получается, что засада может быть где угодно. Зато код весьма компактный выдаёт :-) - SciFi(11.05.2011 15:12)
											
 
- по-возможности всегда стараюсь разбивать на части, и вводить промежуточные переменные с минимально возможной областью видимости - koyodza(11.05.2011 15:07)
									
 
- В ЙАР AVR сталкивались с "мутными" ситуациями. В некритичных по быстродействию местах просто разбивали сложную формулу на части, вводя промежуточные переменные, после чего работало. - AU08(11.05.2011 13:54)
							
 
- 1. IAR Coldfire. 2. Проверил тщательно: прошёл по шагам в дизассемблере, проверил все промежуточные результаты.  SciFi(111 знак., 11.05.2011 13:08)
					
 
- 1. Кто герой? 2. Может, с типами/диапазонами все-таки не то? - Vladimir Ljaschko(11.05.2011 13:00)