COKPOWEHEU Опубликовано 8 ноября, 2015 Поделиться Опубликовано 8 ноября, 2015 Откуда же мне знать, что там в этой библиотеке накручено? Но по использованию и примерам выводимых данных похоже что это именно положение точки. Похоже, не я один ниасилил видеокурс :-) С другой стороны, ориентация на числа с плавающей точкой в подобных задачах - косвенный признак неэффективности, лучше написать свою реализацию для чисел с фиксированной точкой. В крайнем случае - sprintf и вывод строки, хотя библиотека крайне громоздкая, но хотя бы стандартная. 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 8 ноября, 2015 Поделиться Опубликовано 8 ноября, 2015 количество знаков после запятой)))) а про вот это(положение точки при выводе на дисплей) с удовольствием послушаю Дак это же одно и тоже Что точку ставите в нужном разряде, что нужное кол-во знаков после точки пишете 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Viktor26 Опубликовано 8 ноября, 2015 Поделиться Опубликовано 8 ноября, 2015 (изменено) ну как же???вот так там вот число 23.4567234 если стоит 4 про которую мы говорим то на дисплей выведется 23.4567 если там будет стоят 3 то на дисплее будет 23.456 тоесть число не меняется, а если мы сейчас точку будем ворочать влево вправо то число уже не останется прежним. скорее всего у задавшего вопрос тип переменной неверно объявлен. надо чтоб он весь код показал Изменено 8 ноября, 2015 пользователем Viktor26 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
slavko20062 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 Всем Привет! Делая задание с урока 6, столкнулся с проблемой в размере прошивки при минимальной программе... Компиляция проходит отлично без ошибок, в протеусе текст выдает на дисплей 5110 но вес прошивки огромен... ------ Build started: Project: lcd 5110, Configuration: Debug AVR ------ Build started. Project "lcd 5110.cproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target "CoreBuild" in file "C:\Program Files\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "D:\Projects\lcd5110\lcd 5110\lcd 5110\lcd 5110.cproj" (target "Build" depends on it): Task "RunCompilerTask" C:\Program Files\Atmel\Atmel Studio 6.0\make\make.exe all lcd 5110.c Invoking: AVR/GNU C Compiler "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-gcc.exe" -funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -MD -MP -MF "lcd 5110.d" -MT"lcd 5110.d" -mmcu=atmega8a -o"lcd 5110.o" ".././lcd 5110.c" Finished building: .././lcd 5110.c Building target: lcd Invoking: AVR/GNU C Linker "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-gcc.exe" -o "lcd 5110.elf" "lcd 5110.o" n5110.o -Wl,-Map="lcd 5110.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -mmcu=atmega8a Finished building target: lcd "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "lcd 5110.elf" "lcd 5110.hex" "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "lcd 5110.elf" "lcd 5110.eep" || exit 0 "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objdump.exe" -h -S "lcd 5110.elf" > "lcd 5110.lss" "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-size.exe" -C --mcu=atmega8a "lcd 5110.elf" AVR Memory Usage ---------------- Device: atmega8a Program: 3870 bytes (47.2% Full) (.text + .data + .bootloader) Data: 527 bytes (51.5% Full) (.data + .bss + .noinit) Building target: 5110.elf Invoking: AVR/GNU C Linker "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-gcc.exe" -o "lcd 5110.elf" "lcd 5110.o" n5110.o -Wl,-Map="lcd 5110.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -mmcu=atmega8a Finished building target: 5110.elf "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "lcd 5110.elf" "lcd 5110.hex" "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "lcd 5110.elf" "lcd 5110.eep" || exit 0 "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-objdump.exe" -h -S "lcd 5110.elf" > "lcd 5110.lss" "C:\Program Files\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.3.2.31\AVRToolchain\bin\avr-size.exe" -C --mcu=atmega8a "lcd 5110.elf" AVR Memory Usage ---------------- Device: atmega8a Program: 3870 bytes (47.2% Full) (.text + .data + .bootloader) Data: 527 bytes (51.5% Full) (.data + .bss + .noinit) Done executing task "RunCompilerTask". Done building target "CoreBuild" in project "lcd 5110.cproj". Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != ''). Target "Build" in file "C:\Program Files\Atmel\Atmel Studio 6.0\Vs\Avr.common.targets" from project "D:\Projects\lcd5110\lcd 5110\lcd 5110\lcd 5110.cproj" (entry point): Done building target "Build" in project "lcd 5110.cproj". Done building project "lcd 5110.cproj". Build succeeded. ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== //Atmega8A #define F_CPU 8000000 #include <avr/io.h> #include "n5110.h" void presets(){ Lcd_init(); Lcd_clear(); } int main(void) { presets(); while(1) { Lcd_prints(0,0,FONT_1X,(unsigned char*)PSTR("Hello moto")); Lcd_prints(0,4,FONT_1X,(unsigned char*)PSTR("Привет!")); Lcd_update(); } } P/S Огромное спасибо за уроки, приятно делать что то своими руками! 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
COKPOWEHEU Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 А уж как приятно разбираться в своем коде своей же головой! Даже не хочется лишать вас такого удовольствия. Впрочем намекну: сколько весит одна скомпилированная библиотека работы с дисплеем? Viktor26, в нормальных библиотеках для вашего примера с 23.456 сдвиг точки влево-вправо должны дать 23.45 и 23.4560. Что происходит именно в этой библиотеке не знаю, трассировка покажет. 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
slavko20062 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 (изменено) А уж как приятно разбираться в своем коде своей же головой! Даже не хочется лишать вас такого удовольствия. Впрочем намекну: сколько весит одна скомпилированная библиотека работы с дисплеем? Viktor26, в нормальных библиотеках для вашего примера с 23.456 сдвиг точки влево-вправо должны дать 23.45 и 23.4560. Что происходит именно в этой библиотеке не знаю, трассировка покажет. Я догадался что в прошивку лезит библиотека дисплея, но у автора видео она не добавляется же... Прошу прощения если чего то недопонимаю... Я не имел раньше дела с написанием прошивок и языком С......... Изменено 9 ноября, 2015 пользователем slavko20062 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
COKPOWEHEU Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 Если вы ее используете и ожидаете, что она будет работать, как она может не добавляться? Не делали прошивок на Си? Так может и не стоит пока начинать, а поработать с ассемблером? Там все куда более прозрачно. И, кстати, цитирование предыдущего сообщения полностью не приветствуется. 0 Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз. Часть моих наработок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 (изменено) COKPOWEHEU Вижу что говорим об одном и том же, но понять не могу Вас. если двигать точку в числе 23.456 то двигая влево (это по моей логике, она далеко не идеальна, но все же смею предположить) получается 2.3456 а двигая точку вправо получаем 234.56 а понятие "количество разрядов после точки" я понимаю так, вот есть число "пи" 3,141592653589793, оно не лезет на маленький экран, и мы в функцию пишем число 2 и на экран выводим 3.14 т.е. 2 знака после запятой. Изменено 9 ноября, 2015 пользователем Viktor26 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 А где вообще эту библиотеку можно посмотреть ? Дайте ссылку, пожалуйста. А то разговариваем, а о чём - хз... Я так не могу... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 (изменено) LCD_5110.zip Вот она. в папке avr gcc lib Изменено 9 ноября, 2015 пользователем Viktor26 1 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 А кто её автор ? Руки бы оторвать, извините за выражение, ему за такое 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 (изменено) для начинающих эта библиотека пойдет, в учебных целях так сказать. А автором является автор видеоуроков, KOBZAR)) Про точку то, что в библиотеке этой сказано??? Изменено 9 ноября, 2015 пользователем Viktor26 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 А никто ещё не жаловался, что она кушает много ресурсов и очень неповоротливая ? Одни инты - где попало. Всяческие с ними бешеные вычисления, где они вовсе не нужны, и т.д... И это взгляд пал только на одну функцию. Нельзя так писать для контроллеров. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 На этой же странице 10 постов вверх, как раз по поводу прожорливости жалоба НУ а с точкой то что? 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 А я и не заметил А что нужно с точкой ? Это значение - кол-во точек после запятой, при форматировании float-переменной. ftoa и та, наверное, сделала бы это более оптимизированнее 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 Это значение - кол-во точек после запятой, Не понял. точек или знаков после запятой?? 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 тю, мля... Конечно знаков После точки Очепятался, ссори... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 (изменено) Пишем сценарий. Alex и COKPOWEHEU стоят за углом, из-за угла выпрыгивает Viktor26 и с довольной мордой произносит ААГАААА, Все-таки не точку мы там двигали Изменено 9 ноября, 2015 пользователем Viktor26 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 А что же мы двигали, запятую ? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 точка, запятая, как её еще назвать, остается на месте, чтоб целое число осталось прежним, а той злощастной циферкой мы выводим нужное нам количество знаков после "точкизапятой". или тогда вопрос. понятие двигать точку, подразумевает под собой, что эту точку мы двигаем вместе с разрядами что стоят слева от нее?? если да то тогда я понял о чем речь)) 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 Да без разницы как трактовать эту ситуацию с точкой. Например, число 18.56 эквивалентно числу 18.56000000000...., просто для удобства восприятия нули отбрасываются. Вот и двигайте эту точку после знака '8' на любое кол-во знаков. Отсюда вывод - это значение можно назвать положением точки в дробной части. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 (изменено) ну правильно, отбрасывать нули-двигать все число вправо вместе с точкой, сдвигать его вправо-делить это число. а в той функции из библиотеки число не делится, не двигается, и не что-то еще, оно остается неизменным, а вот эта цифра будь она 4 или 5 или 10 просто определяет сколько знаков из дробной части отобразить на дисплее. Ведь если мы будем бесконечно сдвигать точку то мы получим неверные данные. эта функция ничего не делит и ничего не двигает, она просто отображает. все сдвиги происходят до этой функции. P.S. чувствую себя гопником, который прикопался к модератору Изменено 9 ноября, 2015 пользователем Viktor26 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 До бог с ней, с этой точкой, пусть это будет - количество знаков в дробной части По коду. Попробуйте выкинуть функцию gpow, а за место неё напишите : const short exp_data[]={1, 10, 100, 1000, 10000}; И функцию gftoa поменяйте на static char buf[16]; char *p = buf + 15; short i = f * exp_data[dec]; bool sign = i < 0 ? 1 : 0; if(sign) i= -i; do { *--p = '0' + (i % 10); i /= 10; if (--dec == 0) *--p = '.'; } while (i != 0); if (dec > 0) { while (dec-- > 0) *--p = '0'; *--p = '.'; } if (*p == '.') *--p = '0'; if (sign) *--p = '-'; return p; И посмотрите разницу по пожирании ресурсов и по времени выполнения. Да и массив там такой не нужен (в 16 знаков). int для 8-ми битников - 16 бит, а это - максимум 5 разрядов. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Viktor26 Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 ща по другому попробуем f_data = 12,3456789 Lcd_printf(0,0,FONT_1X,f_data,4); у нас есть переменная в которой хранится число 12,3456789 с помощью функции мы выводим на дисплей число 12,3456 мы его никуда не сдвигали, просто мы отобразили 4 знака после "точкизапятой" если бы мы в этой функции сдвигали бы число чтоб затереть два последних разряда, то мы бы его сдвинули 2 раза >>2 а это равно делению на 4, а 12,3456789/4=3,08641972. вот об этом я хочу донести. ну и ладно, бог с ней с этой "точкойзапятой" 0 Не знаеш как? Спроси у Google'а !!! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 9 ноября, 2015 Поделиться Опубликовано 9 ноября, 2015 Ради интереса поэксперементировал с этой функцией. Даже со стандартными функциями (ltoa и strlen), получилось более компактнее (по занимаемой памяти) и по скорости выполнения быстрее в 2.5 раза. /************************************************************************************/ const float exp_data[]={ 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000 }; //------------------------------------------------------- char *gftoa(float f, unsigned char dec) { static char buf[9+3]; char *p=&buf[strlen(ltoa((long)(f*exp_data[dec]), &buf[1], 10))+2]; for(*p--=0; (dec--)&&(p!=buf); ) *(p--)=*(p-1); *p='.'; if(p==&buf[1]){ *--p='0'; return &buf[0]; } return &buf[1]; } /************************************************************************************/ 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.