Jump to content

    

yaghtn

Свой
  • Content Count

    62
  • Joined

  • Last visited

Community Reputation

0 Обычный

About yaghtn

  • Rank
    Участник

Контакты

  • Сайт
    http://
  • ICQ
    108906009

Информация

  • Город
    Чебоксары

Recent Profile Visitors

1105 profile views
  1. Хм. Видимо, мне нужно подготовить что-то более весомое, чем анекдот "преждевременная оптимизация - корень всех зол". Вы настолько явно кладёте на разные чаши весов читаемость и быстродействие, что спасибо за науку
  2. А может быть и нет. А может быть работает 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
  3. Лично мне не нравится, что эти две if-конструкции выполняются параллельно, когда желательно чтобы они были взаимоисключающими. И ещё, блок кода 12-22 делает предположения о списке возможных состояний переменной state. Если сглючит, и state влетит в состояние отличное от sA sB, то блок перестанет работать вплоть до пересброса. Короче, я уверен что после всех case-условий нужно добавлять default Описывать машину как список правил перехода В состояния, или описывать как список перехода ИЗ состояний? Мне ближе второе. При первом подходе подозреваю больше возможностей для ошибок. Бросается в глаза смешивание стилей именования, ВерблюжийСтиль и через_подчеркивание. Это признак говнокода. Как и отсутствие самодескриптивности кода. Выражения sA не отличается по стилю от inAeq. Что такое sA - переменная, константа? Можно только делать предположения по контексту. Неужто нельзя написать STATE_A ? Таб должен быть 8 пробелов, тогда слишком сложные конструкции перестают влезать в экран, и просятся к разбиению на строки. Короче говоря, говнокод как он есть. Если глючит, то смотреть-переписывать нужно именно эти строки
  4. RTOS для TMS320C5532

    Для TI есть DSP/BIOS, это ОСРВ в том числе с вытесняющей многозадачностью. Вроде как процедуры прошиты сразу в ROM сигнального процессора, наряду с другими типовыми функциями, такими как bootloader и функции сигнальной обработки
  5. Быть может стоит рассмотреть вариант, когда тип данных и размер хранится в области данных файла, а в таблице только адрес начала файла? Хочу обратить ваше внимание, что "поле типа" в структуре с++ является известным анти-паттерном. Шаблоном, указывающим что что-то делается неправильно. А вообще, вижу тут несколько путей: 1. Изучить С++ вплоть до платиновых вопросов "сериализация объектов в эмбеде" и "как разместить vtable в ROM" 2. Построить собственный ООП на голом С, но с блек-джеком и ROM-данными 3. Изучить как устроены файловые системы в ОС, и во взрослых типа линукса, и в легких RTOS В итоге придёте к выводу, что на самом деле вы ищете баланс между быстродействием, требуемым объемом ОЗУ и высокоуровневостью используемого языка программирования.
  6. Использую 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?
  7. Мне видится тут немалая вероятность выстрелить себе в ногу. В примере vault память внешняя, и значения будут сначала записаны тем же кодом, который будет их впоследствии читать, в принципе норм. Но если решается задача "у нас ембед, поэтому RAM мало а ROM много. Хотим держать данные в ROM", то необходимо помнить, что значения будут разложены по адресам линкером в процессе сборки проекта, а только потом читаться нашим кодом, и всё может расползтись. Выравнивание, сортировка линкером объектов по имени, по типу, по размеру.. Вот это вот всё. Хорошо бы строже расписать условие задачи. Нужно массив элементов связного списка? Или не односвязный список? Что тогда, Дерево, ещё что? Но взаимосвязи между элементами уже образуют структуру данных, зачем тогда массив? Или зачем взаимосвязи, когда есть массив?
  8. Частота кварца будет определяться именно логикой проекта. Частота - та, которая нужна вам. CPLD не требует какой-то особой частоты. Подозреваю, вам нужно уяснить, что CPLD это то же самое, что и схема на микросхемах логики 74-ой серии, размещенная на плате площадью 1 квадратный метр. Ваш вопрос мало отличается от вопроса "Какая частота нужна для микросхем 74hc00/74hc74 и на какую ножку её подавать?"
  9. Можно, используя классический препроцессор Си. "Под капотом" будет довольно монстроузно. И строго говоря, не на этапе линковки, а перед компиляцией, на этапе препроцессирования исходного кода. Чтобы понять, как это сделать, посоветую заглянуть в исходники библиотеки boost, подпапку preprocessor. Начать разбираться можно начать прямо с файла boost/preprocessor/array.hpp Абстрактно, сначала сформировать последовательность значений на сколько должно следующее значение отличаться от предыдущих, затем "проинтегрировать", то есть сформировать новую последовательность где значение будет суммой всех предыдущих и проинициализировать массив тем, что получилось. А вообще, если не получается решить задачу привычными способами и освоенными инструментами, бывает полезно подняться на уровень выше и пересмотреть условия задачи. Ответить на вопрос "Зачем?"
  10. Ещё сильно замедлять может функция Cross Select Mode. А вообще, недавно делал проект немаленький на ad18, примерно 1000 компонентов на 5-6дм^2 плате. Нормально завершить его удалось лишь после замены в компьютере HDD на SSD.
  11. Быть может не обязательно использовать именно case? Три ветвления всего же: Если от 0 до 70, если 71, и default. Если в диапазоне - то инкрементировать, в 71 - стоять на месте
  12. Цитата(AlexandrY @ Jun 6 2016, 15:38) MQX по движку аналогична uC/OS и freeRTOS. А кому из них аналогичнее? Возврат из прерывания в MQX происходит как в uC/OS-II через выяснение и переключение на самую приоритетную из задач? Или как во FreeRTOS, прерывание может вернуть управление именно туда, что прервалось, без переключений контекста? MQX сейчас доступен для чего-либо, кроме kinetis? Судя по тому, что freescale.com редиректит на nxp.com, стоит ли ждать MQX для NXP?
  13. Скиньте ТЗ на ivan35635@yandex.ru
  14. Цитата(kefalle @ Jun 26 2015, 14:42) Товарищи, подскажите, у меня есть проект SPI синхронного от внутреннего генератора. Регитр состояния и регистр значения (4 байта) сделан на verilog обычным reg [7:0]. На MAX II работает нормально. А вот при портирования проекта на Lattice дурят значения Покажите код. Конкретно какая Lattice? Какая скорость SPI?
  15. Цитата(des00 @ Jun 22 2015, 16:06) смотрите : Сразу стало ясно. Прозрачность рабочего регистра spi для выходных данных слейва по ald=nCS=1 в покое и сдвигание данных по slck при транзакции. Просто блестящая в своей простоте идея. Спасибо. Моя проблема в том, что я хотел описать на верилоге, чтобы тот же код использовать ещё и для max3000/7000. но теперь стало ясно, для начала надо вдумчиво изучить Алтеровский "Coding Guidelines" Вот было интересное обсуждение около года назад на тему "dffea -- verilog" http://electronix.ru/forum/index.php?s=&am...t&p=1276608