Например TDA7294

Форум РадиоКот • Просмотр темы - #define F_CPU _delay_us(); _delay_ms();
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 13:53:15

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 94 ]  1, , , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 14:33:23 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс дек 13, 2009 01:04:42
Сообщений: 123
Рейтинг сообщения: 0
У меня проблемы по отладке программы для mega328 в AVR Studio 4.
При отладке паузы могут длятся _delay_us(500); (максимум что я ждал 5 минут) я так понимаю что эти функции связаны с макроподстановкой константы частоты процессора #define F_CPU 16000000UL - 16 мегагерц.

_delay_us(); - я так понял что эта библиотека работает только с константами? (error: expects an integer constant.)

_delay_ms();

объясните кто использовал эти функции что к чему?
========
Target(s)...: Mega

#define F_CPU 80000000UL ??? 80 мегагерц. Нашёл в одно из проектов на http://chipenable.ru
========

_________________
Голосовой чат.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 17:04:03 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Во-первых, никогда не надо указывать F_CPU внутри исходников. Этот макрос должен задаваться в makefile, или, если вы работаете с IDE типа Atmel Studio или AVR Studio, в настройках проекта. Еще раз: никогда внутри файла!!!
Во-вторых, _delay_us и _delau_ms - это макросы. и устроены они так, что правильно работают они только с константными значениями задержек. если передавать им в качестве параметра переменную, то результат работы будет некорректный. зато константы можно передавать типа float.
В остальном никаких проблем с ними нет.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 18:42:48 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Во-первых, никогда не надо указывать F_CPU внутри исходников.

Поясните. Интересуют именно технические подробности.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 19:47:41 
Открыл глаза

Карма: 1
Рейтинг сообщений: 19
Зарегистрирован: Вс сен 03, 2017 19:43:57
Сообщений: 42
Рейтинг сообщения: 0
>> Во-первых, никогда не надо указывать F_CPU внутри исходников

Тоже интересуют аргументы.
Для примера перенесите проект из одной среды в другую, например из Atmel Studio в IAR (да даже одной среды разных версий). Если значение F_CPU задано в исходниках я по крайней мере знаю о нём, а если в настройках проекта? Предлагаете установить Atmel Studio чтобы посмотреть параметры проекта. Или разбираться с с форматами данных Atmel Studio?


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 19:49:28 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Demiurg писал(а):
Поясните.
поясняю.
Никто никогда не запретит вам в проекте из трех файлов задать внутри каждого свою собственную директиву #define F_CPU. И так же никто не избавит вас от возможной ошибки
goodspeedmen писал(а):
#define F_CPU 80000000UL ??? 80 мегагерц. Нашёл в одно из проектов на http://chipenable.ru

В итоге после компиляции вашего проекта вы получите некие чудеса в решете: в некоторых случаях _delay_ms(500) будет формировать задержку 0,5 секунд, а в некоторых 0,05 секунд.

когда же ни в одном файле у вас не будет этой директивы, а будет только в параметре компилятора -DF_CPU=8000000UL, то никакой ошибки никогда не возникнет: указанный в параметрах компилятора опцией -D макрос становится "видимым" при компиляции всех файлов автоматически, в итоге все модули собираются одинаково, и ведут себя единообразно.

технически это делается в makefile. но лично я так и не освоил сию премудрость, и пользуюсь возможностями IDE для задания этого...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 19:57:15 
Открыл глаза

Карма: 1
Рейтинг сообщений: 19
Зарегистрирован: Вс сен 03, 2017 19:43:57
Сообщений: 42
Рейтинг сообщения: 0
поясняю...

Предлагаете ВСЕ определения засовывать в настройки IDE, иначе это может привести к ошибкам? Или у вас есть избранные определения?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 19:57:28 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
ARV писал(а):
...

У меня порядок действий таков: в проекте всегда есть файл с основными параметрами. Глобальные объявления, переменные, общие функции. И дефайн F_CPU. Есть что-то пошло не так, то сам и виноват. В makefile залазить - это гуру надо быть, чтобы досконально знать, как его правильно править.
Но, у меня и этой проблемы уже давно нет. Практически не использую delay. У меня программные таймеры. Для мкс и мс задержек в основном самописные задержки. Крайне редко delay_us. Для IAR немного по другому.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 20:01:51 
Открыл глаза

Карма: 1
Рейтинг сообщений: 19
Зарегистрирован: Вс сен 03, 2017 19:43:57
Сообщений: 42
Рейтинг сообщения: 0
У меня порядок действий таков: в проекте всегда есть файл с основными параметрами

Поддерживаю


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 20:28:55 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
technik-1017 писал(а):
Предлагаете ВСЕ определения засовывать в настройки IDE, иначе это может привести к ошибкам?
нет, не все. но F_CPU - это как раз тот макрос, которому нечего делать внутри ваших исходников.
Demiurg писал(а):
В makefile залазить - это гуру надо быть, чтобы досконально знать, как его правильно править.
именно поэтому я и не правлю makefile
technik-1017 писал(а):
Поддерживаю
ну а теперь смотрите на финт ушами: у вас есть глобальный заголовочник, который вы включаете в каждый исходник... и в каждом исходнике у вполне может оказаться еще одно определение этого макроса... вам оно надо - выискивать все эти упоминания? хорошо, когда вы смотрите на варнинги компилятора (он обычно недоволен, когда макрос переопределяется без #undef), но проект собирается без ошибок в любом случае...

лучше один раз привыкнуть делать правильно, чем постоянно объяснять, почему "так удобнее". ИМХО.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 20:35:52 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1384
Рейтинг сообщения: 0
Проблема эта может быть с чужими проектами. У меня определение F_CPU всегда в одном файле, у которого всегда название main_def_func.h.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 20:38:09 
Открыл глаза

Карма: 1
Рейтинг сообщений: 19
Зарегистрирован: Вс сен 03, 2017 19:43:57
Сообщений: 42
Рейтинг сообщения: 0
и в каждом исходнике у вполне может оказаться еще одно определение этого макроса... вам оно надо
не может

не убедили


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вс ноя 19, 2017 21:13:13 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
technik-1017 писал(а):
не убедили
да и бог с вами! ваши проблемы меня не касаются.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Пн ноя 20, 2017 17:41:28 
Встал на лапы
Аватар пользователя

Зарегистрирован: Вс дек 13, 2009 01:04:42
Сообщений: 123
Рейтинг сообщения: 0
Во-первых, никогда не надо указывать F_CPU внутри исходников. Этот макрос должен задаваться в makefile, или, если вы работаете с IDE типа Atmel Studio или AVR Studio, в настройках проекта. Еще раз: никогда внутри файла!!!
Во-вторых, _delay_us и _delau_ms - это макросы. и устроены они так, что правильно работают они только с константными значениями задержек. если передавать им в качестве параметра переменную, то результат работы будет некорректный. зато константы можно передавать типа float.
В остальном никаких проблем с ними нет.


А паузу то по переменной чем делать? Спасибо.

_________________
Голосовой чат.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Пн ноя 20, 2017 19:26:01 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
goodspeedmen писал(а):
А паузу то по переменной чем делать?
если очень хочется по переменной, то можно, например, так:
Код:
void delay_ms(uint16_t delay){
   for(; delay; delay--)
      _delay_ms(1);
}
но вообще говоря, функции программной задержки должны использоваться для коротких и фиксированных задержек, например, при подавлении дребезга или при формировании коротких импульсов управления внешней периферией. а интервалы времени разной длительности лучше отрабатывать таймерами.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Пн ноя 20, 2017 19:43:19 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 20
Рейтинг сообщений: 648
Зарегистрирован: Пт май 31, 2013 17:14:38
Сообщений: 2081
Откуда: Украина, Винница
Рейтинг сообщения: 0
Во-первых, никогда не надо указывать F_CPU внутри исходников. Этот макрос должен задаваться в makefile, или, если вы работаете с IDE типа Atmel Studio или AVR Studio, в настройках проекта. Еще раз: никогда внутри файла!!!
Во-вторых, _delay_us и _delau_ms - это макросы. и устроены они так, что правильно работают они только с константными значениями задержек. если передавать им в качестве параметра переменную, то результат работы будет некорректный. зато константы можно передавать типа float.
В остальном никаких проблем с ними нет.

я вот всегда в main.h его прописываю. никаких проблем.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Пн ноя 20, 2017 19:50:29 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Ярослав555 писал(а):
я вот всегда в main.h его прописываю
а я вот никогда вообще ни в одном заголовочнике его не прописываю - вообще проблем нет!
у вас есть, пусть даже гипотетически, возможность где-то среди файлов проекта забыть добавить main.h и поиметь гемору... у меня такой возможности даже в теории нет.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Пн ноя 20, 2017 21:38:21 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
ARV, можно указывать в заглавном файле, если вы его укажите лишний раз IDE вам покажет где оно повторилось.

Всегда его указываю в conf.h который инклюдится в заголовке компилируемого файла, и всё, никаких проблем, зачем людей пугаете?

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Пн ноя 20, 2017 21:53:52 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
mazda писал(а):
можно указывать в заглавном файле
как говаривали в СА, "можно Машку за ляжку и козу на возу".
я ж разве говорю, что нельзя? я говорю "не нужно"

если у вас есть IDE, то в ней обязательно есть раздел "опции проекта", а в них обязаны быть настройки железа, в которых обязательно будет таковая частота. зачем делать одно и то же в разных местах?

если у вас нет IDE, то никто (кроме warning, да и то, не всегда) вам не покажет, где у вас лишнее определение макроса и тем более никто никогда не подскажет, где его не хватает для корректной работы. не раз встречал, например, такие участки "в библиотеках":
Код:
#ifndef F_CPU
#define F_CPU 8000000UL
#endif
ну и скажите мне, кто или что поможет вам в этом случае, если тактовая частота в проекте у вас задана в заголовочнике, а вот в этом самом файле он не подключен?

хотя, чего это я вас убеждаю делать меньше ошибок? да делайте, мне без разницы! если я кому-то даю советы - это лично моё мнение, каждый сам вправе выбирать путь собственных граблей. а я же советую только избежать те, на которые я сам не раз наступал, пока не нащупал верную тропинку... вот про неё и говорю - не пугаю никого

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Пн ноя 20, 2017 22:04:49 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
у меня не заголовок подключён, а наоборот, в нём все include после настроек, тоесть все подключённые библиотеки увидят настройки из заголовков, нет там никаких вариантов не увидеть.

Может кто то работает без IDE. Наверно есть и те кто работает не только без IDE но и без компьютера.

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: #define F_CPU _delay_us(); _delay_ms();
СообщениеДобавлено: Вт ноя 21, 2017 07:15:29 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
mazda писал(а):
у меня не заголовок подключён, а наоборот, в нём все include
применение заголовочников призвано в какой-то мере устранить проблему глобальной видимости объектов в Си. когда вы ВСЕ ЗАГОЛОВОЧНИКИ включаете во ВСЕ ИСХОДНИКИ, вы тем самым отказываетесь от, пусть и не лучшего, но хоть какого-то, решения проблемы.

нормальная практика - это когда в сишном исходнике подключены только НЕОБХОДИМЫЕ ЭТОМУ модулю заголовки. поэтому в вашем случае правильнее было бы в КАЖДЫЙ исходник включать заголовок config.h... о том, чем это не комильфо - я уже говорил.

я снова повторю: каждый вправе сам выбирать себе грабли на пути. я стремлюсь выбирать путь без граблей.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 94 ]  1, , , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y