ZodiaK 0 21 июня Опубликовано 21 июня · Жалоба Добрый день. Имеется проект в KEIL 5 для контроллера ARM Cortex m3. Необходимая задача: отредактировать проект так чтобы код перезагрузки контроллера находился в определённом месте флэш памяти контроллера в независимости от сдвига старта запуска программы.. например.. стартуем программу с адреса по флешу 0x3000, получается по адресу 0x3000-0x3004 лежит SP, далее 0x3004-0x3008 первый вектор перезагрузки который указывает например на 0x12000. Проект и доп данные обсудим с исполнителем. Цена обсуждаема но думаю не менее 9-10к рублей. Связь через ЛС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 45 21 июня Опубликовано 21 июня · Жалоба Это по русски называет primary bootloader. Достаточно 1 сектора флэш с 0х8000000 и минут 20-30. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZodiaK 0 21 июня Опубликовано 21 июня (изменено) · Жалоба потрачено пару дней уже.. пока впустую.. поэтому принято решение оплатить кому то его 20-30 минут работы) Да.. есть вариант что KEIL не сможет поставить необходимы в рамках моего требования SP , визуально по bin файлу вижу...возможно потребуется другой компилятор который выполнит мою задачу, как бы это на решение исполнителя. Изменено 21 июня пользователем ZodiaK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 45 21 июня Опубликовано 21 июня · Жалоба Нужно внятно написать куда прыгать, начиная с 0х800000. Например: Считываем из 0x8003000 SP и PC и переходим. Какой процессор ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZodiaK 0 21 июня Опубликовано 21 июня (изменено) · Жалоба EFM32LG395..ну или EFM32LG990, не суть важно .. смотри, по факту этот код загрузится через "жестко" спроектированный бутлоадер.. Изменено 21 июня пользователем ZodiaK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 45 21 июня Опубликовано 21 июня · Жалоба 2 minutes ago, ZodiaK said: EFM32LG995.. смотри, по факту этот код загрузится через "жестко" спроектированный бутлоадер.. Что такое "жестко" спроектированный бутлоадер ? Куда 0х800000 указывает ? Хотя что я пытаю - специалист возьмётся и всё выяснит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZodiaK 0 21 июня Опубликовано 21 июня (изменено) · Жалоба ну вот.. уже один исполнитель отпал, увы. Куда 0х800000 указывает ? - это код бутлоадера, и куда он кажет большой вопрос.. мне необходим запуск с 0x8003000 ну или 0x8006000 не суть важно, важно чтобы следующий вектор перезагрузки указывал на точно зафиксированный в коде код вектора перезагрузки например на 0x12000 Изменено 21 июня пользователем ZodiaK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 45 21 июня Опубликовано 21 июня · Жалоба Ну так перепишите вектор 0x800000 на 3000 или 6000. Или в 0х800000 укажите 0х12000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZodiaK 0 21 июня Опубликовано 21 июня · Жалоба есть пример? я допустим реально непонимаю. Допустим в MPLAB можно было поставить на функцию ORG 0x3000 и всё эта функция фиксируется компилятором на своем месте в коде.. Здесь же я просто непонимаю как это реализовать.. особенно для стартового файла startup_efm32lg.s, потому как мысль такая что в нём необходимо ставить где будет зафиксирован код во флеши Reseta. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 45 21 июня Опубликовано 21 июня · Жалоба И всё будет находится с 0х3000. не надо скаттер руками трогать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZodiaK 0 21 июня Опубликовано 21 июня (изменено) · Жалоба не катит именно это вариант, увы.. он форматирует код с 0x3000 а вот вектор перезагрузки он поставит куда компилятору угодно в зависимости от степени оптимизации кода. т.е вектор стоит на 0x3004-0x3008, а вот значение вектора показывает на куда угодно компилятору. Изменено 21 июня пользователем ZodiaK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 45 21 июня Опубликовано 21 июня · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZodiaK 0 21 июня Опубликовано 21 июня (изменено) · Жалоба это где надо ручками поправить? в каком файле? ; Reset Handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP отсюда? Изменено 21 июня пользователем ZodiaK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 45 21 июня Опубликовано 21 июня · Жалоба 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) Сектор стирания 2К = 0х800. Вот и все дела. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZodiaK 0 21 июня Опубликовано 21 июня · Жалоба не катит снова.. смотри код меняет саму функцию Reseta чтобы после рестарта она переходила в область загрузчика, у меня не так.. мне необходимо чтобы функция Reset_Handler находилась физически по адресу во флеши на 0x12000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться