Обсуждаем контроллеры компании Atmel.
Ответить

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 14:59:35

Zat писал(а):Мне не нужно бегать по хедерам и искать эту константу.
как бы для некоторых констант есть особое место - глобальное... для всего проекта сразу. Например, для F_CPU, DEBUG и т.п. и помещать их в заголовки не совсем логично.
mazda писал(а):принято или не принято, когда то было не принято ездить на авто, это было плохим тоном. Если нет технических ошибок и всё работает на современном ПО то какая разница что где принято
ну да, запятыми пользоваться тоже - зачем? условности какие-то - понятно же, что написано, да?

всякие дураки книжки пишут про структурирование кода, беспокоятся об изоляции модулей... в С++ и C# namespace какие-то добавили специально... MISRA какая-то придумана идиотами... а оказывается, вам и так хорошо...

ну, я рад за вас, что еще сказать.

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 15:07:28

как бы для некоторых констант есть особое место - глобальное... для всего проекта сразу. Например, для F_CPU, DEBUG и т.п. и помещать их в заголовки не совсем логично.

Если нужны глобальные константы, то создайте const.h, определите там все что глобальное
и в нужном месте просто делайте #include "const.h". Но будет все логичнее, в одном месте, и глобально.
Куда уж проще.

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 15:13:27

видимо ARV и Ярославом это один и тот же человек который заходит под разными никами что бы потролиться

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 15:22:15

как бы для некоторых констант есть особое место - глобальное... для всего проекта сразу. Например, для F_CPU, DEBUG и т.п. и помещать их в заголовки не совсем логично.

Если нужны глобальные константы, то создайте const.h, определите там все что глобальное
и в нужном месте просто делайте #include "const.h". Но будет все логичнее, в одном месте, и глобально.
Куда уж проще.

если глобальная константа определена в свойствах проекта, а не в тексте, то ее видно без инклюда. Иногда так проще и правильнее.

Добавлено after 1 minute 10 seconds:
видимо ARV и Ярославом это один и тот же человек который заходит под разными никами что бы потролиться

Видимо. И мировой заговор против вас. Удачи с вашей паранойей :)))

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 15:25:17

глобальная константа определена в свойствах проекта


но зачем? где тут смысл? что бы запутать компилятор или себя?

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 15:30:10

mazda писал(а):но зачем? где тут смысл?
а это зачем и где тут смысл?
mazda писал(а):всё работает на современном ПО то какая разница что где принято
вам ли смысл искать?

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 15:48:34

вам ли смысл искать?

:)))

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 15:48:50

если глобальная константа определена в свойствах проекта, а не в тексте, то ее видно без инклюда. Иногда так проще и правильнее.

Вот как раз это совсем ошибочно. Если нужно изменить размер стека, добавить какие-то библиотеки (прилинковать) или если частота
камня определяется в свойствах проекта, то возможно, тут и уместно так сделать. Но я раза 2 или 3 попадал на том, что
определив все константы (не более 1-2 шт) в проекте приходилось переносить в инклуды. Т.к. бывают случаи, при смене среды разработки
(я пишу в IAR, Keil и AVRStudio), проекты не подхватываются просто так. Нужно создать новый и добавить все файлы. Очень тяжко потом
вспоминать что же я там в свойствах проекта писал. Приходится потом отслеживать по ошибкам что глючит и прописывать опять в инклуды.
Вообщем, я два, три нет 4-й раз на грабли не хочу наступать. Все равно приду к тому же.

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 16:55:17

кажется они просто не хотят признавать свою вину

Re: #define F_CPU _delay_us(); _delay_ms();

Чт ноя 30, 2017 16:56:58

Т.к. бывают случаи, при смене среды разработки
(я пишу в IAR, Keil и AVRStudio), проекты не подхватываются просто так. Нужно создать новый и добавить все файлы. Очень тяжко потом
вспоминать что же я там в свойствах проекта писал. Приходится потом отслеживать по ошибкам что глючит и прописывать опять в инклуды.
Вообщем, я два, три нет 4-й раз на грабли не хочу наступать. Все равно приду к тому же.
Я смотрю вы любите очевидные вещи писать. Ну я же написал - ИНОГДА. Иногда люди работают в одной среде, такое случается.

Re: #define F_CPU _delay_us(); _delay_ms();

Пн дек 18, 2017 23:24:49

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

Re: #define F_CPU _delay_us(); _delay_ms();

Чт авг 18, 2022 18:25:44

ARV, спасибо за науку! Плюсанул в карму.
Осталось разобраться насчет UL, понятно, что это unsigned long число, но как задавать его в студии?
В 4-ке это было в свойствах проекта, писалось обычным числом в герцах, например 9600000Hz.
В 7-ке (она же Микрочип Студио) чуть посложнее с этим, но результат не меняется, если писать F_CPU=9600000 или F_CPU=9600000UL.
Для начала хотелось бы понять, а какой длины это unsigned long число? Отталкиваться от каких систем? 32-х битных или 8-и битных?
Ну и второе, а надо ли оно, если среда и так все хорошо понимает?
Ну и третье, а что делать, если частота низкая, например 16кГц всего (да, такое иногда бывает)?
Все эти вопросы просто для того, чтобы делать правильно, на самом деле все корректно работает на любых частотах как без, так и L или UL.

Re: #define F_CPU _delay_us(); _delay_ms();

Чт авг 18, 2022 19:10:35

я могу ошибаться, потому как сколько бы я про Си ни узнавал, все равно оказывается, что в стандарте есть ещё нюансики, переворачивающие мои знания с ног на голову...

но по сути вопроса думаю так. само по себе чтсло-константа будет воспринято правильно, если будет само по себе - компилятор и с UL, и без поймет 9600000 так, как надо... но только до момента, когда это число попадет в выражение. результат 1+9600000 будет совсем не 9600001, как могло бы показаться... а вот 1+9600000UL даст правильный результат.

как-то так...

я могу вам дать пару советов, которые "настоящие программисты" сразу заплюют: всегда ставьте скобки в сложных выражениях, особенно в логических выражениях, на надеясь на память о приоритетах операций и всегда добавляйте UL к константам, если есть вероятность, что в выражении с их участием может получиться результат (даже промежуточный!) больше 65535. и будет вам счастье

Re: #define F_CPU _delay_us(); _delay_ms();

Чт авг 18, 2022 19:40:48

... Для начала хотелось бы понять, а какой длины это unsigned long число? Отталкиваться от каких систем? 32-х битных или 8-и битных? ...

Включите <stdint.h> и если удобно, используйте int8_t/uint8_t, int16_t/uint16_t, int32_t/uint32_t и т.н. - видно битность.
Ответить