Перейти к содержанию
    

vvppvv

Участник
  • Постов

    70
  • Зарегистрирован

  • Посещение

Весь контент vvppvv


  1. Какие у вас тут любопытные споры... :)) В Си IAR AVR так и есть, да. Наверное, это установка по умолчанию, ведь кодировка символа сейчас зачастую двухбайтная. Если использовать ASCII-таблицу для байта, то никаких двусмысленностей нет: 216 char CH = 'A'; 217 PORTC = sizeof('A'); \ 00000000 E002 LDI R16, 2 \ 00000002 B908 OUT 0x08, R16 218 PORTB = sizeof(CH); \ 00000004 E001 LDI R16, 1 \ 00000006 B905 OUT 0x05, R16
  2. Я использую "//" в комментариях, а это, строго говоря, уже из плюсов. Но компилятор позволяет. :)) Вообще, конечно, всё зависит от задач, тут я полностью согласен.
  3. Я когда-то давно пробовал перейти на С++. Ну как же, это модно, нужно быть в тренде. и пр. Потом понял, что эти костыли были придуманы для человека, мыслящего как человек и неспособного мыслить как процессор. А как известно, чтобы японскому мастеру нарисовать корову - надо стать коровой. :)))) Потому я не стал себя больше насиловать, натягивая противоестественное, и скатился обратно к натуралам, в нативный для AVR Си-ассемблер.
  4. Да, компилятор его подкорашивает! Но т.к. я пишу в Си, ругается: "Error[Pe020]: identifier "nullptr" is undefined"
  5. "Error[Pe020]: identifier "nullptr" is undefined D:\_Workdir\ (.......)\main.c 499 " И в то же время 499 rc_Count_Ptr = 0; \ ??main_11: \ 000001C8 24EE CLR R14 \ 000001CA 24FF CLR R15 Я так думаю, что nullptr - это для С++.
  6. Так получилось, что к Си я пришёл через ассемблер. Если процессор допускает косвенный вызов функции с адреса 0х0000 (т.н. "мягкий" или "софтверный" ресет), а стандарт языка такое не допускает, то зачем мне такой язык нужен? Я больше железячник, а не программист. Мне ехать, а не шашечки. ))
  7. Это часть стандартной библиотеки: https://en.cppreference.com/w/c/types/NULL Сделайте include <stdlib.h> или include <stddef.h> Я не силён в теориях и реализациях языков. Вот попалась цитата: "Что будет если Разыменовать Nullptr? Отсюда следует, что если в вашей программе есть разыменование nullptr , то компилятор имеет право произвести любой код, никаких обязательств перед вами или гарантий нет. В лучшем случае ваша программа просто крешнется." Поэтому мне явно указаный "0" с приведением типа как-то спокойнее, чем "нулл" из какой-то библиотеки. :)) Так я так и хочу. Список может быть разный по длине. Всё как со строками - перебираем, перебираем, до тех пор, пока не упрёмся в ноль. Можно и так. Но тогда мы пропустим, например, посылку байта. Вместо того, чтобы функция сделала чтот-то полезное, в отпущенный ей квант времени, она просто передвинет указатель. :))
  8. Да. Но проверка на ноль (проверка на достижение границы списка указателей) очень быстрая и простая, мне показалось так удобнее будет (указатель лежит в R13:R12): 480 if (!Func_UART_ptr) \ 000001FA 2D0C MOV R16, R12 \ 000001FC 290D OR R16, R13 \ 000001FE F419 BRNE ??main_14 ====== Я вот так сделал (без претензий на совершенство :)) ============== (** Func_UART_ptr++)(); // вызвать функцию из списка if (!Func_UART_ptr) // если была последняя, Func_UART_ptr = UART_NN; // то указатель на начало списка ("MARK") И это пробовал. Нет его в IAR EW AVR 7.30.5. компилятор ругается. Да, разумеется. Описька.))
  9. Изначально аперсандов и не было. Для указателя на первый элемент или функцию он же не нужен. Это я уже после начал втыкать всё, что попало, Добавлять скобки, убавлять, квадратно-гнездовых способом. Но компилятор фыркал, мотал головой и не поддавался, гад. :)))) Спасибо!
  10. Ой спасибо! Вот ведь, блин... Посыпаю голову пеплом. ))) Семёрку убрал, она там не нужна. ВОт так вроде всё сжевалось: void (* UART_NN[])() = // Указатели на функции, последний равен нулю { UART_00, UART_01, UART_02, UART_03, UART_04, UART_05, ((void(*)(void)) 0) }; Спасибо!
  11. Помогите, пожалуйста. Что-то я заблукатил в трёх соснах :)) Идея такая. Есть набор простых функций , без аргументов, которые должны вызываться последовательно, "по кольцу". Я решил организовать массив указателей на эти функции, с тем, чтобы просто инкрементировать указатель на этот массив, и как только он упрется в ноль - значит, достигнут конец списка, переход на начало. Ну, как со строками. Все хорошо, но я что-то никак не могу сказать компилятору, что мне нужен указатель равный нулю, в конце списка. Компилятор IAR AVR, язык Си: void UART_00 (void); // Функция передачи "MARK" void UART_01 (void); // Функция передачи "SPASE" void UART_02 (void); // Функция передачи 1-го байта битового поля void UART_03 (void); // Функция передачи 2-го байта битового поля void UART_04 (void); // Функция передачи 3-го байта битового поля void UART_05 (void); // Функция передачи 4-го байта битового поля void (* UART_NN[7])() = // Указатели на функции, последний равен нулю { & UART_00, & UART_01, & UART_02, & UART_03, & UART_04, & UART_05, & ((void(*)(void)) 0) // тут ругань, "Error[Pe158]: expression must be an lvalue or a function designator }; При этом софтварный ресет в виде: ((void(*)(void)) 0)(); как косвенный вызов, прекрасно компилится, т.е. в регистровую пару Z грузятся нули. Где я подтупливаю? :))
  12. Тем не менее, тогда, и в тех реалиях, это был факт. Как говорится, "миллион мух не могут ошибаться". :)) Память ОЗУ в Синклерах версий 48кБ использовалась практически всегда "под завязку", потому любой чих сразу вылазил. Штатного теста при включении хватало. Игрушки все либо работали, либо сразу вылетали. А вот 128 кБ версии (Пентагон-128 или наш Орион-128) - там да, могли быть нюансы. Но там и посерьёзнее тесты памяти были, в виде отдельных загружаемых программ. Я собирал оба (Петагон-128 даже с дисководоми и "музыкальным процессором" AY-3-8910! :)), и искал для них нормальные микросхемы, с маркировкой.
  13. Вспоминается конец 80х годов прошлого века, эра синклеростроения. Когда мы студентами собирали разные микрокомпутеры. В ходу были микросхемы динамической памяти, КР565РУ5Г (ДИП-16). Микросхемы изготавливала наша, тогда ещё живая, электронная промышленность. Так вот, часто на Тушинском (а после на Митинском) радиорынке продавались комплекты этих микросхем без маркировки. Про Китай тогда никто и не слышал. Естественно, такие микросхемы проверялись тестом памяти, и, как ни странно, впоследствии прекрасно работали. А вот теперь вопрос - куда (и почему) девалась маркировка с них? Во времена СССР? Тогда наиболее правдоподобное объяснение было такое: после операции корпусирования партия частично проверялась. 100% результат означал отправку партии далее на операцию ненесения маркировки. Если же попадался брак, то вся партия браковалась. Но! Рачительные заводчане, образно говоря, тырили некондицию из мусорных корзин и уже сами, вручную отбраковывали, каждую микросхему. Возможно, примерно такая же схема сейчас и на китайских заводах. Врядли "мелочь" после корпусирования тотально тестируют, скорее выборочно, а значит, в случае чего просто бракуют всю партию.
  14. Может, манифесты и подтягивают что-то, только у меня с ними списки слоёв в PCB и списки листов в SCH не работали в Win7 (PCAD 2006 SP2). Удалил манифесты - всё волшебным образом заработало как надо.
  15. Доброго дня всем! Дошли руки наконец-то до опытов дубликатирования кусков готовой разводки в PCAD200x. Кому интересно - сообщаю, результат достигнут. ))) Спасибо большое всем, принявшим участие в обсуждении! В общем, наиболее подходящий вариант, это использовать команду "Edit -> Paste -> Circuit". Разобрался с галками в менюшке, в общем, если Пикаду конкретно, по пунктам, сообщить, что надо, какие цепи оставить, какие проинкрементировать (и как проинкрементировать), как поступать с позиционными обозначениями, и т.д., + предварительно проделать некоторые телодвижения в схемном редакторе, - то в итоге всё получается как надо. Прям вот как хотелось! Вот скриншот.
  16. Наверное, и KiCAD тоже ничего, но ... уже суставы пальцев срослись в нужных комбинациях. :))) PCAD намолен и замусолен до дыр (разве что за исключением некоторой экзотики, из-за которой я начал этот топик). Его бинарный *.pcb файл все понимают, отдаешь в тот же Резонит - делают платы, отдаешь на трафарет, на машину установки компонентов, и пр., - нигде никаких вопросов не возникает. Может они все и KiCAD-файлы принимают, я не знаю. Собственноручно вылизанные библиотеки с пятачками под наши хотелки... Шаблоны и заготовки печатных плат. В общем, тонны выстраданного и отъюстрированного за годы. :)) так что Альтиум я на досуге, наверное, таки поковыряю, из любопытства, но чтоб совсем с PCAD'а уходить - для меня лично не вариант. Как в той загадке: В чем преимущество секса с женой, с которой прожил вместе много лет? Ответ: Ты всегда знаешь, за какой её палец дёрнуть, чтобы она кончила.
  17. У меня работа в САПР не основное занятие, скорее побочка. Я "человек-оркестр", этакий поселковый фельдшер, специалист во всех областях медицины сразу. В настоящий момент у меня случился пациент со сложным зубом, и мне надо выдрать этот зуб имеющимися в медпункте пассатижами и моими познаниями в стоматологии. Конечно, Альтиум предоставляет самые современные и самые оснащённые стоматологические центры, с этим никто и не спорит. Но мне надо здесь и сейчас, ибо пациент орёт, и времени на закупку современного оборудования и его изучения нет. Свои платки последние лет 20 я развожу в PCAD-2ххх, и он меня удовлетворяет на 99%. Если бы я сейчас искал работу инженера-конструктора печатных плат, то, разумеется, вопрос "СтОит ли изучить Альтиум Дизайнер" был бы риторическим. Сейчас везде Альтиум, начиная с обучения студентов ВУЗов. На счет наводки на Альтиум-17 спасибо. Думаю, как-нибудь ещё раз её поставить и попробовать в свободное время начать переносить туда свои проекты, параллельно изучая. Я уже пробовал как-то, давно. Ужаснулся широтой охвата, "Добро пожаловать! Сейчас Вы будете подключены к экосистеме принципиальных схем Вселенной Альтиум..." :))))) На досуге попробую ещё. Спасибо, скачал, запустилось. Ещё раз всем ответившим большое спасибо, за наводки, за идеи, за подсказки!
  18. Согласен полностью, на 100%. С одной оговоркой - в окне DRC можно поставить не все галочки. Это понятно. Если бы мой работодатель предоставил мне оплачиваемый академический отпуск для овладевания пакетом Altium Designer - то этого топика бы не было. Или если бы в PCAD-2006 была возможность авторазводки по шаблону - топика тоже бы не было. Сейчас стоИт задача минимизации трудозатрат при разработке печатной платы с ОЧЕНЬ большим объёмом повторяющихся участков трассировки. Имея в арсенале те знания и программные пакеты, которые есть. Вот и всё. Вариант рисовать все 16 каналов и разводить все 16 каналов всё равно останется, как самый последний.
  19. А они (цепи) и не будут соответствовать. Ибо сама идея "дубликатирования готовых разведёных кусков с компонентами" противоречит устоявшейся парадигме "Принципиальная схема рождает печатную плату, а не наоборот". Важен перечень элементов, установка, монтажка, т.е. сама PCB. А на схеме просто будет прямоугольник с надписью "тут остальные 15 каналов". Я - не нашёл. Не то, что учебных курсов, даже примеров не нашёл. Как их рисовать на схеме - пожалуйста, вопросов нет. Иерархия, модуль в модуле. Но это всё схемы. А мне нужна плата.
  20. Вот-вот! Как раз от этого я и хочу уйти. Нарисовать 16 одинаковых кусков схемы труда не составит. А мне нужно в PCB-редакторе скопировать 1 (один) уже разведёный участок 15 раз, чтобы получилось 16 близнецов-братьев. С абсолютно одинаковыми дорожками, переходными ответстиями и пр., но с разными RefDes'ами. Чтобы дальше это всё пошло как обычно - герберы, сверловка, трафарет, ВОМ, машина для автоматической установки компонентов, и т.д. Принципиальная схема тут вторична. В том плане, что, например, несоответствием списка цепей SCH и PCB можно будет пренебречь.
  21. Через "Edit - Paste Circuit"? Спасибо за наводку, я этим пунктом раньше как-то и не пользовался. Почитал куцый пикадовский хелп, вроде что-то похожее на то, что мне нужно. )) Короче, пробовать надо. Большое спасибо всем ответившим! Варианты вырисовываются, буду тренироваться на простеньких кусках для начала.
  22. Вопрос с подвохом? Нарисовать 1 болт и нарисовать 16 таких же болтов, если нет функции копирования - чем отличается? Спасибо :)) Да, вполне рабочий вариант, да и R201-R216, VD301 - VD316 вполне удобоваримы для последующего восприятия. Трассировка ручная в самом P-CAD. "Модуль" - это однотипный кусок схемы (приемник, усилитель-формирователь, ограничитель и пр.), таких кусков 16. Все выхода собираются через мультиплексор, и далее обрабатываются процессором. Цель была простая - развести повторяющийся кусок схемы в PCB-редакторе 1 раз, и после 15 раз его скопировать. Да так, чтобы всё это ужилося с оставшейся схемой (проц, питание, интерфейс) на одной плате. Более того, хотелось бы (в случае чего) что-то добавлять/удалять в будущем. Ну не в каждом же усилителе ковыряться! :)) Думаю, удаляем с платы все "модули", кроме 1-го, его редактируем (проверяем зазоры, DRC), после снова копируем 15 раз.
  23. Про это тоже подумал. В плане костылей :))) Если RefDes'ы внутри модуля назначить как R1_M1, R2_M1, VD1_M1,.. то, по идее, на плате PCAD при копировании модуля создаст R1_M2, R2_M2, VD1_M2,.. R1_M3, R2_M3, VD1_M3,.. R1_M4, R2_M4, VD1_M4,.. и т.д.? Для спецификации на сборку пойдёт, а связи нужные перетяну вручную...
  24. Большое спасибо! Обязательно попробую. Есть конкретные пункты меню, значит, есть хелп, и значит, есть что искать! )) Правда, у меня сомнения, как это всё будет разводиться на печатной плате.. В PCB-редакторе понятие "модуль" есть? Ну, это по ходу станет ясно.
  25. Спасибо за информацию. Отрицательный результат - тоже результат. Подумаю, какой костылик можно будет прикрутить. Переход на Альтиум пока не вариант, ввиду отстутвия времени и заскорузлости мозгов. :)) Самое смешное, что давным-давно, в P-CAD 4.5 подобное делалось без проблем, через копипаст.
×
×
  • Создать...