Микроконтроллеры | Как пользоваться 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—2024 |