Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 23.05.2016, 21:10  
Kopranych
Частый гость
 
Регистрация: 16.05.2016
Адрес: Москва
Сообщений: 35
Сказал спасибо: 6
Сказали Спасибо 1 раз в 1 сообщении
Kopranych на пути к лучшему
По умолчанию AVR Studio 4 виснет на функции _delay_ms()

AVR Studio 4 виснет при отладке любого проекта функция _delay_ms()! Пробовал что в симуляторе что через JTAG в мк, программа просто перестает шагать дальше. Главное когда прошиваешь мк все отрабатывает правильно, но в программе...
Пытался ходить по дизасемблеру программа останавливается на команде BREQ - перейти если равно 0, счетчик вычитает значения доходит до нуля и все повторяется т.е. в регистре SREG флаг Z не зажигается не знаю что делать. Переустанавливал прогу не помогло Подскажите кто сталкивался с таким?
Реклама:
Kopranych вне форума  
Непрочитано 25.05.2016, 16:31  
=GM=
Прописка
 
Регистрация: 21.09.2009
Сообщений: 218
Сказал спасибо: 1
Сказали Спасибо 29 раз(а) в 27 сообщении(ях)
=GM= на пути к лучшему
По умолчанию Re: AVR Studio 4 виснет на функции _delay_ms()

Сообщение от Kopranych Посмотреть сообщение
AVR Studio 4 виснет при отладке любого проекта функция _delay_ms()!
Подпрограмма _delay_ms использует операции с плавающей арифметикой. Возможно, у вас она (арифметика) не подключена, возможно, вы не указали частоту проца. Вариантов много.
Цитата из avr-libc-user-manual (c.296)
They are meant as convenience functions where actual time values can be specified rather than a number of cycles to wait for. The idea behind is that compile-time constant expressions will be eliminated by compiler optimization so floating-point expressions can be used to calculate the number of delay cycles needed based on the CPU frequency passed by the macro F_CPU.

Ниже приведен исходный текст _delay_ms

#ifndef __OPTIMIZE__
# warning "Compiler optimizations disabled; functions from ‹util/delay.h› won't work as designed"
#endif

/*
Perform a delay of \c __ms milliseconds, using _delay_loop_2(). The macro F_CPU is supposed to be defined to a constant defining the CPU clock frequency (in Hertz). The maximal possible delay is 262.14 ms / F_CPU in MHz.
When the user request delay which exceed the maximum possible one, _delay_ms() provides a decreased resolution functionality. In this mode _delay_ms() will work with a resolution of 1/10 ms, providing delays up to 6.5535 seconds (independent from CPU frequency). The user will not be informed about decreased resolution.
*/
void _delay_ms(double __ms)
{
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
if(__tmp ‹ 1.0)
__ticks = 1;
else if(__tmp › 65535)
{
__ticks = (uint16_t) (__ms * 10.0); //__ticks = requested delay in 1/10 ms
while(__ticks)
{
_delay_loop_2(((F_CPU) / 4e3) / 10); // wait 1/10 ms
__ticks --;
}
return;
}
else __ticks = (uint16_t)__tmp;
_delay_loop_2(__ticks);
}

На мой взгляд лучше сразу использовать _delay_loop_2(__ticks); Вот исходник
/*
Delay loop using a 16-bit counter \c __count, so up to 65536 iterations are possible. (The value 65536 would have to be passed as 0.) The loop executes four CPU cycles per iteration, not including the overhead the compiler requires to setup the counter register pair. Thus, at a CPU speed of 1 MHz, delays of up to about 262.1 milliseconds can be achieved.
*/

void _delay_loop_2(uint16_t __count)
{
__asm__ volatile
(
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__count)
: "0" (__count)
);
}

Последний раз редактировалось =GM=; 25.05.2016 в 16:35.
=GM= вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AVR Studio 5 и AVR Studio 4 на одном компьютере rocky7 Embedd С 9 05.12.2012 15:55
Литература по микроконтроллерам (AVR, PIC, ПЛИС и т.д.). Сборка книг - (256 книг+ 27 CD c примерами из книг) [обновление 2011, PDF, DJVU] yurinform Микроконтроллеры, АЦП, память и т.д 5 05.07.2011 19:00
Codevision AVR + AVR Studio помогите разобраться с отладкой Daget Микроконтроллеры, АЦП, память и т.д 24 07.03.2011 14:41
Виснет AVR Studio sergeyku Микроконтроллеры, АЦП, память и т.д 6 30.08.2008 08:30
AVR Studio 4 + wingcc = глюк? nixsys Микроконтроллеры, АЦП, память и т.д 12 27.03.2006 14:36


Часовой пояс GMT +4, время: 03:20.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot