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

Редактирование Scatter файла KEIL 5

Добрый день. Имеется проект в KEIL 5 для контроллера ARM Cortex m3.

Необходимая задача: отредактировать проект так чтобы код перезагрузки контроллера находился в определённом месте флэш памяти контроллера в независимости от сдвига старта запуска программы.. например.. стартуем программу с адреса по флешу 0x3000, получается по адресу 0x3000-0x3004 лежит SP, далее 0x3004-0x3008 первый вектор перезагрузки который указывает например на 0x12000. Проект и доп данные обсудим с исполнителем. Цена обсуждаема но думаю не менее 9-10к рублей.  Связь через ЛС. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это по русски называет primary bootloader. Достаточно 1 сектора флэш с 0х8000000 и минут 20-30.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

потрачено пару дней уже.. пока впустую.. поэтому принято решение оплатить кому то его 20-30 минут работы) Да.. есть вариант что KEIL не сможет поставить необходимы в рамках моего требования SP , визуально по bin файлу вижу...возможно потребуется другой компилятор который выполнит мою задачу, как бы это  на решение исполнителя. 

 

 

Изменено пользователем ZodiaK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно внятно написать куда прыгать, начиная с 0х800000.
Например: Считываем из 0x8003000 SP и PC и переходим.

Какой процессор ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

EFM32LG395..ну или EFM32LG990, не суть важно .. смотри, по факту этот код загрузится через "жестко" спроектированный бутлоадер.. 

 

Изменено пользователем ZodiaK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, ZodiaK said:

EFM32LG995.. смотри, по факту этот код загрузится через "жестко" спроектированный бутлоадер.. 

 

 

Что такое "жестко" спроектированный бутлоадер ?
Куда 0х800000 указывает ?
Хотя что я пытаю - специалист возьмётся и всё выяснит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну вот.. уже один исполнитель отпал, увы. 

Куда 0х800000 указывает ? - это код бутлоадера,  и куда он кажет большой вопрос.. мне необходим запуск с 0x8003000 ну или 0x8006000 не суть важно, важно чтобы следующий вектор перезагрузки указывал на точно зафиксированный в коде код вектора перезагрузки например на 0x12000

Изменено пользователем ZodiaK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так перепишите вектор 0x800000 на 3000 или 6000. Или в 0х800000 укажите 0х12000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть пример? я допустим реально непонимаю. Допустим в MPLAB можно было поставить на функцию ORG 0x3000 и всё эта функция фиксируется компилятором на своем месте в коде..  Здесь же я просто непонимаю как это реализовать.. особенно для стартового файла startup_efm32lg.s, потому как мысль такая что в нём необходимо ставить где будет зафиксирован код во флеши Reseta. 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

image.png.5aff16032b69221f3226b96179e62925.png

И всё будет находится с 0х3000. не надо скаттер руками трогать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не катит именно это вариант, увы.. он форматирует код с 0x3000 а вот вектор перезагрузки он поставит куда компилятору угодно в зависимости от степени оптимизации кода.  т.е вектор стоит на 0x3004-0x3008, а вот значение вектора показывает на куда угодно компилятору.

Изменено пользователем ZodiaK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
; Primary Bootloader
                LDR        R0, =0x8003000
                LDR        R1, [R0, #00]
                MSR        MSP, R1
                LDR        R1, [R0, #04]
                BX        R1
                ENDP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это где надо ручками поправить? в каком файле?

; Reset Handler

Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  SystemInit
                IMPORT  __main
                LDR     R0, =SystemInit
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP

 

отсюда?

 

Изменено пользователем ZodiaK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, ZodiaK said:

это где надо ручками поправить? в каком файле?

; Reset Handler

Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  SystemInit
                IMPORT  __main
                LDR     R0, =SystemInit
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP

 

отсюда?

 

 

Сделать проект, в его startup_efm32lg.s поменять и сделать размер в IROM1 минимальный (не знаю какой там размер сектора у LG995)

image.thumb.png.c67738df199119307be8516d55a0d02a.png

image.png.28af66bf9391be0bcc67faebb4df6571.png

Сектор стирания 2К = 0х800. Вот и все дела.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не катит снова.. смотри код меняет саму функцию Reseta чтобы после рестарта она переходила  в область загрузчика, у меня не так.. мне необходимо чтобы функция  Reset_Handler находилась физически по адресу во флеши на 0x12000 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

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

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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