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

yaghtn

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о yaghtn

  • Звание
    Участник
    Участник

Контакты

  • Сайт
    Array
  • ICQ
    Array

Посетители профиля

1 690 просмотров профиля
  1. Около года назад собирал новый комп, переезжал с i7-3770 на 12600k. Тоже хотел 128. Воткнул четыре неплохих модуля памяти по 32гб ddr5-5600, но завелись они заметно ниже даже номинальных 4800, где-то на 4200 емнип. Оказалось, память в четырех слотах будет работать хуже чем в двух. Два дополнительных слота делают больше для красоты. Более того, самые оверклокерские материнки встречаются и с двумя слотами. Ниже - видео с картинками, можно понять в чём там суть. В итоге пришлось вернуть два модуля памяти обратно в магазин, и успокоиться на 64Гб на 5600. Если бы я знал про такой подводный камень, то не целился бы на скоростную dd5, а выбрал бы ddr4, и был бы поспокойнее насчет скорости шины. Да, собирал из обычного магазинного "геймерского" железа. В материнках серверных и для раб.станций, вероятно, набивка памятью всех слотов может работать иначе. Подскажите плз, если это так. Хммм, спасибо: Сильно запнулся за фразу "при использовании модулей объемом 12 ГБ и 24 ГБ" Я раньше как-то не встречял модулей с подобными некруглыми размерами А теперь вдруг узрел наличие в магазинах комплектов памяти 2x48Гб Видимо сегодня это максимальный объём на обычном геймерском железе
  2. Если возникают вопросы "как это рассчитать и как сделать" то наверное не надо сразу контроллер для питания. Там много чего поналеплено, сходу не разобраться. Может будет проще понять "на рассыпухе". У техаса была такая публикация про шим-модулятор, SLAU508. Там отдельно генератор треугольника, отдельно модулятор на основе компаратора, охваченный общей аналоговой ООС для улучшения линейности
  3. Хм. Видимо, мне нужно подготовить что-то более весомое, чем анекдот "преждевременная оптимизация - корень всех зол". Вы настолько явно кладёте на разные чаши весов читаемость и быстродействие, что спасибо за науку
  4. А может быть и нет. А может быть работает wired-or или wand... Про это нужно знать и вспоминать каждый раз чтобы не писать лишний else перед вторым if? В любом случае, лучше бы код был понятен и работал явно без необходимости привлечения лишних сущностей. При написании/чтении кода и так приходится много чего держать в голове, и лишние сущности могут вытеснить из головы что-то нужное сейчас, что приведёт к ошибкам. Кем кем... "лично мне" - я так и написал. В порядке обмена опытом хочу обратить внимание читающих, что если перед ними стоит задача написать хороший читаемый код (а не стать незаменимым разработчиком, и не подкинуть побольше работы тестировщикам), то можно обратиться к опыту смежных областей. К примеру, Python как бы намекает нам "Явное лучше неявного". Я бы переписал логику первого блока, если не трогать именование, например так: always_ff@(posedge ck, negedge reset_l) if(~reset_l) state <= sA; else begin if(state == sA)begin if(~go_l) state <= sB; end else begin //if(state==sB) if(inAeq) state <= sA; else //default state <= sB; end end
  5. Лично мне не нравится, что эти две if-конструкции выполняются параллельно, когда желательно чтобы они были взаимоисключающими. И ещё, блок кода 12-22 делает предположения о списке возможных состояний переменной state. Если сглючит, и state влетит в состояние отличное от sA sB, то блок перестанет работать вплоть до пересброса. Короче, я уверен что после всех case-условий нужно добавлять default Описывать машину как список правил перехода В состояния, или описывать как список перехода ИЗ состояний? Мне ближе второе. При первом подходе подозреваю больше возможностей для ошибок. Бросается в глаза смешивание стилей именования, ВерблюжийСтиль и через_подчеркивание. Это признак говнокода. Как и отсутствие самодескриптивности кода. Выражения sA не отличается по стилю от inAeq. Что такое sA - переменная, константа? Можно только делать предположения по контексту. Неужто нельзя написать STATE_A ? Таб должен быть 8 пробелов, тогда слишком сложные конструкции перестают влезать в экран, и просятся к разбиению на строки. Короче говоря, говнокод как он есть. Если глючит, то смотреть-переписывать нужно именно эти строки
  6. Для TI есть DSP/BIOS, это ОСРВ в том числе с вытесняющей многозадачностью. Вроде как процедуры прошиты сразу в ROM сигнального процессора, наряду с другими типовыми функциями, такими как bootloader и функции сигнальной обработки
  7. Быть может стоит рассмотреть вариант, когда тип данных и размер хранится в области данных файла, а в таблице только адрес начала файла? Хочу обратить ваше внимание, что "поле типа" в структуре с++ является известным анти-паттерном. Шаблоном, указывающим что что-то делается неправильно. А вообще, вижу тут несколько путей: 1. Изучить С++ вплоть до платиновых вопросов "сериализация объектов в эмбеде" и "как разместить vtable в ROM" 2. Построить собственный ООП на голом С, но с блек-джеком и ROM-данными 3. Изучить как устроены файловые системы в ОС, и во взрослых типа линукса, и в легких RTOS В итоге придёте к выводу, что на самом деле вы ищете баланс между быстродействием, требуемым объемом ОЗУ и высокоуровневостью используемого языка программирования.
  8. Использую dblib Excel. Офис 32 бита. Решение нашлось на сайте альтиума: https://www.altium.com/documentation/ru/18.0/display/ADES/Using+Database+Libraries+with+32-bit+and+64-bit+Altium+Design+Software+on+the+same+Computer Рекомендуют установить MS Access Engine, причем устанавливать из командной строки обязательно с ключом /passive Мне помогло. Альтиум x64 + excel x32 работает. Попробуйте, может взлетит и у вас. Расскажите пожалуйста, чем создавали-редактировали базу данных sqlite?
  9. Мне видится тут немалая вероятность выстрелить себе в ногу. В примере vault память внешняя, и значения будут сначала записаны тем же кодом, который будет их впоследствии читать, в принципе норм. Но если решается задача "у нас ембед, поэтому RAM мало а ROM много. Хотим держать данные в ROM", то необходимо помнить, что значения будут разложены по адресам линкером в процессе сборки проекта, а только потом читаться нашим кодом, и всё может расползтись. Выравнивание, сортировка линкером объектов по имени, по типу, по размеру.. Вот это вот всё. Хорошо бы строже расписать условие задачи. Нужно массив элементов связного списка? Или не односвязный список? Что тогда, Дерево, ещё что? Но взаимосвязи между элементами уже образуют структуру данных, зачем тогда массив? Или зачем взаимосвязи, когда есть массив?
  10. Частота кварца будет определяться именно логикой проекта. Частота - та, которая нужна вам. CPLD не требует какой-то особой частоты. Подозреваю, вам нужно уяснить, что CPLD это то же самое, что и схема на микросхемах логики 74-ой серии, размещенная на плате площадью 1 квадратный метр. Ваш вопрос мало отличается от вопроса "Какая частота нужна для микросхем 74hc00/74hc74 и на какую ножку её подавать?"
  11. Можно, используя классический препроцессор Си. "Под капотом" будет довольно монстроузно. И строго говоря, не на этапе линковки, а перед компиляцией, на этапе препроцессирования исходного кода. Чтобы понять, как это сделать, посоветую заглянуть в исходники библиотеки boost, подпапку preprocessor. Начать разбираться можно начать прямо с файла boost/preprocessor/array.hpp Абстрактно, сначала сформировать последовательность значений на сколько должно следующее значение отличаться от предыдущих, затем "проинтегрировать", то есть сформировать новую последовательность где значение будет суммой всех предыдущих и проинициализировать массив тем, что получилось. А вообще, если не получается решить задачу привычными способами и освоенными инструментами, бывает полезно подняться на уровень выше и пересмотреть условия задачи. Ответить на вопрос "Зачем?"
  12. Ещё сильно замедлять может функция Cross Select Mode. А вообще, недавно делал проект немаленький на ad18, примерно 1000 компонентов на 5-6дм^2 плате. Нормально завершить его удалось лишь после замены в компьютере HDD на SSD.
  13. Быть может не обязательно использовать именно case? Три ветвления всего же: Если от 0 до 70, если 71, и default. Если в диапазоне - то инкрементировать, в 71 - стоять на месте
  14. А кому из них аналогичнее? Возврат из прерывания в MQX происходит как в uC/OS-II через выяснение и переключение на самую приоритетную из задач? Или как во FreeRTOS, прерывание может вернуть управление именно туда, что прервалось, без переключений контекста? MQX сейчас доступен для чего-либо, кроме kinetis? Судя по тому, что freescale.com редиректит на nxp.com, стоит ли ждать MQX для NXP?
×
×
  • Создать...