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

esaulenka

Свой
  • Постов

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

  • Посещение

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

    2

Сообщения, опубликованные esaulenka


  1. 10 hours ago, Arlleex said:

    Как по феншую в C++ сделать такой трюк?

    Можно придумать, как по-феншую сделать трюк типа `upd_bit(MY_REG).set(SET_MSK).clr(CLR.MSK)`.

    А ваша задача в исходном звучании не решается, имхо. Надо эти set() / clr() в общую область видимости выносить.

     

    Можете обернуть всё это в `namespace HwRegsWrapper { ... };` и в своих драйверах дописать `using namespace HwRegWrapper;`, тогда в остальных местах эти имена не будут мешаться.

    • Upvote 1
  2. On 1/8/2024 at 8:15 AM, Harbinger said:

    А "закладки" бывают, да ещё какие. Например, дополнительное процессорное ядро с неизвестной системой команд. :crazy: Во всяком случае не соответствует ни одной из 77 архитектур, перелопаченных в процессе "раскопок".

    Оу. А где можно ознакомиться с этими исследованиями? Или они ещё более секретные, чем это дополнительное ядро?

  3. On 10/17/2023 at 9:50 AM, MrYuran said:

    Повернешь ключ, а движок продолжает работать. Пока педаль тормоза не нажмешь.

    А это говносигналка с говнозапуском, будь она неладна.

    Мне кажется, этот форум - не лучшее место, чтобы публично заявлять "я не читаю документацию". Это стандартное поведение алгоритма запуска, называется "программная нейтраль". В большинстве моделей автовключение программной нейтрали (при поднятии ручника, подозреваю) можно отключить в настройках.

  4. Мы тут с @Toxa555 чуть-чуть продвинулись с этим вопросом. Как минимум, читать он этот процессор умеет. Следующий вопрос - писать.

     

    Так вот, коллеги, у кого-нибудь есть опыт добавления нового процессора в J-Flash ? В их вики всё подробно написано - надо написать XML-ку с описанием процессора (это называется Device Support Kit) и скомпилировать ram-loader (это называется Segger Flash Loader). Загвоздка в том, что в стандартном комплекте никаких примеров нет, и для получения этого саппорт кит они предлагают написать в поддержку.

    Я нашёл, правда, какие-то loader'ы в комплекте segger SDK (когда-то старая версия пробегала здесь на форуме). Но xml-ок всё равно нету...

     

  5. 36 minutes ago, Toxa555 said:

    Все проекты с аналогичным samsung идентичны

    Вам не нужен "идентичный самсунг". Надо применить голову и из этого списка https://www.segger.com/supported-devices/search/samsung найти процессор с внутренней флешкой (в понимании сеггера. Прочерк в таблице означает внешнюю флешку), ядром ARM7 и одинаковыми адресами регистров контроллера флеш (IFC_xxx  в терминах даташита).

     

    39 minutes ago, Toxa555 said:

    Я же привёл пример, что адреса с Reserved читает, соответственно пустые

    Э-э... где я это пропустил?

     

    40 minutes ago, Toxa555 said:

    Если вы сначала смотрели тему по ссылке которую вы мне скинули, у автора тоже не читал живой блок с разными манипуляциями

    Я не очень внимательно читал. В частности, мне лень там регистрироваться, и картинки мне не показывают. Но я не могу сказать, что действия автора правильные. В частности, он зачем-то пытался засунуть штатный бутлоадер как ram-code прошивальщика. Они оба, конечно, программы для процессора, даже называются одинаково "loader", но больше никаких схожих частей не имеют. Ну и привычка излагать непонятные вещи своими словами, в процессе преиначивая половину, тоже не сильно способствует пониманию...

     

    Да, у вас есть дамп от максимально похожего блока? Я бы посмотрел...

  6. 6 minutes ago, Toxa555 said:

    Пробовал

    и что поменялось? 'error determining flash info' явно не будет ввиду отсутсвия такового запроса.

     

    8 minutes ago, Toxa555 said:

    Создавал проект просто arm7 тоже самое

    Что "то же самое" ? "просто arm7" ничего никуда записать не может. И я не говорил "arm7", я говорил "samsung", это принципиально важно.

    Попробую чуть-чуть навести порядок в вашей голове. Читать из флеш просто - выставляем нужный адрес, забираем данные. Точно так же работает чтение и запись в ОЗУ. А вот для записи во флеш нужны определённые магические действия: прошивальщик записью в определённые регистры должен запустить стирание, потом подождать (проверяя готовность чтением регистра статуса), потом инициировать запись, скопировать кусок данных, и снова подождать (опять с проверкой готовности). Стандартный подход - создание небольшой программы специально для этого, которую прошивальщик заливает в ОЗУ контроллера, и дальше только "кормит" её данными. Последовательность этих "магических действий" у каждого производителя своя (часто и между моделями есть отличия).

     

    36 minutes ago, Toxa555 said:

    С чего правильно начать хз.

    Ну попробуйте J-Mem ещё. Простейшая утилита, которая умеет только читать память, зато - любую, какую попросить. Можете ей посмотреть содержимое ОЗУ или периферийных регистров, например.

    А вообще говоря, правильно начинать с документации. Я вот полистал даташит и убедился, что флеш и ОЗУ включены всегда (эх, здравствуй 2006 год, камень примитивный совсем..). Т.е. оно ДОЛЖНО отдавать какие-то данные.

  7. 1 hour ago, Toxa555 said:

    Сделал фото по ошибке и проекту 

    Ох... Ну зачем же _фото_ ?! Есть прекрасная кнопка PrintScreen (или, на win10, ещё более прекрасная Win-Shift-S). Быстро, удобно, и гораздо более читаемо.

     

    Подозрения подтверждаются - в Сеггере считают, что память там внешняя. Походу, они что-то напутали в самсунговской номенклатуре.

    Варианты действий:

    - попробовать снять галку "Automatically detect flash memory". Записать ничего не получится, но, возможно, даст прочитать.

    - попробовать выбрать другие процессоры в настройках. Попутно очень желательно сравнивать даташиты, чтоб там алгоритм записи (и соотв. регистры) соответствовали вашему процессору. Возможно, какой-то другой самсунг подойдёт.

    - вдумчиво покурить сеггеровские доки и написать загрузчик самостоятельно. Я так не делал, но вроде б это не запредельно сложно.

    - если вы платили Сеггеру деньги (ну, вдруг?), самое время написать в техподдержку 🙂

     

    PS ссылка на даташит, если кому-то ещё будет интересно: https://www.datasheetarchive.com/datasheet?id=2342587efb1d49c7ec3feaee40e48b07fad5d9&type=P&term=s3f4a0k

  8. 2 hours ago, Toxa555 said:

    насколько я понял  yes и no, напротив адресов памяти это доступно или недоступно( не утверждаю)

    Наоборот. Reserved и DataFlash по умолчанию недоступны.

    2 hours ago, Toxa555 said:

    На плате проц и eeprom, флеш internal.

    Хм. 32k RAM + 1M Flash. Странная пропорция, но автопроизводителям виднее, не зря ж они такой проц выпустили...

     

    У меня два предположения:

    - если у вас по-прежнему вот такая картинка, то, возможно, вам нужно поискать, кто мешает отладчику

    - кажется, судя по слову CFI, J-Flash пытается искать внешнюю флешку. Либо это следствие "универсальности" джейфлеша, либо Сеггер ошиблись с моделью процессора и по факту он не поддерживается. У меня сейчас под рукой джей-флеша нет, как там настройки для этого проца выглядят?

  9. On 9/23/2023 at 5:58 PM, Toxa555 said:

    проц на связи отдает id

    Уже хорошо.

    On 9/23/2023 at 5:58 PM, Toxa555 said:

    ошибку доступа CFI

    У меня почему-то подозрение, что вы пытаетесь читать внешнюю флешку. Давайте подробности - что у вас на плате (проц + внешняя SDRAM ?), как сконфигурирован J-Flash, какие конкретно ошибки при чтении?

    On 9/23/2023 at 5:58 PM, Toxa555 said:

    Из скрина  понял что эти области без конфигурации регистров при сбросе не доступны.

    Я вижу, что отключена только data flash. Остальное, если верить даташиту, должно быть доступно.

  10. 3 hours ago, EdgeAligned said:

    Вообще, если это приемник, то тогда зачем в нем нужна обработка кнопок?

    Мой хрустальный шар подсказывает, что это кнопки для "запоминания" магической последовательности, и пользователь их должен нажимать примерно один раз в жизни устройства - когда меняет пульт. Насколько это надёжно работает - я не знаю. Скорее всего, не очень.

  11. 17 minutes ago, Дмитрий МВ said:

    Это как? На мониторе один файл .с и один .h 

    А у меня два монитора и несколько проектов, в каждом из которых по полсотни исходных файлов. Вы уж определитесь - у вас всё хорошо, или "куча варнингов, проблемы, я не понимаю".

     

    20 minutes ago, Дмитрий МВ said:

    Здесь она приравнивается к единице. 

    "приравнивается к единице" записывается как "var = 1;", а тут, с высокой вероятностью, написана ерунда.

     

    26 minutes ago, Дмитрий МВ said:

    Это где так?

    eeprom_write_block(название массива, адрес в памяти куда записать, размер массива в байтах)

    В вашем коде ДВА вызова eeprom_write_block. Найдите оба и сравните адреса, которые вы туда передаёте.

     

     

    21 minutes ago, Дмитрий МВ said:
    41 minutes ago, esaulenka said:

    Что за магия с memccpy ?

    Сравнить два массива. 

    Ну ок. Вы даже читать не пытаетесь. Вопросов больше не имею.

  12. 24 minutes ago, Дмитрий МВ said:

    1) почему dec а не def? В примерах на микроконтроллер везде пишут def.

    Потому что заголовочный файл может include'иться в несколько .c файлов одновременно. Ваш подход приведёт к образованию нескольких копий переменных, и благоприятный исход всего этого - линкер при компиляции выдаст ошибку (неблагоприятный - накомпилирует чёрт знает что).

    24 minutes ago, Дмитрий МВ said:

    3) размер в байтах? Разве не размер массива?

    Размер массива в байтах, в документации вполне явно написано. Ну и это не с++, компилятор не сможет узнать размер одного элемента.

     

    У вас, кстати, с этими eeprom read/write ещё одна ошибка. Надо указывать адреса так, чтобы они не перекрывались. Сейчас massive_open состоит из одного байта, принятого при открытии и "хвоста" из massive_close.

     

    Ещё одно "темное" место:

    		if (button_open) 
    		{
    			flag_button_open;
    		}
                    ...
    		if (flag_button_open)
    		{
                          ...

    Что такое flag_button_open ? если это переменная типа bool, то что происходит в начале?

     

    И ещё. Что за магия с memccpy ? Вы точно хотите использовать это вместо обычного memcpy ?

     

  13. Несколько замечаний. Сам алгоритм не пытался понять, чисто визуально.

    1) вы не приложили main.h, в котором, подозреваю, определены переменные. В заголовочных файлах в 99% случаев нужно делать только объявления (declaration) с префиксом extern, а не определения (definition). Ваш подход приведёт к "непонятным" проблемам, если проект разрастётся до нескольких .c файлов.

    2) в обработчике прерывания таймера вы записываете значения (не очень понятно, какие, ну да ладно) в массив без проверки значения 'i'. Это может закончится порчей памяти и очень странными ошибками.

    3) eeprom_read_block, eeprom_write_block, memcmp в качестве последнего аргумента используют размер в байтах. 'unsigned int massive[10]' в случае AVR имеет размер 20 байт.

  14. On 8/6/2023 at 8:57 AM, Harbinger said:

    похоже на нестабильную работу SWD интерфейса. Осциллограф в помощь

    Так бывает разве? Там весь обмен защищён какой-то примитивной контрольной суммой - бит чётности, что-ли. Т.е. при настабильной работе (скорость высокая, провода - метровая лапша, и т.д.) отладчик просто отваливается.

    Но я с ST-Link не очень много работал, может они "забыли" это реализовать.

  15. Похоже на собственную реализацию SWD (хотя... мне кажется, программный SWD слейв сделать довольно сложно, там интерфейс тактируется отладчиком, и устройство как-то должно за ним успевать).

    Попробуйте Connect under Reset, или как оно у куба называется. В этом случае вы точно будете общаться с "оригинальным" SWD.

     

    Но в любом случае, как-то фантастически это всё звучит...

     

  16. 1 hour ago, Olmsky said:

    Undefined symbol vMBPortTimerElapsedCallback

    находится в porttimer.c

    1 hour ago, Olmsky said:

    Undefined symbol eMBRTUInit

    находится в mbrtu.c

    1 hour ago, Olmsky said:

    Undefined symbol xMBPortEventInit

    находится в portevent.c

     

    Ни один из этих файлов в проект не включен. Какие пути вы проверяли?

     

     

    PS да, обратите внимание в каталоге port есть комплект файлов с суффиксами `_m`. У меня подозрение, что это для modbus master (без таковых - будет slave). В проект надо включать только один комплект, иначе будут новые ещё более "непонятные" сообщения линкера.

     

  17. 1 hour ago, MKdemiurg said:

    Вопрос в унификации DAP интерфейса.

    Когда-то давным-давно я использовал вышеупомянутый код Алекса для прошивки NRF52. А он его под Atmel'овские кортексы писал. Так что да, SWD довольно стандартный.

    Проблема, правда, в том, что SWD ногодрыгом получается довольно медленный. Я в итоге сделал микро-загрузчик, который SWD пишет в RAM, а вся основная прошивка передаётся по UART.

    Какая магия используется в JLink / STLink, я не разбирался.

  18. On 6/8/2023 at 8:12 PM, Сергей Борщ said:

    Не знаю, появились ли symlinkи в виндовсах после 7

    Я тут мимопроходил, но википедия говорит, что

    Quote

    Параметры безопасности по умолчанию в Windows Vista/Windows 7 запрещают администраторам без повышенных прав и всем тем, кто не является администраторами, создавать символические ссылки.
    Начиная с Windows 10 Insiders, построенном на 14972, требование о повышенных правах администратора было убрано

    Возможно, в этом была ваша проблема.

    А сами по себе симлинки в NTFS давно есть. Симлинки на каталоги появились в win2000, на файлы - в winxp.

  19. 14 hours ago, VaTiKaNeTs said:

    а можете поделиться, кодом, которым вы считали размер hex файла

    Давайте всё-таки определимся, что такое "размер файла" ?

    Количество данных, которые там содержатся? Ваша магия на awk'е, кажется, должна корректно это считать. Но я плохо понимаю, зачем это нужно, поскольку из-за потенциальных "дырок" арифметика вида стартовый адрес + кол-во данных = конечный адрес здесь не работает.

    Этот топик вы начинали с вопроса "хочу найти конечный адрес". С применением удобных инструментов это решается очень просто:

    #!/usr/bin/env python
    import sys
    from intelhex import IntelHex
    ih = IntelHex(sys.argv[1])
    print('min addr = %X, max addr = %X' % (ih.minaddr(), ih.maxaddr()))

     

  20. 4 minutes ago, VaTiKaNeTs said:

    использовать awk. Смог посчитать размер, написав простенький код

    Не надо так делать. Во-первых, в HEX файле некоторые строки - служебные, и содержат, например, адрес, с которого эта программа должна стартовать. Или наоборот, в hex-файле допустимы "дырки" в данных.
    Т.е. посчитать-то можно, но "простенький" код при изменении входных данных может внезапно сломаться, и выдавать ПОЧТИ правильный ответ.

  21. 2 hours ago, andrew_b said:

    wc, stat
    Изучайте Линукс, он рулез.

    Ну очевидно же, что оригинальный вопрос надо читать как "определить размер данных (макс. адрес) внутри хекс-файла". Можно, конечно, разобраться в формате hex и парсить его самостоятельно длинными регекспами, но в жизни есть и более интересные занятия.

     

    @VaTiKaNeTs, у вас на выбор два варианта. Можно внимательно прочитать доку к srec_cat, оно так точно умеет, я делал. Другой вопрос, что при малейшем изменении придётся её читать заново и всё переписывать, синтаксис сложных команд там совершенно нечеловеческий. Второй варинат - взять прекрасный питоновый модуль IntelHex, и написать два десятка строчек (из них половина - расчёт CRC).

  22. Just now, dimka76 said:

    Вы привели ссылку на вопрос про QPlainTextEdit, а я выше приводил ссылку на QTextEdit

    Первое утверждение (что append() - это новый абзац) - из документации на QTextEdit.

    Второе, действительно, касается QPlain..., но в первом же ответе упоминается, что в обоих случаях поведение одинаковое.

    Чем поможет ваша ссылка, я, если честно, не понял. Один вызов append() добавляет один абзац. Ну да, это логично. Для добавления нескольких можно побить добавляемый текст символами '\n'. Тоже логично. Только к обсуждаемой "проблеме" отношения примерно никакого.

  23. On 6/2/2023 at 10:46 PM, dimka76 said:

    Странно что у вас добавляется лишний перевод строки.

    Согласно документации, append() 'appends a new paragraph to the end of the text edit'.

     

    Тут надо либо делать промежуточный обработчик "протокола" и выводить уже готовые склееные строки, либо применять магию для вывода: https://stackoverflow.com/questions/13559990/how-to-append-text-to-qplaintextedit-without-adding-newline-and-keep-scroll-at (я не пробовал, просто спросил у гугла).

  24. On 5/21/2023 at 9:41 PM, kkmspb said:

    можно всё-таки не платить за коммерческую лицензию?

    Можно, конечно. И более новые тоже можно - активно денег они хотят только за всякий embedded.

    On 5/21/2023 at 9:41 PM, kkmspb said:

    И собирать статически?

    Нет, это и было, и остаётся нарушением GPL. Ну, если только вы не готовы выдавать ВСЕ исходники всем желающим - тогда можно.

×
×
  • Создать...