| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем с _delay_ms(int) функция http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9844 |
Страница 1 от 2 |
| Автор: | klez [ Чет Фев 02, 2012 12:01 am ] | |||||||||
| Заглавие: | Проблем с _delay_ms(int) функция | |||||||||
Едно много бързо питане. _delay_ms(x) функцията ми не работи правилно, ако задам 4000 милисекунди тя забавя само с 1000 (4 пъти по-мако) Задал съм F_CPU 8000000UL (това в настройките на проекта в AVR Studio) той подава към компилатора -DF_CPU 8000000UL Но въпреки това работи с 4-пъти по-кратки интервали. преди да задам честотата с F_CPU работеше с 4пъти по-кратки интервали спрямо 1MHz процесор, демек 32 пъти по-кратки интервали спрямо зададените когато съм на 8MHz Контролер: Atmega8 Честота: 8MHz Компилатор: AVR GCC (AVR Studio 4) Source:
|
||||||||||
| Автор: | Dimitar [ Чет Фев 02, 2012 12:07 am ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Ами дай да видим самата delay функция де - сега боб ли да хвърляме Преди това обаче един приятелски съвет от мен - ако искаш да свикваш с добри практики на програмиране, особено за контролери ще е добре да се научиш по друг начин да си генерираш закъснения и времеви интервали, а не с такива функции, дето процесора стои в тях и нищо не прави |
|
| Автор: | klez [ Чет Фев 02, 2012 12:12 am ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
мм мислех че е няква стандартна от delay.h |
|
| Автор: | Dimitar [ Чет Фев 02, 2012 12:13 am ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Дай да видим какво има в ей тоя файл "util/delay.h". |
|
| Автор: | klez [ Чет Фев 02, 2012 12:22 am ] | |||||||||
| Заглавие: | Re: Проблем с _delay_ms(int) функция | |||||||||
|
||||||||||
| Автор: | Dimitar [ Чет Фев 02, 2012 12:30 am ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Я пробвай с 10 милисекунди да видиш дали пак ще е 4 пъти по-малко. С 4000 милисекунди може да има някакво препълване и затова да се получава така |
|
| Автор: | klez [ Чет Фев 02, 2012 12:33 am ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Същата работа |
|
| Автор: | Бай Ставри [ Чет Фев 02, 2012 12:39 am ] | |||||||||
| Заглавие: | Re: Проблем с _delay_ms(int) функция | |||||||||
Самата функция приема число!!!!!!!!! има подобна дето може да зададеш неква променлива но с тая не става В микро си-то е Vdelay_ms(pause); |
||||||||||
| Автор: | klez [ Чет Фев 02, 2012 12:47 am ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Aha.. Както и да е не е толкова фатален тоя проблем |
|
| Автор: | Бай Ставри [ Чет Фев 02, 2012 12:51 am ] | |||||||||
| Заглавие: | Re: Проблем с _delay_ms(int) функция | |||||||||
не е ли.....аз доста време си дописваях закъсненията докато науча за тая особеност:) |
||||||||||
| Автор: | Nikola Kirov [ Чет Фев 02, 2012 1:06 am ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Хм изглежда че грешката е в double __tmp = ((F_CPU) / 4e3) * __ms; Няма логика да се дели на 4000 като после в единия случай __tmp се дава като параметър на функцията __builtin_avr_delay_cycles() тоест трябва __tmp да бъде точния брой цикли. Ама е и тъпо направено щото не отчита времето за делене и стартиране на функцията. Ще се отрази доста сериозно грешката при малки интервали и ниска честота на процесора. Трябва да се раздели на 1000,оправете си функцията и ще работи. Нещо са пообъркали хората вероятно. Чудно как не са си хванали грешката. |
|
| Автор: | klez [ Чет Фев 02, 2012 1:18 am ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Благодаря ники, ще бутна библиотеката Като цяло грешките не са ми особен проблем рядко я ползвам тая функция обикновенно за тестови цели. |
|
| Автор: | Dimitar [ Чет Фев 02, 2012 2:50 am ] | |||||||||
| Заглавие: | Re: Проблем с _delay_ms(int) функция | |||||||||
Време е да свикваш |
||||||||||
| Автор: | klez [ Чет Фев 02, 2012 12:24 pm ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Явно |
|
| Автор: | Реконструктор [ Чет Фев 02, 2012 1:37 pm ] |
| Заглавие: | Re: Проблем с _delay_ms(int) функция |
Компилатора пуска warning, че ако са ти изключени оптимизациите, тая функция няма да работи както трябва. Виж си внимателно аутпута. Можеш да пуснеш -O1, би трябвало да тръгне нормално. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|