[an error occurred while processing this directive]
выпий йаду. Твой код - неверен. Именно из-за отутсвия volatile
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
DASM
16 сентября 2006 г. 19:24
В ответ на:
Господа, вы что - сбрендили все, кроме omen? Тут эмбеддеры или где?? ТАК ПЕСАТЬ НИЗЯ, КРОСАВЧЕГИ!
отправлено =AVR= 16 сентября 2006 г. 19:04
Составить ответ
|||
Конференция
|||
Архив
Ответы
А ты посмотри внимательнее, я тебе тогда отхлебнуть дам :)
—
=AVR=
(16.09.2006 20:02
80.92.96.19
, 624 байт)
это ничего не значит. Компилятор имеет полное право взять КОПИЮ живой глобальной и сравнивать с ней. Абсолютно никто ему это не запретит, т.к. он не знает, что она может изменится сама
—
DASM
(16.09.2006 20:07
212.58.192.14
,
пустое
)
нафига у тебя char foo объявлена глобально - тоже загадка для меня
—
DASM
(16.09.2006 20:11
212.58.192.14
,
пустое
)
Ха! А это уловка, чтобы внутри delay сравнение шло с регистровой foo
—
=AVR=
(16.09.2006 20:37
80.92.96.19
, 395 байт)
какой нафик регистровой переменной ? Регистровая переменная - это вообще пожелание к компилятору, на которое он может чихать с большой вышки. На CV - вообще плевать, это баловство сплошное. Volatile в данном случае ОБЯЗАТЛЕН и поведение его ПРЕДСКАЗУЕМО. А вот при его отсутсвии - непредсказуемо. В первом случае можно обосновано писать в техподдержку с указанием на глюк. Во втором - получить письмо содержания "мальчик, иди Кернигана читать". Короче слив не защитан
—
DASM
(16.09.2006 20:45
212.58.192.14
,
пустое
)
Про регистровую переменную я упомянул не случайно - мой код будет работать правильно и с регистровыми, и с обычными переменными, и именно потому, что явно объявлена якобы ненужная глобальная. Низачот, учаснег!
—
=AVR=
(16.09.2006 20:48
80.92.96.19
,
пустое
)
ну так я же объявил две твоих переменных глобальных, исходник идентичен, не считаю мозго"бства с define. Вобщем ты написал код, который работает только под CV да еще и под конкретный проц. Мой код с volatile - будет работать на любом компиляторе и проце, соответствующему стандарту С.
—
DASM
(16.09.2006 20:50
212.58.192.14
,
пустое
)
Да я и не возражал особо. Фишка в том, что я почему-то всегда пишу под конкретный проц и, следовательно, под конкретный компилятор - не люблю, понимаешь, комбинированных газо-бензино-солярочных танко-мото-автомобилей :)
—
=AVR=
(16.09.2006 20:54
80.92.96.19
,
пустое
)
"ТАК ПЕСАТЬ НИЗЯ, КРОСАВЧЕГ". Знаешь, от чего динозавры вымерли ?
—
DASM
(16.09.2006 20:55
212.58.192.14
,
пустое
)
Я знаю, от чего они вымерли, а еще я знаю хорошую поговорку - "Если ты такой умный, то почему такой бедный?" - и ответ на нее - "Патамушта мне говорили нельзя, а я как муд..ак слушалсо..." :)
—
=AVR=
(16.09.2006 20:58
80.92.96.19
,
пустое
)
хороший КАММЕНТ к хидеру твоего поста
—
DASM
(16.09.2006 21:01
212.58.192.14
,
пустое
,
ссылка
)
Ты прям как тот кампелятар, который так увлекся оптимизацией, что "if" пропустил. Я же написал - "какие нах volatile и т.д., ЕСЛИ даже бла-бла"
—
=AVR=
(16.09.2006 21:07
80.92.96.19
,
пустое
)
кто пропустил if ? Он совершенно законно это делает. Я бы для таких еще на его месте писал "optimized away" чтоб думали больше
—
DASM
(16.09.2006 21:09
212.58.192.14
,
пустое
)
Ты, ты пропустил моё "если"
—
=AVR=
(16.09.2006 21:10
80.92.96.19
,
пустое
)
ну замечательно, но ты вместо одного бреда предложил столь же малограмотный бред, попутно выравызив сомнения в умственных способностях "всех участнегов"
—
DASM
(16.09.2006 21:15
212.58.192.14
,
пустое
)
Дима, мой "бред" гораздо изящнее и грамотнее твоего "extern volatile"
—
=AVR=
(16.09.2006 21:32
80.92.96.19
,
пустое
)
разница только одна - мой работает всегда, твой - на одном компилере =))))))) extern - остался в наследство от авторского исходника - по принципу минимальных изменеий. Хотя иногда именно нужен extern . Ничего такого не вижу
—
DASM
(16.09.2006 21:36
212.58.192.14
,
пустое
)
Если твой extern лобавить в код аффтара - работать не будет. Если твой volatile добавить в мой код - то как работало, так и продолжит
—
=AVR=
(16.09.2006 21:56
80.92.96.19
,
пустое
)
у тебя удивительная способность делать хорошую мину при плохой игре. volatile - необходим, я этого наглядно показал. Ты же свою CV гнешь. И чего в политику не пошел...
—
DASM
(16.09.2006 21:59
212.58.192.14
,
пустое
)
Я тебе уже давно сказал - да, volatile не помешает, но отнюдь не только в ее отсутствии состояла исходная проблема -->
—
=AVR=
(16.09.2006 22:14
80.92.96.19
,
пустое
,
ссылка
)
а как тебе китаяночки ?
—
DASM
(16.09.2006 22:17
212.58.192.14
,
пустое
)
Не знаю, не пробовал :)
—
=AVR=
(16.09.2006 22:37
80.92.96.19
,
пустое
)
кого ни спрошу - никто не пробовал :(
—
DASM
(16.09.2006 22:39
212.58.192.14
,
пустое
)
У Make_Pic спроси, не ошибесси :)
—
=AVR=
(16.09.2006 23:37
80.92.96.19
,
пустое
)
PS код твой именно в IAR и был откомпилен с максимальной оптимизацией по скорости. И все верно сделано - компилятору 5 с плюсом
—
DASM
(16.09.2006 20:46
212.58.192.14
,
пустое
)
и вообще, получи фашист гранату (+)
—
DASM
(16.09.2006 20:28
212.58.192.14
, 1180 байт)
А это не с volatile, а с шибко умным компилером, который в порыве безудержной оптимизации решил, что while(foo < mytimer) всегда истина, и..
—
=AVR=
(16.09.2006 20:46
80.92.96.19
, 298 байт)
не бубуни, а ? Его "порыв оптимизации" - на самом деле совершенно логичный ход. Первый раз он условие проверил при входе - правильно. Дальше заниматься дурью и проверять это условие он не обязан - она действительно всегда истина с его точки зрения, ибо не volatile переменная НЕ МОЖЕТ модифицироваться "где-то там в прерывании"
—
DASM
(16.09.2006 20:48
212.58.192.14
,
пустое
)
Согласен, но когда подобное вытворяется и с SFR - это произвол и происки скандинавских лесничих
—
=AVR=
(16.09.2006 20:51
80.92.96.19
,
пустое
)
нет такого слова в языке - SFR. Есть volatile. И грамотно объявленный SFR как volatile ведет себя вполне предсказуемо.
—
DASM
(16.09.2006 20:53
212.58.192.14
,
пустое
)
Так и что теперь - подвергать ревизии все казенные МК-шные хидеры, чтобы это гарантированно обеспечить? Все же компильни под AVR, любопытно
—
=AVR=
(16.09.2006 20:56
80.92.96.19
,
пустое
)
И все же подчеркну - я вовсе не против volatile возбух, а против безграмотного кода корня. До volatile там еще как раком до Китая
—
=AVR=
(16.09.2006 21:00
80.92.96.19
,
пустое
)
про область видимости вопрошателю сообщили еще вчера, не стоит делать из этого открытие с криком "какие вы в попу эмбеддеры". Дойдет человек и до области со временем
—
DASM
(16.09.2006 21:03
212.58.192.14
,
пустое
)
Ответ:
—
DASM
(16.09.2006 20:59
212.58.192.14
, 851 байт)
на тебе до кучи volatile вариант (+)
—
DASM
(16.09.2006 21:00
212.58.192.14
, 940 байт)
Идиотский код. А регистры не включишь - а то он и неизменную тупо из RAM перезагружает в цикле?
—
=AVR=
(16.09.2006 21:04
80.92.96.19
,
пустое
)
естественно перегружает - переменная же VOLATILE (уж прости, Керниган, за caps lock) и лежит она не в регистре, вот он и не имеет права тупо сравнивать с регистром, а считывает с памяти постоянно. А насчет попытки сделать её регистровой компилятор (умница однако) четко возразил "a global-scope declaration may not have this storage class"
—
DASM
(16.09.2006 21:07
212.58.192.14
,
пустое
)
Я про foo, а не про mytimer - ее вроде никто волятиной не обзывал
—
=AVR=
(16.09.2006 21:09
80.92.96.19
,
пустое
)
и тоже с volatile (+)
—
DASM
(16.09.2006 20:29
212.58.192.14
, 979 байт)
Отправка ответа
Имя (обязательно):
Пароль:
E-mail:
Тема (обязательно):
Сообщение:
Ссылка на URL:
Название ссылки:
URL изображения:
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание