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

Лидеры

  1. Arlleex

    Arlleex

    Свой


    • Баллы

      2

    • Постов

      6 333


  2. sazh

    sazh

    Свой


    • Баллы

      1

    • Постов

      2 550


  3. sergeeff

    sergeeff

    Свой


    • Баллы

      1

    • Постов

      1 469


  4. MikleKlinkovsky

    MikleKlinkovsky

    Свой


    • Баллы

      1

    • Постов

      2 004


Популярный контент

Показан контент с высокой репутацией 03.07.2023 во всех областях

  1. Это отрубание хвоста по частям: Заменить на: CAN_TMI(CAN0, mailbox_number) = 0; // Transmit disable. CAN_TMP(CAN0, mailbox_number) = TxBufElement->NumOfData; // Set the data length. //---Set the data---// CAN_TMDATA0(CAN0, mailbox_number) = *(uint32_t*)&(TxBufElement->Data[0]); CAN_TMDATA1(CAN0, mailbox_number) = *(uint32_t*)&(TxBufElement->Data[4]); CAN_TMI(CAN0, mailbox_number) = CAN_TMI_TEN | (uint32_t)(TMI_EFID(TxBufElement->EFID) | // The frame identifier. CAN_FF_EXTENDED | // CAN frame format. CAN_FT_DATA); // Frame type. Кстати, эта строчка содержит баг: потенциально чревата. Если исходный mailbox содержал в битах: FF, FT, EFID, SFID исходные значения отличные от записываемых (или от 0), то получите неверное содержимое регистра. Что за маниакальная одержимость этими '|=' и '&=' ??? Сами себе грабли на ровном месте раскладываете ими.....
    1 балл
  2. Не, это опять не правильно. Он же не чистится перед этим.
    1 балл
  3. Во-первых, строчка косячная. Во-вторых, несколько бесполезная, ибо Попробуйте стабильно поймать баг, когда он 100% проявляется. А потом, когда в функцию попадает структура с 7 или 8 байтами данных, берите эти данные не из этой структуры, а, например, заранее заготовленную статическую строчку 1, 2, 3, 4, 5, 6, 7, 8. И DLC тоже не из структуры берите, а руками забивайте ровно 8.
    1 балл
  4. Сигнала с CONF_DONE недостаточно. Он гуляет по 0 и 1. Пины I/O FPGA переходят в пользовательские согласно проекта только после временного интервала инициализации после конфигурации. Стандартное и проверенное решение при использовании FPGA для внешнего ресета это активирование в проекте пина INIT_DONE. Пины CONF_DONE и активированный INIT_DONE - с открытым стоком, поэтому должны быть подтянуты к питанию через резисторы. Ну и нужна букашка внешняя 2И. Чтобы реализовать функцию (CONF_DONE && INIT_DONE). Эта комбинация гарантировано даст уровень нуля в интервале от включения питания до активирования пинов плис. 2. Можно задействовать пользовательский пин. Опираясь на факт того, что Ваша плис fpga реализована на базе статической ячейки памяти. И после конфигурации и инициализации регистровая структура устанавливается гарантировано в 0. Можно после инициализации пользовательский пин удержать в нуле сколько пожелаете. Однократно. Можно выставить любое значения регистра по включению, опираясь на этот факт. (триггер по включению питания в нуле. если по включению питания нужна единица, на входе и выходе этого триггера ставите инвертор). power_up.v
    1 балл
  5. Или записать допустимые замены в КД, начиная с переченя элементов. В графе Примечание ставите номер со скобкой, а в конце перечня в нумерованном списке пишете "допускается замена на [обозначение элемента]". Далее всё повторяется в спецификации и ведомости покупных. PS Но, лично я, когда понадобится подобное, предпочту написать СТП по ведению ведомости замен. ГОСТ 2.105 глава ТРЕБОВАНИЯ К ТЕКСТОВЫМ ДОКУМЕНТАМ, СОДЕРЖАЩИМ ТЕКСТ, РАЗБИТЫЙ НА ГРАФЫ ;)
    1 балл
  6. Учтите, что ревизия E даташита на этот "свежий" контроллер датирована 2003 годом, а были ещё ревизии A,B,C,D. Т.е. появился он в районе 2000 года и в соответствии с циклом поддержки 10 лет его давно пора снимать с производства. НИИ, которое использует 51 контроллеры на С - место гиблое, бегите оттуда скорее, пока вас не заставили прогать КР580ВМ80 на С#. Новых знаний и опыта вы там точно не наберётесь. Язык С в микроконтроллерах если и нужен, то для реализации достаточно сложных функций и алгоритмов, которые не хочечься заново писать на ассемблере. Например, хочеться реализовать быстрое преобразование Фурье или поднять подобие стека TCP/IP. А если у вас 256 байт ОЗУ и 8192 Байт ПЗУ, то какие сложные алгоритмы можно реализовать? И будет ли при этом текст программы на C занимать меньше места. Именно поэтому нормальных компиляторов Си для MCS-51 вы не найдёте.
    1 балл
  7. Есть нюанс между Keil и SDCC. Они по разному упаковывают многобайтные переменные типа int. Если память не изменяет, SDCC - little-endian, Кeil - big-endian. Будете прикручивать заголовки - учтите.
    1 балл
×
×
  • Создать...