Страница 2 из 2

Re: atmega8 гонит ADC или я косячу?

Добавлено: Ср мар 28, 2012 11:23:07
hybroid
Да вот у меня получился бесполезный nop, например :)) Только я не понял, почему компилятор должен выкинуть написанные тобой nop'ы (значит нужные) без volatile? Не выкидывает ведь.

Re: atmega8 гонит ADC или я косячу?

Добавлено: Ср мар 28, 2012 13:06:50
Qwq
hybroid писал(а):

Код: Выделить всё

int n = 0;
int n1 = 0;
   n = ADCH;
        n1 = ADCL;
Нафига?
[/quote]
это отладочный костыль - не мог понять по чему не работает и думал что может я не тот байт читаю или еще чего...
У меня вообще код ужасный - не программист я...

Re: atmega8 гонит ADC или я косячу?

Добавлено: Ср мар 28, 2012 13:25:18
Мастер Ломастер
hybroid писал(а):Да вот у меня получился бесполезный nop, например :)) Только я не понял, почему компилятор должен выкинуть написанные тобой nop'ы (значит нужные) без volatile? Не выкидывает ведь.
а почему компилятор может выкинуть переменные, которые в прерывании обрабатываются, если они не volatile? их ведь программист написал, значит нужные? ;) да потому, что компилятор имеет полное право исключать при оптимизации коды, НЕ ИЗМЕНЯЮЩИЕ СОСТОЯНИЕ "ВИРТУАЛЬНОЙ" ИСПОЛНЯЮЩЕЙ МАШИНЫ сиречь ПРОГРАММЫ. если нет обращений к переменной - она лишняя. если NOP не длает ничего, что меняет содержимое других переменных и т.п. - он лишний. вот и может удалить. МОЖЕТ - не факт, что удалит, но МОЖЕТ. и надеяться на его доброту - это опасно. скольконовичков попали на пустых циклах, из которых они надеялись получить программные задержки? вот и объяснение.

Re: atmega8 гонит ADC или я косячу?

Добавлено: Ср мар 28, 2012 13:26:36
Мастер Ломастер
Qwq писал(а):У меня вообще код ужасный - не программист я...
да и не ломайте голову, почему не работает не совсем корректный код, просто напишите корректный, однозначно работающий:

Код: Выделить всё

int adc_result;
adc_result = ADC;

Re: atmega8 гонит ADC или я косячу?

Добавлено: Ср мар 28, 2012 13:38:41
hybroid
Не нужны ему последние два бита. Ему нужно ADLAR в 1 и вот это:

Код: Выделить всё

uint8_t adc; // unsigned char, если не нравится это
adc = ADCH;

Re: atmega8 гонит ADC или я косячу?

Добавлено: Ср мар 28, 2012 14:07:40
Qwq
так уже все 100 лет работает... собственно с тех пор как pyzhman подсказал про то что оба байта читать надо... я уже почти все дописал, мелочевка осталась...

Re: atmega8 гонит ADC или я косячу?

Добавлено: Вт авг 14, 2012 22:48:42
Furcat
Аналогично " Result is not written to the ADC register because it has been locked""" :(
ADCSRA = ADCSRA | _BV(ADSC);
while((ADCSRA & _BV(ADIF)) == 0)
values[current] = ADC;