Добавлено after 4 minutes 22 seconds:
Так и есть, ставлю значения от 0 до 1023 в формулу и ошибок нет. Значит значения adc_input(0) содержат всякий бред.
А откуда оно вообще взято ?roma1984 писал(а):Не пойму просто логики этого выражения ADMUX=adc_input | (ADMUX & 0x00);
Код: Выделить всё
ADMUX=adc_input;Дак тут 0xff. Разницу чуете ?roma1984 писал(а):типа ADMUX=adc_input | (ADC_VREF_TYPE & 0xff)
Код: Выделить всё
ADMUX=adc_input | ADC_VREF_TYPE;Да ничего оно не делает. Отбрасывает в маске лишние биты, да и всё.roma1984 писал(а):что делаєт | (ADMUX & 0x__)
все дело в "такого типа" - это расплывчатое выражение говорит о том, что вы нифига не знаете, как оно там на самом деле. ну или вам на это фиолетово, что недопустимо.roma1984 писал(а):єсть готовий проект по меге8 и там такого типа ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
Код: Выделить всё
ADMUX &= 0x03; // Очищаем все биты, кроме 2-ух младших, в кторых лежит настройка опорного.
ADMUX |= adc_input<<2; // Устанавливаем биты мультиплексора из переменной adc_input
нет, не так. так вы гасите в ADMUX все биты, кроме младших трех, а потом к этим трем добавляете еще и те, которые в adc_inputroma1984 писал(а):И тогда получится ADMUX=adc_input | (ADMUX & 0x07) .
Вроде так?
или так, ближе к вашему вариантуARV писал(а):ADMUX= ADC_VREF_TYPE | (adc_input & 0x07);
Код: Выделить всё
ADMUX = (ADMUX & 0xF8) | (adc_input & 0x07);Код: Выделить всё
Error[Li005]: no definition for "Login_enter" Близко к истине, но не так. В оригинале значится: "By declaring a function inline, you can direct GCC to make calls to that function faster."ARV писал(а):inline - это квалификатор для компилятора, который строит код модуля путем встраивания (т.е. повтора) в нужных местах кода функции, а extern - это квалификатор для линкера, который просто расставляет ссылки на единожды имеющийся где-то код. то есть это взаимоисключающие квалификаторы - нельзя быть одновременно повторяемым куском кода и единственным куском.
В сторону понимания сущности inline. И немного в сторону понимания того, как работает трио препроцессор-компилятор-линкер. Первый лепит из *.h и *.c большие простынки *.(ну скажем pp) и скармливает их компилятору. На выходе компилятора появляется *.o - файл со скомпилированными объектами. Линкер собирает согласно списка все объектные файлы в программу - устанавливает связи (linker- ведь!) между объектами, попутно проверяя все ли ссылки из модулей находят объекты в других модулях и однозначны ли эти связи. Если компилятор изыскивает возможность реально заинлайнить функцию - то как объект в модуле она существовать не будет - и попытка заставить линкер связать вызов из других модулей на такую функцию закономерно обломится.pokk писал(а):Даже не знаю в какую сторону копать.