-D просто добавляется: CFLAGS += $(addprefix -D,$(DEFS)) можно и сразу -DF_CPU=16000000 древняя make сейчас не единственная система сборки: cmake, qbs, scons (на питоне) используют для микроконтроллеров. хорошая иде Clion использует cmake, там так примерно: SET(FREQ "8000000") SET(CMAKE_C_FLAGS "-Os -mmcu=${DEVICE} -DF_CPU=${FREQ}UL -std=gnu99 -Wl,--gc-sections") в QtCreator qbs: cpp.commonCompilerFlags: [ "-mmcu=MCU", "-fdata-sections","-ffunction-sections", "-Wl,-gc-sections", "-Os", "-std=gnu99","-Wall", "-D F_CPU=8000000UL" ]; а вот в аврстудии 4.19 в настройках проекта просто пишется число 8000000 (ноль лишний тоже легко приписать) UL почему то не надо, потом оно каким то чудодейственным образом в последней вкладке само добавляется -DF_CPU=8000000UL где можно тоже такое добавить или отредактировать имеющееся - вызывает до сих пор дисонанс по мне лучше всеж в хидере задефайнить
oleg110592 при нормальном все гораздо проще что бы лишний раз не своминать отцёв основателей и сколько куда воды утекло многие ленятся ставить семёрку вмесото четвёрки
_________________ я его в гугл на дрц прогнал, вы знаете, пи-када нет.
Я не ожидал что вопрос вызовет такой ажиотаж. За F_CPU спрашивалось в контексте как "она" влияет на библиотеки задержки. Отладка программы становиться муторным делом... Как изменить частоту в окне "процессор", там всегда стоит 1000000? Вне зависимости от F_CPU.
_________________ Голосовой чат.
Последний раз редактировалось goodspeedmen Ср ноя 22, 2017 23:14:05, всего редактировалось 1 раз.
Как изменить частоту в окне "процессор", там всегда стоит 1000000? Вне зависимости от F_CPU
в настройках проекта, там же, где и тип микроконтроллера выбираете. ну или поблизости.
А что F_CPU внутри файла никак не влияет на режим симулятора студии, все заумствующие здесь и не подумали. а я говорил - не надо F_CPU внутри файлов делать... а вот та частота, что "в окне" студии, должна и в F_CPU попадать автоматически.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Как изменить частоту в окне "процессор", там всегда стоит 1000000? Вне зависимости от F_CPU.
Debug->AVR Simulator Options.
Влияет только на поле Stop Watch в том же окне "Процессор", следующая строчка за Frequency. Показывает, сколько микросекунд симулированного времени заняли эти <Cycle Counter> циклов симулируемого процессора. Активно, вестимо, только в симуляции.
Добавлено after 14 minutes 54 seconds:
ARV писал(а):
а вот та частота, что "в окне" студии, должна и в F_CPU попадать автоматически.
Угу, попадает. И, если ее напишешь где-то еще и в текстах, получишь ворнинг. Но, увы, эта частота из Project Options никоим образом не попадает в AVR Simulator Options, приходится ручками. Косячок, однако, в Студии, по крайней мере в 4.19...
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
вот в чем вопрос - тут или терпеть или задержки закомментировать или железный отладчик. У меня 200ms секунды три "симулирует", наверняка зависит от конфигурации ПК F_CPU действительно симулятору до лампочки, приходится ручонками
а я вот никогда вообще ни в одном заголовочнике его не прописываю - вообще проблем нет! у вас есть, пусть даже гипотетически, возможность где-то среди файлов проекта забыть добавить main.h и поиметь гемору... у меня такой возможности даже в теории нет.
Если забуду и попытаюсь использовать - ошибка. Если попытаюсь переопределить - будет варнинг. Если будет переопределение там где не включил, то тогда да. Но это невозможно, т-к main.h у меня включается в абсолютно ВСЕ файлы, даже из аппнотов. По поводу симулирования. Значит игрался я один раз с генератором звука - кнопочки на входе, меандр на выходе. Получалось что если поставил тактовую МК 8МГц, то были обрывы в звучании. А на 1МГц уже никакого рипения. Проц на ноуте i5. Модель не помню.
если в первой строке программы написано include conf.h то первая его строка и будет первой строкой всей программы, если в conf.h первой строкой идёт F_CPU то его видят вообще все подключенные инклюды
Совершенно верно, но некоторым объяснять бесполезно, K&R они не читали и про ISO не знают, т.к. считают себя слишком умными для такого.
если в первой строке программы написано include conf.h то первая его строка и будет первой строкой всей программы, если в conf.h первой строкой идёт F_CPU то его видят вообще все подключенные инклюды
Совершенно верно, но некоторым объяснять бесполезно, K&R они не читали и про ISO не знают, т.к. считают себя слишком умными для такого.
Не, не работает эта шняга, ерунду говорите. Сделал вот в первом хидере дефайн, в левом файле делаю переопределение - 0 варнингов. Делаю инклюд хидера - опа! Варнинг. Дефайны у нас прописываются через команды препроцессора, их обрабатывает препроцессор. Потом у нас идет компиляция и на этом этапе никаких дефайнов уже нет - чисто константы или подставленные куски кода. В конце у нас работает линковщик - он сшивает куски скомпиленого кода. Так вот - константа или дефайн одного файла абсолютно не виден другим файлам, без инклюда либо объявления. Подстановка, компиляция файлов, сшивание скомпиленых кусков. Именно так это работает. Заместо обвинять кого-то в некомпетентности могли бы сначала протестить то что написали.
Ярослав555 видимо вы что то сделали не так, у меня прекрасно работает.
Вы пишите "Сделал вот в первом хидере дефайн, в левом файле делаю переопределение - 0 варнингов."
Где я вам говорил что нужно сделать переопределение? Во первых включите все варнинги и после компиляции они появятся, или поставьте не такие старые компилятор и ИДЕ.
"Так вот - константа или дефайн одного файла абсолютно не виден другим файлам, без инклюда либо объявления." - чуш, просто бред, или вы вязните в старом по которое не может или сами что то путаете. Ещё скажите что у вас не работают лямбда функции и констэкспр.
Мне не нужно это теститить по тому что все проекты у меня начинаются в F_CPU в первой строке файла conf.h который инклюдится в сишный компилируемый главный файл, первой строкой, и другие дефайны прекрасно видны.
то что нет варнинга, как раз означает что определение не видно. Я делал и по другому - определял дефайн в хидере мейна (первого файла), и пробовал присвоить переменной значение через этот дефайн в другом файле - если нет инклюда получаем ошибку. По поводу того кода что Вы наваяли - так там совсем другое: while(1) { #include "test.h" } означает что Вы в файл main.c ВСТАВИЛИ содержимое из test.h. А я говорю что инклюд подключенный в main.c СОВЕРШЕННО не видер в test.C (не h), без инклюда. ВИДНО и сделать ПОДСТАНОВКУ это СОВСЕМ разные вещи. Разберитесь как работает препроцессор. Когда вы делаете инклюд, это означает что на место инклюда ПРЕПРОЦЕССОР вставляет код из ВКЛЮЧАЕМОГО файла. И вот этот уже преобразованный ФАЙЛ видит компилятор. Ваш код это суть ОДИН файл после прохода препроцессора, поэтому компилятор все видит и не ругается. А вот когда будете собирать проект из тучи СИШНЫХ файлов, вот тогда познаете что такое препроцессор.
"то что нет варнинга, как раз означает что определение не видно" - в моём примере TestDef виден, вы бы привели лучше короткий пример того что и как у вас не работает, в какой ситуации СОВЕРШЕННО не видит
_________________ я его в гугл на дрц прогнал, вы знаете, пи-када нет.
"то что нет варнинга, как раз означает что определение не видно" - в моём примере TestDef виден, вы бы привели лучше короткий пример того что и как у вас не работает, в какой ситуации СОВЕРШЕННО не видит
О Божечки! Он у Вас НЕ виден! Он у Вас ПОДСТАВЛЕН в мейн.с После прохода препроцессора заместо строчки #include "test.h" компилятор видит PORTA = TestDef; Такс, простенький пример говорите. Ну ок.
вы просто забываете вставить нужный инклуд, вставьте include test и всё заработает.
видимо делаете какието фокусы с extern? но зачем, инклюд есть, зачем что то выдумывать
Дак о том и речь шла с самого начала! Что инклюды разные, может случиться переопределение F_CPU. Вы заявили что определенное в первом инклюде видно ВЕЗДЕ, назвали человека не компетентным и послали читать Карнигана-Риччи. И я ничего не забываю. У меня НЕТ проблемы. У меня проекты с десятками файлов и хреновой тучей инклюженых файлов. Меня учить не надо. extern не нужен? Что-то новенькое! А нука создай в хидере переменную и попробуй включить хидер в два файла. Что? Получилось? Или получил variable already defined during compilation? Да ты просто гуру, я посмотрю.
но есть подозрение что вы как то странно компилируете кусками, так ли?
что значит "кусками"? в Си каждый сишный файл компилируется отдельно и независимо от остальных. в продвинутых системах из всего множества файлов перекомпилируются при сборке только те, которые имеют дату свежее, чем соответствующий объектный файл из предыдущей сборки.
каждый Сишный исходник в проекте должен быть максимально независимым от других исходников, потому что компилируется он в виде отдельного куска проекта.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Дак о том и речь шла с самого начала! Вы назвали человека не компетентным и послали Карнигана-Риччи.
ничего подобного! я его не читал.
описанных вами не со стыковок у меня нет вообще, но есть подозрение что вы как то странно компилируете кусками, так ли?
сишники любат вынуть из контекста а потом муторно искать и пытаться линконуть что нибудь такое, давно заметил.
я уже писал не раз как работает СБОРКА проекта. Будь то gcc, код вижн или мой IAR. Сначала запускается ПРЕПРОЦЕССОР - это так называется программка. Препроцессор берет каждый C-файл, смотрит свои директивы - начинаются с символа # и исполняет их. Потом КОМПИЛЯТОР - другая программка компилирует каждый С файл ОТДЕЛЬНО. Потом ЛИНКОВЩИК сшивает ваш проект воедино. О чем с вами можно говорить когда вы не знаете что такое мультифайловый проект? У вас судя по всему только main.c с кучей хидеров. НЕЛЬЗЯ обойтись без extern - НЕТУ другого способа расширить область видимости файла. Сколько областей видимости вы знаете? Если попытаться обьявить переменную в хидере и попробовать включить его в несколько файлов - получите критическую ошибку попытки переопределить существующую переменную. ПОНЯТНО? Если нет - идите читать Карнигана-Ритчи.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 41
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения