Страница 46 из 160

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 17:46:01
максим-ка
ворос, почему не работает это выражение

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

PORTC = Dig[(lvl/255)*10];
а именно участок

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

(lvl/255)*10
результат выражения постоянно не правильный(0).
переменная lvl типа int может меняться в промежутке от 0 до 255.
она берётся из АЦП, если это важно.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 17:51:44
Мастер Ломастер
максим-ка писал(а):а именно участок

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

(lvl/255)*10
результат выражения постоянно не правильный(0).
переменная lvl типа int может меняться в промежутке от 0 до 255.
она берётся из АЦП, если это важно.
результат постоянно правильный - НОЛЬ, если в lvl у вас не 255. а важно совсем другое: что вы, не изучив язык Си, бросаетесь писать программы. интересно, какое число вы надеялись получить при целочисленном делении, например, 10 на 255? если НЕ НОЛЬ - то бегом читать букварь по Си!!!

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 18:00:00
максим-ка
а как тогда можно реализовать это?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 18:01:54
Мастер Ломастер
вам как, побыстрее или все-таки правильно? ;)

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 18:02:54
максим-ка
хотелось бы правильно

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 18:19:18
максим-ка
сделал так:

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

lvl = (lvl1/255)*10;
PORTC = Dig[lvl];
где переменная lvl1 типа double берётся из АЦП.
это работает.
но правильно ли? может можно проще?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 19:43:59
Мастер Ломастер
максим-ка писал(а):хотелось бы правильно
тогда скачиваете книжку "Язык Си" Кернигана и Ритчи (основателей языка) и внимательно-внимательно читаете про то, как Си работает с числами и константами разных типов, какие вобще бывают типы чисел и чем они отличаются, как вычисляются выражения и т.п. можно и другие книги (лучше зарубежных авторов). когда сами сможете ответить на вопрос, почему у вас получался ноль - тогда можно будет считать, что цель почти достигнута.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 19:55:30
vitalik_1984
максим-ка писал(а):сделал так:


но правильно ли? может можно проще?

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

PORTC = Dig[lvl*10/255];//LVL по любому придется double делать

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 19:59:26
Мастер Ломастер
vitalik_1984 писал(а):

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

PORTC = Dig[lvl*10/255];//LVL по любому придется double делать
нет, чтобы книжку почитать...

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

PORTC = Dig[(lvl*10)/255];//LVL по любому НЕ придется double делать

Re: AVR studio 4 в вопросах и ответах

Добавлено: Вс янв 15, 2012 23:06:31
vitalik_1984
Мастер Ломастер писал(а):
vitalik_1984 писал(а):

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

PORTC = Dig[lvl*10/255];//LVL по любому придется double делать
нет, чтобы книжку почитать...

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

PORTC = Dig[(lvl*10)/255];//LVL по любому НЕ придется double делать
герой мастер говорит загадками.
сказал бы что нужно бит выставить, чтоб перевести сохранение данных ацп в формат 8старших бит,тогда не придется.
Подробнее можно почитать в литературе для контроллера.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 06:56:47
BerZerK-ku
vitalik_1984 писал(а):

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

PORTC = Dig[lvl*10/255];//LVL по любому придется double делать
Мастер Ломастер писал(а):

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

PORTC = Dig[(lvl*10)/255];//LVL по любому НЕ придется double делать
Может поясните чем отличаются эти строки? На мой взгляд ничем :)

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 07:09:32
Мастер Ломастер
vitalik_1984 писал(а):герой мастер говорит загадками.
сказал бы что нужно бит выставить, чтоб перевести сохранение данных ацп в формат 8старших бит,тогда не придется.
если бы я хотел сказать про аппаратную часть МК, я бы сказал про аппаратную. но я хотел сказать про программу - и я про нее сказал. проблема автора этой строчки кода в том, что он не понимает, как в Си вычисляются выражения... что при целочисленном делении МЕНЬШЕГО числа на БОЛЬШЕЕ всегда получается ноль, который потом как ни умножай - будет ноль. и аппаратура МК тут совершенно ни при чем.
BerZerK-ku писал(а):Может поясните чем отличаются эти строки? На мой взгляд ничем
тогда скажите, какой из вариантов будет считать хоть как-то (может, и не так, как желал бы автор, но давать не всегда нулевой результат):
1. PORTC = Dig[(lvl*10)/255];
2. PORTC = Dig[(lvl/255)*10];

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 07:25:36
BerZerK-ku
:))) вообще речь шла немного о других строках, не правда ли?
Оба выражения не будут давать всегда 0 результат, даже в том что вы привели.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 07:39:01
Мастер Ломастер
вы в своем амплуа :) даже скучновато становится. ладно, закроем тему:
1. в Си не определен однозначно порядок вычисления равноприоритетных операций. поэтому я не надеюсь на весьма шаткий шанс, что выражение будет вычисляться слева направо и ставлю скобки - приоритет операции в скобках становится выше и можно быть уверенным, что она выполнится обязательно раньше, чем заскобочная.
2. в стандарте Си сказано, что все значения выражений, которые МОГУТ быть вычислены на этапе компиляции (или обработки препроцессором), на самом деле МОГУТ быть вычислены именно на этом этапе. поэтому я считаю весьма опасной запись x*10/255, потому как слово "МОГУТ" означает, что не исключен тот факт, что компилятор вычислит 10/255 на этапе компиляции и далее... сами понимаете :) поэтому я опять-таки ставлю скобки, повышая приоритет умножения и снижая вероятность подозрительных действий компилятора.
3. с учетом ранее сказанного мною про ненулевой результат поясняю два варианта из предыдущего моего поста: первый вариант будет давать результат в диапазоне от 0 до 10 в зависимости от значения переменной lvl, а второй - только 0 или 10, причем 0 для большинства значений переменной, а 10 - для единственного.

удовлетворены? еще вопросы есть?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 07:56:08
BerZerK-ku
1. Приведите пожалуйста источник в котором говорится о том что порядок вычисления равноприоритетных операций не определен. Мне очень интересно взглянуть на используемый вами стандарт С. Согласно моим сведениям выполнение идет слева направо, исключение из правила знаю только одно.
2. Какой-то сумбур, без скобок компилятор поделит, а со скобками не станет? вот бы взглянуть на теорию, к сожалению даже не задумывался о подобном.
3. цитирую ваш вопрос:
Мастер Ломастер писал(а):тогда скажите, какой из вариантов будет считать хоть как-то (может, и не так, как желал бы автор, но давать не всегда нулевой результат)
мой ответ:
BerZerK-ku писал(а):оба выражения не будут давать всегда 0 результат, даже в том что вы привели.
Чего я не правильно сказал-то? Зачем этот пункт в вашем посте? Вы же сами пишите что есть один вариант ненулевой :dont_know:

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 08:14:34
Мастер Ломастер
1. ищите сами, если вам это надо. мне и так хорошо.
2. см. п.1
3. есть разница между "сказать то" и "не сказать не то".

на ваш вопрос о том, чем различаются эти строки с моей точки зрения - я ответил? чего вам нужно еще? я вам свою т.з. не навязываю - вы можете поступать, как сочтете нужным. и даже не сообщать об этом на форуме :)))

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 08:41:00
BerZerK-ku
1. http://sanych99.narod.ru/New_Site/books/kr/035.html Ознакомьтесь с табличкой и примите к сведению на будущее.
2. См. пункт 1.
3. Это был ответ на конкретный вопрос, о каких недоговорках речь идет :dont_know:
К сожалению "моя точка зрения" и реальность зачастую различаются. А "моя точка зрения" которую не можешь обосновать, вообще ничего не стоит.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 08:48:09
Мастер Ломастер
1. вы же вроде как взывали к стандарту Си? а привели выдержку из книжки, в которой даже нет и словечка о порядке вычисления подряд идущих одноприоритетных операций! тем более с участием констант! :))) это в вашем стиле, браво!
2. см. п.1
3. у вас, конечно, может вызывать сожаление упомянутый вами же факт, а я стараюсь таких "сожалений" избегать путем простой перестраховки со скобками. придерживаюсь шутливого правила "много скобок не бывает" :) и знаете, сильно помогает не сожалеть о чем-то!

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 09:53:03
BerZerK-ku
Т.е. выдержка из книги одних из основоположников современного Си ничего не стоит против вашего мнения?
Мастер Ломастер писал(а):даже нет и словечка о порядке вычисления подряд идущих одноприоритетных операций
Да как нет-то? У вас наверное фильтр стоит, настроенный на ваше мнение. Вы вглядитесь получше в англицкие буковки и может они у вас в слова сложатся.
Хотя начинаю понимать, вы учились программировать по внегласным правилам, это там сказано что надо всегда ляпать скобки чтобы все работало как задумано?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пн янв 16, 2012 10:18:56
ВитГо
А чем плохо использование скобок ?

гм. я тоже часто использую скобки в выражениях, чтобы потом не думать правильно посчиталось или нет..- со скобками результат очевиден....

p.s. пошел зализывать обиду :-)