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

Arlleex

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    13

Arlleex стал победителем дня 20 марта

Arlleex имел наиболее популярный контент!

Репутация

129 Очень хороший

2 Подписчика

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

Контакты

  • ICQ
    Array

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

17 504 просмотра профиля
  1. Закоротил пинцетом - на 19200 заработало, но потом пинцет убрал, и оно продолжило работать)) Но периодически с закороткой и без все равно пробегают ошибки передачи. Осциллограмму в этом случае не смотрел - в понедельник теперь, наверное. Полагаю, схема не годная и ее надо менять - ставить цифровые оптопары. Кстати - у меня микросхема после оптопары на прием - инвертор с входом Шмитта. Не может она еще тоже подгаживать? В статье классная схема, конечно, только в от нету у меня на стороне МК 12В питания. И кстати, схема в цепи светодиода не открывает транзистор вообще. По крайней мере у меня в модели.
  2. R44 поставил 100 Ом, R41 на 330 Ом. R38 не трогал пока что. Заработало на 9600, общая задержка от TX до RX стала 30 мкс. Для 9600 запаса достаточно, судя по диаграмме, но для 19200 пока еще нет. А что даст увеличение R38? Мне казалось, его наоборот надо снижать (увеличивать ток светодиода).
  3. Да тогда уж проще было бы оптрон с цифровым выходом использовать. Интересно, можно ли номиналы какие-то подобрать, чтобы и эта шарманка заработала.
  4. Сделал вот так Транзисторы BC807-25, оптроны PS2805C-1-F3, желаыемые скорости до 19200. На 9600 уже не работает - полез осциллографом. Положительный фронт на TX (с МК) и на выходе петли TX+ практически без задержки. А вот отрицательный отстает аж на 27...35 мкс. Опять же, положительный фронт практически идеальный между TX/RX логической стороны, а вот спадающий фронт на RX отстает от TX уже на 70...80 мкс. Поэтому логично, что сигнал ломается и UART принимает фигню. Что за подстава? Что можно подкрутить в текущей схеме (если можно), чтобы все нормально работало?
  5. Это мне известно)) Там речь шла как раз об обычных ARM, у которых 2 глобальных маскируемых прерывания CPU: FIQ и IRQ.
  6. Потом программа чуть разрастется и в конце добавится паддинг, создавая впечатление, что массив размещен не последним.
  7. С чего она у вас в RW-области оказалась? Я проверил - мой пример размещает структуру/массив в конце бинарника, но если размер бинарника не кратен 4 байтам, он добивается нулями в конце. Если надо чтоб не добивалось - надо читать мануал, как сделать так.
  8. Да, я пропустил, для Си тут надо дописать struct. Ну или typedef struct {... } hash_type_t; описать.
  9. LR_IROM1 0x00000000 { ; load region size_region ER_IROM1 0x00000000 { ; load address = execution address *.o (NUC_INIT, +First) *(InRoot$$Sections) .ANY (+RO) *.o (hash_section, +last) } RW_RAM1 +0 { ; RW_RAM1 start address is after ER_ROM1 (было + 0 в оригинале) .ANY (+RW +ZI) } } В любом исходном .c-файле в глобальной области struct hash_type_t { char buf[64]; }; static hash_type_t const volatile fw_hash __attribute__((section("hash_section"), used)); Смотрим .map, убеждаемся что fw_hash лег в конце образа прошивки, прямо за последними данными/кодом программы Убираю used из списка атрибутов (обращений к fw_hash в программе нет) - ошибка линковки. Ставлю LTO и обзываю строчку main.o (hash_section, +last) и даже возвращаю used в определении fw_hash - ошибка линковки. Все логично. То же самое можно получить чуть другим скаттером LR_IROM1 0x00000000 { ; load region size_region ER_IROM1 0x00000000 { ; load address = execution address *.o (NUC_INIT, +First) *(InRoot$$Sections) .ANY (+RO) } ER_IROM_HASH +0 UNINIT { *.o (hash_section) } RW_RAM1 +0 { ; RW_RAM1 start address is after ER_ROM1 (было + 0 в оригинале) .ANY (+RW +ZI) } }
  10. Как хотите. Я лишь привел пример, в котором ни компилятор, ни линкер никогда не выкинет из образа fw_hash, даже если к нему нет явных обращений. Ну и чтобы с галкой LTO проект собирался. Без нее не соберется. Вернее соберется не правильно.
  11. Тогда лучше *.o (hash_section, +Last), чтобы сборка под LTO не выругалась. Ну а к строчке в коде добавить атрибут размещения и использования hash_type_t const volatile fw_hash __attribute__((section(hash_section), used));
  12. Вот говорил же, захотелось вам всадить себе пулю в колено, а теперь рубашку на лоскуты режете. У процессора есть 2 внутренних режима: режим потока и режим обработчика прерывания. При входе в прерывание активизируется последний. При выходе из обработчика вы возвращаетесь в режим потока. Предположу, что jcxz имел в виду не тупо переходить на приложение из прерывания, а в прерывании подменить LR/PC/SP фреймстека так, чтобы вернуться в привелегированном режиме потока сразу на приложение.
  13. К аббревиатурам DSP/FPGA/SoC/Real-Time обычно в придачу идет солидная финансовая составляющая и вопрос цены комплектации вторичен.
  14. Тогда задача не решаема. Ибо Вы пытаетесь считать хэш двух разных прошивок - одной с еще неизвестным хэшем, другую - с известным и записанным.
  15. А разница? Хоть 100 байт, если места хватит. Насчет блочных хэшей - тоже не вижу проблемы, т.к. блок добивается нулями как на стороне программы подготовки бинарника, так и на стороне МК при "распаковке". Можно.
×
×
  • Создать...