Sign in to follow this  
rmatveev

Идентификация прошивок

7 posts in this topic

rmatveev    1

Друзья, мне бы хотелось как-то начать "метить" прошивки, которые я заливаю в устройства на этапе разработки.

Когда-то давно, когда я еще кодил для МК51 и PIC я использовал несколько ячеек в начале памяти программ, куда автоматом записывал закодированную дату. Но это я делал с помощью своей утилиты - при компиляции я запускал свой батник, который во-первых формировал небольшой ассемблерный файлик с кодом даты, он уже линковался к основному коду и получалось у меня что-то типа такого:

            ORG          0000h
            goto         Begin

            include      'date.src'

            retw         __day
            retw         __month
            retw         __year

            ORG          0004h
            goto         INTERRUPT

Файл date.src формировался моим батником, там присваивались значения макросам __day, __month и __year.

Это ассемблер для PicMicro. Я использовал тот факт, что у него между началом пользовательского кода и единственным вектором прерывания было 4 байта, в первый байт я вставлял команду перехода на начало, а в три оставшихся байта - дату. Она была хорошо видна при считывании кода из чипа. Было очень удобно потом идентифицировать прошивку, т.к. исходники я тоже сохранял по датам. В общем, такая была доморощенная система контроля версий. Было это году в 2000-м.

Сейчас я пользуюсь Atollic TrueStudio и MBED и тоже задумался о том, как мне помечать прошивки. Может быть есть какие-то штатные способы? Или может по старинке найти в коде место, куда зашивать дату что бы ее легко было видно при считывании прошивки в ST Link Utility?

Спасибо заранее за любые мысли.

Share this post


Link to post
Share on other sites

Сразу после KEEP(*(.isr_vector)). 

. = ALIGN(0x200);
    KEEP(*(.text.METAINFO))
    . = ALIGN(4);

В текстовом виде будет легко читаться прямо из бинарного файла, и всегда на своём месте.

Share this post


Link to post
Share on other sites
rmatveev    1
23 минуты назад, AVI-crak Home сказал:

Сразу после KEEP(*(.isr_vector)). 

. = ALIGN(0x200);
    KEEP(*(.text.METAINFO))
    . = ALIGN(4);

В текстовом виде будет легко читаться прямо из бинарного файла, и всегда на своём месте.

А это в каком файле? Что-то пока ума не приложу где это. Вы не приложите скрин?

Share this post


Link to post
Share on other sites

Бюджетные Wi-Fi-/ Bluetooth-решения для IoT-применения

Обзор основной линейки поставок и новинок Espressif Systems – экономически выгодных SoC Wi-Fi-/ Bluetooth-чипов и модулей для IoT-применений: от простых портативных устройств до промышленных решений.

Подробнее...

Posted (edited)

Это скрипт линкера *.ld, вот только это запись секции, для записи файла нужно еще в этой секции прикрепить нужный файл (на асме в стартапе). Типа такого:

  .section  .Bootloader,"a",%progbits
  .type  Bootloader_os, %object

Bootloader_os:
  .incbin "123.bin"

  .size  Bootloader_os, .-Bootloader_os

И теперь уже сохранить секцию .Bootloader

    . = ALIGN(4);
    KEEP (*(.isr_vector))   /* сохранили таблицу векторов */

    . = ALIGN(4);
    _myID_Adr = .;
    KEEP (*(.Bootloader))     

_myID_Adr это адрес наших данных, можно обращаться через структуру для удобства к этому файлу.

Все под Atollic

Edited by MasterElectric

Share this post


Link to post
Share on other sites
Posted (edited)

Можно еще использовать стандартные макросы типа: __DATE__ __TIME__ примерно так:

__attribute__ ((section (".Bootloader"))) uint8_t aDate[] = __DATE__;
__attribute__ ((section (".Bootloader"))) uint8_t aTime[] = __TIME__;

На выходе имеем:

080001ac <aTime>:
 80001ac:	31 33 3a 34 36 3a 35 33 00 00 00 00                 13:46:53....

080001b8 <aDate>:
 80001b8:	4d 61 72 20 32 38 20 32 30 31 39 00                 Mar 28 2019.

 

Edited by MasterElectric

Share this post


Link to post
Share on other sites

Управляемый свет интернета вещей: Philips и протокол DALI 2.0

Полностью программируемые драйверы Philips Xitanium поддерживают все варианты регулировки яркости света и силы тока. Надежность системы значительно повышается при интеллектуальном мониторинге температуры светодиодного источника света. Разнообразие моделей в семействе обеспечивает максимальную гибкость в настройке рабочих параметров.

Подробнее...

Guest rmatveev   
Guest rmatveev
4 часа назад, MasterElectric сказал:

Можно еще использовать стандартные макросы типа: __DATE__ __TIME__ примерно так:


__attribute__ ((section (".Bootloader"))) uint8_t aDate[] = __DATE__;
__attribute__ ((section (".Bootloader"))) uint8_t aTime[] = __TIME__;

 

Круто!

А куда этот код нужно встраивать?

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By COKPOWEHEU
      Захотелось сделать устройство с минимальным потреблением. Первоначально хотел попробовать на f103, но глянул в даташит и ужаснулся: в любом режиме сна у него потребление больше, чем у AVR-ок. Ну хорошо, в standby сравнимо, но этот режим мне не подходит. Поискал аналоги, вроде бы серия L1 больше подходит для автономных устройств. Да еще там есть вкусности вроде сенсорных кнопок и управления ЖКИ (не то чтобы необходимо, но поиграться стоит).
      Собрал макетную плату с высокочастотным (8 МГц) и низкочастотным (32768) кварцами, стабилизатором, кнопками и светодиодами (из кода понятно что где висит). Запускаю RTC с пробуждением раз в секунду (в финальном устройстве просыпаться будет еще чаще) и пытаюсь увести в режим stop. Но вместо потребления в единицы микроампер получаю пол-миллиампера. Либо я какую-то периферию не отключил (да я их и не включал вроде...), либо как-то неправильно увожу в сон (вроде все по даташиту...), либо лыжи не едут.
      Вот ключевые моменты кода (остальное во вложении):
      void enable_btn(){ RCC->AHBENR |= RCC_AHBENR_GPIOBEN; GPIO_config(JBTN); //настройка на вход с минимальной скоростью, без подтяжке } void disable_all(){ GPIOA->MODER = 0xFFFFFFFF; //all to analog in GPIOB->MODER = 0xFFFFFFFF; //all to analog in GPIOC->MODER = 0xFFFFFFFF; //all to analog in GPIOD->MODER = 0xFFFFFFFF; //all to analog in GPIOA->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOB->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOC->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOD->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOA->OTYPER &=~ 0x0000FFFF; GPIOB->OTYPER &=~ 0x0000FFFF; GPIOC->OTYPER &=~ 0x0000FFFF; GPIOD->OTYPER &=~ 0x0000FFFF; RCC->AHBENR &=~ (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIODEN); clock_MS(); } void go_sleep(){ RCC->APB1ENR |= RCC_APB1ENR_PWREN;//вкл тактирование PWR SCB->SCR |= SCB_SCR_SLEEPDEEP; //для M3 разрешаем sleepdeep PWR->CR &=~PWR_CR_PDDS;//выбираем режим Power Down Deepsleep PWR->CR &=~PWR_CR_CWUF ; //очищаем wakeup flag PWR->CR |= PWR_CR_LPSDSR; //уменьшаем voltage regulator __WFI(); } ... //когда нужно заснуть disable_all(); go_sleep(); enable_btn(); Пробовал совсем не переключаться с MSI на HSE, это влияет только на рабочий режим, во сне как было 500 мкА так и остается.
      L1_sleep.rar
    • By IgnatiusF
      Появилась надобность в микроконтрллере STM32 для проектирования устройства. И вопрос вот в чем - в программировании этих стм-ов. Прочитал несколько статей по их программированию - что вообще для этого нужно. Выяснил, что в них (во всех?) есть вшитый bootloader, который может сам прошить МК.
      То есть для этого необходимо подключить какой-либо ...to UART преобразователь, а именно TX, RX, VCC и gnd к соответсвующим ногам микроконтроллера и все? Или надо еще куда-то подавать управляющий сигнал?
      Еще вопрос по поводу бутлоадера - если он занимает 8 КБ (или по разному?), то МК с 16 КБ памяти, по сути, будет иметь 8 КБ для программ?
      Datasheet я только начинаю читать и пока еще не нашел точной информации, так что за помощь буду очень признателен
    • By oner
      Нужен программист под STM32 из Питера. Задачи: Программирование под STM32 при работе в сетях сотовой и спутниковой связи с серверами.
      Работа проектная, не исключено, что с трудоустройством. Оплата - договорная.
    • By В гостях у Slime
      Здравствуйте, мне нужна помощь с подключением дисплея WG12864 к STM32F103C8T6. А именно? Я не нашёл библиотек для него, лишь только ардуиновские. Может у кого есть своя? С STM32 опыта почти нет. Так мигал светодиодом и всё, но зато ардуину я уже знаю всё. Я перерос её и мне хочется освоить стм.
    • By admin
      В ролике проведено сравнение характеристик микроконтроллеров на ядре Cortex-M7 от NXP и STM, а также удобство экосистемы для разработчиков. В тестах участвовали отладочные платы: STM32F723e-Disco и i.MX RT1050 Evaluation Kit. 
      Тестирование STM32F723e-Disco проводилось на основе материалов вебинара "Микроконтроллеры STM32F7/STM32H7 семейства Value Line"
  • Сообщения

    • А вот это и называется "холодная война". Когда нет открытых военных действий, нет ни пуль, ни взрывчатки, а идеология, и план Даллеса- этого было бы достаточно для "не русских", а вот русских- даже этим не сломить!
      Сломили, как понимаю, уже давно Вас, сломили Марка, сломили ещё многих, а вот Котёнка- они не сломили, и ещё несколько миллионов.
      Есть ещё такое понятие, как генетическая память, так у меня она включилась, а у Вас- по всей видимости нет. Вы скорее всего не русский? Я вот патриот, а Вы- всяко предатель! Присягу кому давали?
      Пионерскую, комсомольскую, военную?   А это уже начнётся, буквально месяц- полтора. Мне вот жалко своих друзей, с кем на один горшок в д/с ходили. У двух из них жёны- судьи РФ.
      А под расстрел идут в первую очередь судьи, и их семьи. Да, сначала ФССП, и их семьи, а уже потом судьи.
    • Может быть, тиристор применить? Он вообще будет вечно работать.
    • Да, на форуме простых путей не ищут. Задачка решалась путём подбора трёх мощных токоограничивающих резисторов, без использования активных элементов. В итоге @Pavel Kostrov выбрал самый дорогой вариант, видимо у него он затруднений не вызывал. А можно было взять один мощный проволочный резистор 50 Вт, подобрать сопротивление в трёх вариантах, а потом заменить их на постоянные большой мощности, про миниатюризацию речи то не было. Лучше включить последовательно три резистора, и сдалать отводы. Да и самому из нихрома можно намотать один реостат с нужными отводами. При таких токах это был бы самый простой, надёжный и понятный, для начинающего, вариант.
    • Ох, сильна же наша Родина-Мать, Танки, крейсеры да добрый свинец,
      Только кто ж теперь пойдет воевать?!
      И, опять же, наступает...
    • Это сменные светофильтры. Часто применяются в сафитах
    • Вы даже до сих пор и не поняли, чего получит?
      ТЕРРИТОРИЮ!
      А пока мы тут- территорию они не могут получить. "Смуглянку" посмотрите, может осознаете, что именно СВОИХ?