| Микроконтроллеры | Как пользоваться volatile на СИ ? | 
|
|---|---|---|
Насчет значения после выхода из цикла - значение переменной не определено по стандарту С, независимо от того, что это за переменная - локальная или глобальная, и volatile она или нет. Причина простая - в целях оптимизации компилятор может "прокрутить" цикл в обратном порядке. Почти на 100% уверен, что для АНТОХИного пример компилер построит код for (i = 200; i > 0; i--).  | 
  | 
|
chav1961: Почти на 100% уверен, что для АНТОХИного пример компилер построит код for (i = 200; i > 0; i--). Это зависит от уровня оптимизации. Может скомпилировать в ret. С точки зрения компилятора, результат не меняется - никакие переменные не модифицируются, никаких вызовов не производится  | 
  | 
|
гм... озадачили господа вы меня..... т.е. получается что если я закручу такой цикл то отсчет будет в обратном порядке.... ну и бог с ним если в теле for ничего не выполняется - тут он имеет право это сделать мне без разницы главное что 200 циклов открутит, ну а ежели так void delay(void) { то, что из массива тоже в обратном порядке будут читаться элементы??? Это не есть хорошо....  | 
  | 
|
то АНТОХА Это назывется оптимизация. Компилятор много чего может... т.е. ты все же хочешь сказать что 200 циклов не открутит? Или открутит все же, но в другую сторону? как говорит chav1961 ?  | 
  | 
|
Lerik: (компилятор не имеет права менять логику) Он имеет право даже переставлять разные действия местами.  | 
  | 
|
Ну в вашем-то случае вряд ли он будет извращаться насчет прямого/обратного порядка. Тут действительно будет логика нарушена.  | 
  | 
|
Lerik: т.е. ты все же хочешь сказать что 200 циклов не открутит? Я хочу сказать, что может не открутить. Это называется Некоторые компиляторы при определённых уровнях оптимизации выкинут этот цикл. Поэтому надо явно указать компилятору, что тебе важно увеличить переменную i 200 раз, написав volatile. Вот, посмотри, сколько всего разных оптимизаций : http://en.wikipedia.org/wiki/Category:Compiler_optimizations Это в основном про gcc, другие компиляторы могут делать по другому. ... ЗЫ. Посмотрел как-то, что вытворяет компилятор Keil для 51х... Впечатлился. Программисты на асме отдыхают  | 
  | 
|
Спасибо за консультациии всем откликнувшимся.... Впечатляет.  | 
  | 
|
| 
 Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь  | 
© 2003—2025  | 
|||