В обычной клавиатуре "мю" нету. Как- то никто уже не заворачивается насчёт uF в обозначениях конденсаторов в схемах. Расчёт для 1МГц сделан с учётом большинства МК разных семейств "по умолчанию" - там в подавляющем большинстве именно 0, 000001S/ одноцикловую команду встречается. При желании можно и пересчитать. Только не макросом с параметрами, а директивами условного ассемблирования или с использованием задаваемого в *.inc файле описания МК символическим именем соответствующего МК или параметром базовой тактовой частоты... Это уже скорее специмя в файле дефайнов главного файла проекта закладывать надо... Суть вложенного в "обкатке" модулей в приложении к "многофайловикам".
Неприятие критики детектед. Было ж конечно о чем. Все ж главный то минус замалчивается:
Цитата:
Расчёт для 1МГц сделан с учётом большинства МК разных семейств "по умолчанию"
Раз исходник выложен на всеобщее обозрение, надо критику "благодарно принимать". А ведь многие то на 8 МГц аврки обычно запускают (судя по проектам интернета) - за что ж деньги уплочены, а то и кварцы на 11.059МГц...20 МГц цепляют, а тини13 вообще не вписывается.
Цитата:
При желании можно и пересчитать.
сколько nop-ов то надо на 20 МГц? Вот простенько, но можно под другое легонько пересчитать: з.ы. и никаких NOP-ов
Критика насчет "u" вместо "мю"? По вопросу "почему 1МГц" - это не в данном случае рассматривается - мне и с такими параметрами неплохо. Смысл выложенного касается модуля для многофайловика, подключаемого как .nclude *.* вставка. А файл как пример подготовки модуля для последующего использования. Кому охота изменить параметры - то уже личное дело. Тем более, что помимо 3-проводки с "внешним питанием" существует еще и вариант "паразитного питания" - а там алгоритм несколько посложнее, с разворотом шины на вывод 1 используется. Зачем сразу все в одну кучу то сваливать?
Работа с задержкой на основе циклов в случае с формированием при частоте в 1 МГц особого выигрыша по расходу ПЗУ не дает. В случае обращения к подпрограмме уже 8 uS расходуется (rcall + ret). Если еще счетчик ставить - практически то же самое, что и для NOPов будет. Остаток 15-8=7 uS = 7 NOP или набор из счетчика LDI константы, dec счетчика и brne цикл 1+1+1/2 да еще подсчет содержимого для константы досчета с учетом того 1/2 у команды условного перехода. В итоге "сэкономится" 4 слова ПЗУ при несколько иной конструкции вызова и усложнении начального тестирования. Кроме того не стоит забывать, что для задержки на основе счетчика потребуется дополнительный регистр. А это, в свою очередь добавит минимум две команды для сохранения/восстановления предшествующего вызову драйвера контента в стеке. Другое дело, что такой вариант более универсален при работе с более высокими частотами системной шины. Или для "вылизывания" по уже проверенной на железе программе может использоваться.
Критика uLAN - в том что новичок с форума не найдет такой сети в гугле - это и ежу понятно. А на картинке видно "лишних" там только 0.75us, что для вышеупомянутой, не правильно обозванной сети не принципиально. По крайней мере DS18B20 себя прекрасно чувствует.
Цитата:
мне и с такими параметрами неплохо
а другим будет плохо, это пытаюсь донести - форум публичный, а в личном блоге это нормально, да и
Цитата:
Смысл выложенного касается модуля для многофайловика, подключаемого как .nclude *.* вставка
причем тут тогда "uLAN ногодрыгом" - получается "здесь читать, здесь не читать, а здесь я рыбу заворачивал"(c) https://www.youtube.com/watch?v=hOrLrLPsv1k з.ы. до сих пор не понял разницы понятий многофайловика и однофайловика. Ведь если в один файл скопировать все инклуды, то многофайловик превращается в однофайловик - так тогда и разницы особо и нету. По просьбе трудящегося можно ли описание "многофайловика и однофайловика" в виде картинок, лучше как алгоритм.
Там не "в алгоритме" вопросы... А в оформлении и нюансах в отношении атмелевских компиляторов (компиляторы лишены компоновщика/линкера). Ибо "просто свалить в один файл все .include *.*" НЕ ПОЛУЧИТСЯ. Если только это не фрагменты, включающие в себя исключительно мнемоники команд да простой комментарий. Автономный модуль может иметь в своем составе и переразметку регистров и переразметку ОЗУ и участки начальной инициализации. Пока еще не все ситуации выявлены ... Посему только пробы - хотя и вполне самодостаточные (могут использоваться как вариант исполнения собственных программ). На данный момент для тех модулей, что в проект как .include *.* подключаться могут различные варианты по сложности описывающей части рассматриваются. Без особого фанатизьму в ущерб свободного времени. В простом случае текстовая подстановка, но в сложном - к обычному тексту добавляются и определения разметки. С одной частью - разметкой регистров-аккумуляторов СОЗУ файла разъяснилось... По ходу такой же вариант - разметка временной области с последующим переназначением ожидает и ОЗУ... Там еще поработать надо над прояснением вопроса. Пока однозначно ясно, что при наличии разметки ОЗУ в главном файле проекта вариант с .dseg name: .byte M в подключаемом.include *.* не пройдет... А вручную перетаскивать в общий раздел дефайна ВЛООМ... Надоть чегось придумать...
Насчет "кому понятно, а у кого вопросы..." На вопросы начинающих ответить порой проще, чем очередной "спор о курице и яйце" с "матерыми" разводить. Тем более "в формате бесполезного флуда". В принципе - кому нравится - тот смотрит, а кому не нравится - я ж не заставляю - можно и мимо пробежать, ёжли тема интереса не представляет. Здесь или готовый проект как вариант возможного исполнения или вариант для самостоятельных размышлений, а не "учебный центр юного техника" с абсолютными утверждениями вида "делать только так и не иначе!!!"
Ибо "просто свалить в один файл все .include *.*" НЕ ПОЛУЧИТСЯ.
получится, именно это и делает .include - уже проходили
Цитата:
Пока однозначно ясно, что при наличии разметки ОЗУ в главном файле проекта вариант с .dseg name: .byte M в подключаемом.include *.* не пройдет...
конечно пройдет - всегда так делали, например: и никаких проблем "в оформлении и нюансах в отношении атмелевских компиляторов" вот этот реальный примерчик:
все просто и понятно - зачем огород городить. Отметим - Target: I2C Demo Board, 20MHz, ATmega164P. Ну ни как не "типовой" на 1MHz (сколько все ж надо nop-ов на 20MHz почему то замалчивается). Утверждения всякие выше, с большим количеством хаотических "умных" слов - уж очень похожи на развешивание лапши на уши неокрепших умов (например см. выше, начиная "Работа с задержкой на основе циклов..."). Пример на картинке выше, явно экономичнее и удобнее во всех смыслах (имхо). Не мешало бы сначала произвести тестирование разных вариантов и их сравнение, прежде чем "рассуждать". "я ж не заставляю - можно и мимо пробежать"(c)
Цитата:
здесь или готовый проект как вариант...
форум вообще то создан для общения (см. п2 правил), а не как индивидуальный блокнотик (писал уже). Каждый имеет право предложить для обсуждения свой вариант, по его разумению лучший. И вообще если посмотреть на начало темы - обсуждение типа многофайловиков avr это и есть флуд, ведь "Котуинко это "Базовая платформа порта-расширителя ПК для любительских применений. Основано на микроконтроллере AT89S52".
Со 164мегой я не занимался - так что ничего особо сказать не могу по поводу Вашего проекта. У моего варианта пока стадия предположений и проверок. Как будет окончательно готово - тогда и выложится. Спешить особо незачем. Предложение своего варианта как дополнительного и навязчивый запрет на чужое мнение и темы - совершенно иное. Я рассматриваю те вопросы, что представляют интерес с моей точки зрения. При том, что и иные варианты не исключаются. А Вы приходите в эту тему с требованием её закрытия, поскольку, по Вашему мнению тема противоречит интересам форума. Странная позиция... Вопрос рассмотрения особенностей подключаемых файлов относится одинаково и к avrasm2 и к c51asm поскольку оба компилятора по работе с исходниками подобны. Помимо прочего... Платформа Котуинко предусматривает применение всех трёх семейств МК при совместной работе.
А Вы приходите в эту тему с требованием её закрытия, поскольку, по Вашему мнению тема противоречит интересам форума. Странная позиция...
Где требовал и где навязчивый запрет ((!) кнопка ни разу) - тут народ на форуме, выпучив глаза, со всей душой предлагает как лучше (по их мнению) решать подобные задачи видя какие мучения тут происходят и постоянные топтания на месте. А для чего выкладывают обычно на всеобщее рассмотрение, еще и сырое. Свое личное, повторюсь, пишут в личном блокнотике и прячут от посторонних глаз. Обидная позиция.
Цитата:
рассматриваю те вопросы, что представляют интерес с моей точки зрения
ну и пусть тут будет и чужая точка зрения - одно другому не мешает, наоборот польза форуму (имхо) - в споре рождается истина(с). з.ы. подожду пока молчаливо успешных результатов
К продолжению... Относительно NOPов и кольцевых счетчиков... Применимы оба варианта в зависимости от ситуации. Кольцевой счетчик удобен в большинстве случаев, когда интервал измерения хотя бы на 4-5 машинных циклов более длительности суммарного тела счетчика (включая предсохранение в стеке регистра счетного интервала и команды вызова/возврата). При типовой "стандартной по умолчанию" частоте 0,000001S/одноцикловую команду интервалы в 10-15 микросекунд предпочтительно отлаживать на NOPах. То же касается и задержек, кои я ставил в драйвере для WS2812 (при 0,0000000625S/одноцикловую команду). Относительно .dseg во "вкладных файлах"... Не путайте вкладыши для ассемблерных вставок при работе под СИ (или иным компилятором) и работу под "чистым ассемблером" в AVRстудио!!! Ибо в одном случае таки есть линкер (хоть и скрытый) который используется компилятором Си, а во втором - "чистый" двупроходный ассемблер... Так воть... Ниже примерчик... тестовый (к самим прожкам нет смысла придираться - ибо таки работают, хоть и не "заоптимизированы").
т.е имеют место три ошибки, запрещающие дальнейшую работу. Если вернем все на старое место - определения ячеек ОЗУ будет выполнено в заголовке основного файла проекта (test.asm), а в mul24.txt закомментируем все назад, то компиляция пройдет без замечаний. Причем такое действо абсолютно не зависит был ли файл умножителя назван mul24.txt или mul24.asm... Ну и при желании можно будет протестироват в дебаггере работу умножителя и делителя, вводя значения во вкладке карты регистров ОЗУ. Единственно чего там нету - предпроверки правильности данных и переполнения результата в делителе. Причины таких "нюансов" разбирать... Это уже вопрос разработки компилятора... А мне интереснее, как такую бяку без особого заморачивания обойти - вот потому и разговор о применении во "вкладных файлах" переразметки через #define. Тем более, что такой прием одинаково работает и для avrasm2 и для c51asm и для mpasm.
oleg110592 Приходится признать, что мое высказывание по вопросу .dseg , построенное на моем варианте теста не является верным... Однако есть ФАКыть - тест-проект "склейку" сегмента данных НЕ ПРОПУСКАЕТ. (В отличии от Вашего варианта). Остается разобрать причину, по которой возникают ошибки. Ибо факт наличия ошибок в исходном варианте и отсутствия ошибок при его "разбиении на мелкие фрагменты" с их последующим выносом в дополнительные .include*.* таки имеет место. Предполагаю что проблема в компоновке заголовка - но вот на каком участке происходит блокировка норамаьной обработки - это придется "методом научного тыка" смотреть. Ведь заголовок главного тест-файла с точки зрения компоновки "стандартного" файла собран правильно. В любом случае, усложненный тест дает более жесткие условия для проверки и анализа.
А вот собственно и причина ошибок - место вставки обязательного файла комплекта поставки в моем случае
Код:
.include "tn2313def.inc"
в главном файле проекта. Прозевал, установив после блока определений/разметки вместо вставки в самом начале текста. Самое интересное, что некорректная версия размещения таки скомпилируется, но при добавлении дополнительных .dseg определений ниже того .include "tn2313def.inc" будет выбрасывать ошибки. Перемещение в самое начало главного файла все расставило по местам.
Вопрос к тем, кто использовал директивы: .IFDEF name и/или #IFDEF name (и аналогичных для атмелевских компиляторов ассемблера avrasm2 и c51asm для обработки условной трансляции части кода в зависимости от условия) в чем возможная разница (кроме банального "#-директива препроцессора") в применении по отношению к объявленным меткам/константам? Да и особенности размещения объявления и блока условной обработки того объявления в тексте исходника весьма интересны... Эти вопросы обычно для большинства типовых проектов не возникают. Однако ежли уж лезть в изврат (от нефиг делать) то стоит им также внимание уделить. Пока попробую еще сам кое-какие вопросы на старом изврат-тесте проверить. Просто там повыделываться легче.
по идее директивы условной компиляции служат для возможности вариантной сборки проектов. например, у вас есть код поддержки USART в одном файле, и есть код поддержки USI в другом. вы называете функции одинаково типа send_byte в обоих файлах, а уж в "главном" модуле при помощи директив условной компиляции подключаете либо тот, либо другой файл. я не уверен, как к этому отнесется avrasm, но как-то так:
разумеется, выше этого кода должен быть подключен заголовок с описаниями регистров конкретного МК...
P.S. BOB51, вы выражаетесь таким "высокопарным" слогом а-ля Михайло Ломоносов, что понять, что вы хотите, среднему уму невозможно. поэтому я не уверен, что ответил "в тему".
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
То, что для болков условной трансляции компилятором понятно... Однако там всплывает кучка "мелких неприятностей"... Да еще и "разнобой" с ПИКовыми в отношении количества и применяемости директив имеется... У АВРковых помимо #define со слэшем и директивы условной трансляции... Вобщем... пока мучаю тест-заготовку, чтоб чего прояснить... Пока только следующее проявилось - 1. блоки условной трансляции ВСЕГДА должны быть ниже по тексту, чем определения используемых в них констант/меток; 2. то, что определено в тексте как #define name proto может быть использовано только ниже по тексту (никак не в более ранних участках исходника); 3. если метка/константа определена в программе как обычная метка в .dseg или .cseg или директивами .def .equ .set то используются директивы условной компиляции (avrasm2/c51asm) с префиксной точкой . ; 4. если определение сделано как #define name proto то для нее требуется использовать директивы условной компиляции (avrasm2/c51asm) с префиксным # То же касается и директив самодельных служебных сообщений - префикс у них ставим такой же как и у остальных директив в блоке обработки условий. (к примеру #warning info или .warning info соответственно) А вот у ПИКовых такого разделения вроде нету (требуется таки при возможности уточнить...) Может у кого еще какие мысли/наработки на эту тему были?
в документации и в родных примерах обычно и мысли и наработки
Цитата:
IF, IFDEF, and IFNDEF Conditional assembly. Conditional assembly includes a set of commands at assembly time. The IFDEF directive will includecode till the corresponding ELSE directive if <symbol> is defined. The symbol must be defined with the EQU or SET directive. (Will not work with the DEF directive.) The IF directive will include code if the<expression> is evaluated different from 0. Valid till the corresponding ELSE or ENDIF directive. Up to five levels of nesting is possible
Код:
.MACRO SET_BAT .IF @0>0x3F .MESSAGE "Address larger than 0x3f" lds @2, @0 sbr @2, (1<<@1) sts @0, @2 .ELSE .MESSAGE "Address less or equal 0x3f" .ENDIF .ENDMACRO
Однако кроме обычных директив с префиксной точкой там и со слешем применяются. А они - разных "сущностей" касаются... Да и второй нюанс - объявить используемое имя надо только до применения директив. Ибо применение не только в макросах интересно. Кстати... .ifdef mark отлично подходит относительно ранее определенной метки/имени подпрограммы (вероятно и имени ячейки памяти, определенной как именованны элемент в .dseg надо посмотреть...)... А вот #ованные работают похоже только относительно того, что определено с помощюь #define (*только для avrasm2/c51asm). Разница в применении представляет интерес именно относительно проектов с применением .include вставок при "перекрестных" запросах о наличии/отсутствии определенных частей программы к примеру...
Продолжение садомазохизма... Зачесалось мне заставить условный блок обработать сущность, определение которой сделано ниже по тексту, чем сам блок... вот такая врезка контроля в файле av_mlan.txt анализирует наличие подпрограммы обработки ошибок Спойлер
#warning "not defined EXTERN red_error for uLan libr"
m_error_s: rjmp m_error_s ; пока заблокировано для тест-отладки ; в рабочей программе тут устанавливается переход ; на немедленную обработку ошибки "датчик не отвечает"
#endif
но сама подпрограмма расположена в главном файле ниже по тексту, чем подключение содержащего анализатор условной компиляции .include "av_ulan.txt" Спойлер
Воть... поставил вверху (или в главном блоке определений) основного файла строчку #define red_error_proc red_error - определена сущность red_error_proc равная адресу подпрограммы red_error К сожалению подтвердилось предположение, что корректно с сущностью, определенной как #define у АРВок (avrasm2) корректно работают только директивы со #(слэш-префиксом)... В то же время по сути проверяется наличие адреса red_error, находящегося ниже размещения модуля av_mlan.txt И возможность перехода по команде, содержащей синоним red_error_proc... Хотя в данном случае компилятор вполне спокойно и прямой переход на red_error выполняет, но вот директивы условной компиляции потребуют некоторого шаманизма... Если же фрагмента с адресом red_error не окажется в пределах проекта Ошибку вида ...\test\av_ulan.txt(437): error: Undefined symbol: red_error отловит сам компилятор.
Залез поосмотреться на https://www.microchipdirect.com насчет чего там новенько-хреновенького... относительно АВРок... ПОПЛОХЕЛО... Новая редакция AVR-Instruction-Set-Manual-DS40002198A
Относительно самих кристаллов... Как Вам вот такое чудо: "The AVR128DA28/32/48/64 microcontrollers of the AVR-DA family are using the AVR® CPU with hardware multiplier, running at up to 24 MHz, with 128 KB of Flash, 16 KB of SRAM, and 512B of EEPROM in 28-, 32-, 48- or 64-pin packages. The AVR-DA family uses the latest technologies from Microchip Technology, with a flexible and low-power architecture including Event System, intelligent analog features, advanced digital peripherals and Peripheral Touch Controller (PTC)." ...?? И маркировка не мега не тинька, не Хмега, а AVR128DA32.... Ну и моного подобного... Похоже также что идет работа над приведением всех МК под единый мплаб Х...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения