| Автор |
Съобщение |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Проблем с _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:
|
| Чет Фев 02, 2012 12:01 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: Проблем с _delay_ms(int) функция
Ами дай да видим самата delay функция де - сега боб ли да хвърляме  . Преди това обаче един приятелски съвет от мен - ако искаш да свикваш с добри практики на програмиране, особено за контролери ще е добре да се научиш по друг начин да си генерираш закъснения и времеви интервали, а не с такива функции, дето процесора стои в тях и нищо не прави  .
|
| Чет Фев 02, 2012 12:07 am |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Проблем с _delay_ms(int) функция
мм мислех че е няква стандартна от delay.h  за това не съм я дал.
Последна промяна klez на Чет Фев 02, 2012 12:20 am, променена общо 1 път
|
| Чет Фев 02, 2012 12:12 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: Проблем с _delay_ms(int) функция
Дай да видим какво има в ей тоя файл "util/delay.h".
|
| Чет Фев 02, 2012 12:13 am |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Проблем с _delay_ms(int) функция
|
| Чет Фев 02, 2012 12:22 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: Проблем с _delay_ms(int) функция
Я пробвай с 10 милисекунди да видиш дали пак ще е 4 пъти по-малко. С 4000 милисекунди може да има някакво препълване и затова да се получава така
|
| Чет Фев 02, 2012 12:30 am |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Проблем с _delay_ms(int) функция
Същата работа 
|
| Чет Фев 02, 2012 12:33 am |
|
 |
|
Бай Ставри
Ранг: Новодошъл
Регистриран на: Пет Май 27, 2011 8:25 am Мнения: 134 Местоположение: Силистра
|
 Re: Проблем с _delay_ms(int) функция
Самата функция приема число!!!!!!!!! има подобна дето може да зададеш неква променлива но с тая не става В микро си-то е Vdelay_ms(pause);
_________________
|
| Чет Фев 02, 2012 12:39 am |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Проблем с _delay_ms(int) функция
Aha.. Както и да е не е толкова фатален тоя проблем
|
| Чет Фев 02, 2012 12:47 am |
|
 |
|
Бай Ставри
Ранг: Новодошъл
Регистриран на: Пет Май 27, 2011 8:25 am Мнения: 134 Местоположение: Силистра
|
 Re: Проблем с _delay_ms(int) функция
не е ли.....аз доста време си дописваях закъсненията докато науча за тая особеност:)
_________________
|
| Чет Фев 02, 2012 12:51 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
 Re: Проблем с _delay_ms(int) функция
Хм изглежда че грешката е в
double __tmp = ((F_CPU) / 4e3) * __ms;
Няма логика да се дели на 4000 като после в единия случай __tmp се дава като параметър на функцията __builtin_avr_delay_cycles() тоест трябва __tmp да бъде точния брой цикли. Ама е и тъпо направено щото не отчита времето за делене и стартиране на функцията. Ще се отрази доста сериозно грешката при малки интервали и ниска честота на процесора.
Трябва да се раздели на 1000,оправете си функцията и ще работи. Нещо са пообъркали хората вероятно. Чудно как не са си хванали грешката.
|
| Чет Фев 02, 2012 1:06 am |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Проблем с _delay_ms(int) функция
Благодаря ники, ще бутна библиотеката  Не вярвах и аз че може в библиотеката която си идва с AVR studio-то да има проблем. Като цяло грешките не са ми особен проблем рядко я ползвам тая функция обикновенно за тестови цели.
|
| Чет Фев 02, 2012 1:18 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
 Re: Проблем с _delay_ms(int) функция
Време е да свикваш  .
|
| Чет Фев 02, 2012 2:50 am |
|
 |
|
klez
Ранг: Професионалист
Регистриран на: Нед Ное 08, 2009 12:17 am Мнения: 512
|
 Re: Проблем с _delay_ms(int) функция
Явно  последно така с презумпцията, че в дейташийтите няма грешки си блъсках 1 месец главата докато усетя че на ония баро сензор в дейташийта едната променлива е с объркан тип;)
|
| Чет Фев 02, 2012 12:24 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 Re: Проблем с _delay_ms(int) функция
Компилатора пуска warning, че ако са ти изключени оптимизациите, тая функция няма да работи както трябва. Виж си внимателно аутпута. Можеш да пуснеш -O1, би трябвало да тръгне нормално.
|
| Чет Фев 02, 2012 1:37 pm |
|
|