Вопросы по синтаксису СИ
Не получается нормально код запостить...целиком в этом файле
- Вложения
-
- КОД.doc
- (26.5 КБ) 328 скачиваний
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Ну вы ваааащееее ... в НОУТПЭДЕ ваш исходник файл .txt 1.2 Кб всего !
В CVAVR результат АЦП можно читать из ADCW - смотрите задачу 11.
unsigned long ADCL=0; // сделайте ее побольше
ADCL = (long)ADCW;
// можно увеличить число чтоб не терять знаки при округлении
ADCL = (ADCL * 5000)/1024;
А при выводе на LCD это учесть размещением десятичной точки. Можно и на 500 умножить.
В CVAVR результат АЦП можно читать из ADCW - смотрите задачу 11.
unsigned long ADCL=0; // сделайте ее побольше
ADCL = (long)ADCW;
// можно увеличить число чтоб не терять знаки при округлении
ADCL = (ADCL * 5000)/1024;
А при выводе на LCD это учесть размещением десятичной точки. Можно и на 500 умножить.
- Вложения
-
- код.txt
- (1.16 КБ) 320 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
tych писал(а):Ну вы ваааащееее ... в НОУТПЭДЕ ваш исходник файл .txt 1.2 Кб всего !
Остынте), я это знаю! В блокноте тект отосланный на форум собирался в одну строчку, как это исправить я не знаю-пришлось вставить в ворд.
tych писал(а):В CVAVR результат АЦП можно читать из ADCW - смотрите задачу 11.
unsigned long ADCL=0; // сделайте ее побольше
ADCL = (long)ADCW;
// можно увеличить число чтоб не терять знаки при округлении
ADCL = (ADCL * 5000)/1024;
А при выводе на LCD это учесть размещением десятичной точки. Можно и на 500 умножить.
Спасиба за советы. Про 16 битный регистр, который хранит результат АЦП в СVAVR я знаю из вашего курса, просто хотел особо не завязываться под особенности компилятора.
Всё-таки хочеться выяснить, почему при записи результата вычесления (дробного числа) во float, от него отсекается дробная часть.
Число преобразования спокойно записывается в переменную adcl, это можно котролировать-при подсчёте на калькуляторе получается дробное число.
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Ошибка вот здесь:KIP писал(а):... функция расчёта возвращает только целое значение напряжения, а дробную часть отсекает. Подскажите, где ошибка?
Код: Выделить всё
float raschet_naprygeniay(unsigned int adcl){
return (adcl*5)/1024;
}Выражение (adcl*5)/1024 - включает только int члены, а значит, имеет тип int. Приведение выражения int к float не меняет его значения, следовательно, дробная часть остается равной нулю.
Следует написать так:
Код: Выделить всё
float raschet_naprygeniay(unsigned int adcl){
return (adcl*5)/1024.;
}Спасиба за посказку, тепеперь всё работает!)
Последний раз редактировалось KIP Вс сен 21, 2008 20:39:55, всего редактировалось 1 раз.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
можно сказать, классика СиYellow Tiger писал(а):Ошибка вот здесь
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
ну да, в то время как другие языки приводят тип операндов к типу приемника результата, Си делает иначе
если привыкнуть - уже не ошибешься...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Ну, что вы - C делает точно так же, просто, согласно правилам языка, любая часть сложного выражения является (промежуточным) результатом (и может быть использована именно как результат), то есть, верхняя часть дерева разбора - является приемником этого результата и поэтому сия часть обязана подчиняться общим правилам приведения типов. Если это понимать - не ошибешься.ARV писал(а):ну да, в то время как другие языки приводят тип операндов к типу приемника результата, Си делает иначе
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Ну, это "нет проблем" приходит не сразу.
Да и одного знания мало, еще и стиль нужно наработать. Скажем, есть такая практика в сравнениях на равенство с константами ставить константу на первое место, чтобы отсечь ошибки с непропечатанными '==', так вот - никогда не мог заставить себя писать именно так - как-то это некузяво... однако, очепятки такого рода все же бывали, и всякий раз найти их было непросто, так как в таком простом месте попросту не ожидаешь никакой ошибки. Пересилил себя ооочень не сразу, привычка - вторая натура. 