-
- Всем спасибо. Может кому пригодится, сделал так: Nikolaev_Aleksey(1093 знак., 08.07.2022 09:52)
- Перемудрили. Не надо лезть в JLinkSettings.ini. Пишете в отдельном
файле и говорите использовать его. VladislavS.(316 знак., 09.07.2022 11:14, картинка)
- именно об этом я и сказал изначально Aleksey_75(1 знак., 09.07.2022 11:53, ссылка)
- Перемудрили. Не надо лезть в JLinkSettings.ini. Пишете в отдельном
файле и говорите использовать его. VladislavS.(316 знак., 09.07.2022 11:14, картинка)
- scatter file.... это эти затейники так скрипт линкера называют? - RED_DRAGON(07.07.2022 16:48)
- вторым пунктом таблицы векторов идет адрес с которого надо таки стартовать. Он поменян? - RED_DRAGON(07.07.2022 16:46)
- я чего-то тоже попрыгал с бутлодером. Но так и остался на варианте,
что для него перезаписываю зону векторов с 0x08000000 по
0x08000800. А сам бутлодер работате с 0x08030000. Потом после
перепрошивки возвращаю для основной программы ее зону. - Лaгyнoв(07.07.2022 15:42)
- Дык даже из названия "boot loader" загрузчик при включении
запускается первым. А тут первой запускается основная программа, а
"загрузчик" вызывается как вспомогательная. Для чего вообще нужен
такой "загрузчик"? Все его функции может выполнять и основная
программа. - SciFi(07.07.2022 15:49)
- ну у меня ж самописный. Ну и да, по смыслу как бы не "boot loader".
А просто встроенный прошивальщик. - Лaгyнoв(07.07.2022 16:04)
- Задача-максимум — реализовать сценарий перепрошивки, исключающий
окирпичивание девайса. Задача уровнем чуть пониже — сильно
ограничить возможность окирпичивания (как я понял, у вас именно
так). Получилось несколько нетрадиционно, но если работает, то
почему бы и нет? :-) - SciFi(07.07.2022 16:08)
- из примерно 100 перепрошивок (часть с флэшки, часть по GSM) было 3
(три) случая "окирпичивания". Как раз вроде как порчи зоны
векторов. Вероятно память не стерлась перед записью. Тем более я
это не проверял в ранних версиях. - Лaгyнoв(07.07.2022 16:15)
- Поэтому бутлодырь по возможности надо делать без прерываний. Ему
эффективно работать необязательно. - mr-x(07.07.2022 16:29)
- во первых строках у меня сразу стоит - _disable_irq (); Но таблицу всё равно надо править - Лaгyнoв(07.07.2022 17:06)
- Там нет никакой проблемы сделать отдельную таблицу векторов для загрузчика. - SciFi(07.07.2022 16:34)
- Вот. А надо было сначала в пустыне обсудить, как правильнее делать
схему перепрошивки... - SciFi(07.07.2022 16:20)
- вероятно - да. - Лaгyнoв(07.07.2022 17:06)
- Поэтому бутлодырь по возможности надо делать без прерываний. Ему
эффективно работать необязательно. - mr-x(07.07.2022 16:29)
- из примерно 100 перепрошивок (часть с флэшки, часть по GSM) было 3
(три) случая "окирпичивания". Как раз вроде как порчи зоны
векторов. Вероятно память не стерлась перед записью. Тем более я
это не проверял в ранних версиях. - Лaгyнoв(07.07.2022 16:15)
- Задача-максимум — реализовать сценарий перепрошивки, исключающий
окирпичивание девайса. Задача уровнем чуть пониже — сильно
ограничить возможность окирпичивания (как я понял, у вас именно
так). Получилось несколько нетрадиционно, но если работает, то
почему бы и нет? :-) - SciFi(07.07.2022 16:08)
- ну у меня ж самописный. Ну и да, по смыслу как бы не "boot loader".
А просто встроенный прошивальщик. - Лaгyнoв(07.07.2022 16:04)
- Дык даже из названия "boot loader" загрузчик при включении
запускается первым. А тут первой запускается основная программа, а
"загрузчик" вызывается как вспомогательная. Для чего вообще нужен
такой "загрузчик"? Все его функции может выполнять и основная
программа. - SciFi(07.07.2022 15:49)
- Таблицу векторов прерывания оставьте по адресу 0x08000000, а само приложение куда хотите. Только не сильно понятно зачем отлаживаться в реальных адресах, что это даёт? Я вообще обычно в SRAM отлаживаюсь, а релиз сразу во flash шью. - VladislavS.(07.07.2022 14:56)
- А разве VECT_TAB_OFFSET не должно быть 0x10000? - SciFi(07.07.2022 14:38)
- теперь уже засомневался. Nikolaev_Aleksey(1 знак., 07.07.2022 14:44, картинка)
- Это не абсолютный адрес, а просто макрос. Не надо его путать с сами регистром который именуется "смещением" лишь в силу историчности... POV(95 знак., 07.07.2022 14:51)
- Не надо сомневаться. Там должно быть 0x10000. - SciFi(07.07.2022 14:47)
- Вы оказались правы - Nikolaev_Aleksey(08.07.2022 09:55)
- у кортексов шаг смещения можно делать с интервалом кратно 0x200 - Aleksey_75(07.07.2022 14:48)
- Как повезло, что число 0x10000 кратно числу 0x200 :-) - SciFi(07.07.2022 14:50)
- теперь уже засомневался. Nikolaev_Aleksey(1 знак., 07.07.2022 14:44, картинка)
- Так стартует всё равно с 0x08000000. Там должно быть что-то что
передаст управление... у меня там загрузчик. - POV(07.07.2022 14:32)
- Я делаю так в проектах с СМ4. shan(2382 знак., 08.07.2022 23:41)
- Т.е. изменить адрес нельзя? У меня тоже загрузчик, но хотелось бы
оставить в основном коде отладку по тем же адресам , как и в
конечном проекте. Т.е. отладку без загрузчика. - Nikolaev_Aleksey(07.07.2022 14:36)
- Отладка в кейле работает и при загрузчике. При отладке приложения работать в проекте приложения. При отладке загрузчика - проект загрузчика. Можно сразу download из кейла поправленную прошивку. Чтобы каждый раз не вычислять и прописывать адрес конца и КС и загрузчик не проверял кс пишу вместо адреса конца приложения 0хЕЕЕЕЕЕЕЕ - shan1(09.07.2022 10:36, )
- Я делаю вот так: Загрузчик занимает адреса 0..0xFFFF. Один и тот же проект. Для отладки проект вот с такими установками. Для загрузчика вот с такими... Гyдвин(96 знак., 07.07.2022 14:59, картинка, картинка)
- при отладке ? если так , то нужно путь к ini файлу добавить во
вкладке debug Aleksey_75(426 знак., 07.07.2022 14:38 - 14:43)
- А что нужно указать в этой строке? Nikolaev_Aleksey(91 знак., 08.07.2022 07:00)
- да, это только для отладки. - Nikolaev_Aleksey(07.07.2022 14:39)
- Тогда забот не понимаю... POV(102 знак., 07.07.2022 14:38)
- да не хотелось бы. загрузчик много периферии инициализируют.
Хотелось с чистого сброса работать. - Nikolaev_Aleksey(07.07.2022 14:40)
- Ответ: SciFi(562 знак., 07.07.2022 14:45 - 14:48)
- У кортексов в векторах просто адреса указаны, а не команды переходов. - VladislavS.(07.07.2022 15:00)
- +1 за 3 пункт, именно так и сделано - Aleksey_75(07.07.2022 14:47)
- У меня загрузчик в себя вобрал stdlib, файловую систему, CLI и
многое другое. Килобайт 100 от приложения забрал. Соответственно он
все что надо ему инитит, и это не мешает дальнейшей работе
приложения. - POV(07.07.2022 14:47)
- Получается велика вероятность того, что загрузчик надо тоже обновлять. Не наш путь - Nikolaev_Aleksey(08.07.2022 06:10)
- То есть загрузчик и приложение линкуются вместе и используют общие
функции по известным адресам? Потом одно неосторожное движение, и
вы отецтеряется совместимость между приложением и загрузчиком. - SciFi(07.07.2022 14:51)- В загрузчике дохрена нужного и самостоятельного (обновление, CLI -
и что все сопровождает работу с функциями загрузчика). И под два
полностью независимых приложения тупо нет места, поэтому часть кода
вынесена в загрузчик. А так да, приходится следить за API
загрузчика. - POV(07.07.2022 14:54)
- У меня обновление делается через основную прошивку, заливает образ
в SPI Flash. Загрузчик лишь копирует оттуда в память программ. Ну и
он умеет аварийный режим загрузки через TFTP на случай, если
основная прошивка похерилась, а также для первичной загрузки.
Получается маленький загрузчик. - SciFi(07.07.2022 14:56)
- У меня это сделано в том числе чтобы и загрузчик можно было
обновить самим загрузчиком )) Ну, вариантов может быть мильён.. а
мой уже обкатан на 4х изделиях - шуршит, радует глаз. - POV(07.07.2022 14:58)
- Да, я забыл сказать, что мой загрузчик при старте копирует себя в
ОЗУ, чтобы можно было обновить самого себя :-) - SciFi(07.07.2022 15:14)
- не выложите для потомков свой чудо бутлоадер? ) - 0men(07.07.2022 16:10)
- +1 хочется подробностей - Aleksey_75(07.07.2022 23:02)
- возможно нужно включить в настройках компилера "position
independence" Nikolay801_(16 знак., 08.07.2022 09:32)
- Да не, размещаю сразу в адресах ОЗУ, подкручиваю только нулевой
вектор для старта. А там код копирования в ОЗУ сам по себе не
зависит от размещения: memcpy() нормально работает, и инструкция
вызова функции (memcpy) в кортексе сама по себе относительная. SciFi(159 знак., 08.07.2022 09:51)
- мы сейчас о кортексах, или о процах с статическим озу ? - Aleksey_75(08.07.2022 23:46)
- Ша! Вопрос случайного прохожего. А у Кортехов не статическое озу? - Kpoк(09.07.2022 09:20)
- мы просто ведём светскую беседу :-) - SciFi(08.07.2022 23:57)
- я серьезно.. no_init область создаете ? - Aleksey_75(08.07.2022 23:58)
- Нет нужды. Стартап самодельный же. - SciFi(09.07.2022 00:05)
- я серьезно.. no_init область создаете ? - Aleksey_75(08.07.2022 23:58)
- мы сейчас о кортексах, или о процах с статическим озу ? - Aleksey_75(08.07.2022 23:46)
- Да не, размещаю сразу в адресах ОЗУ, подкручиваю только нулевой
вектор для старта. А там код копирования в ОЗУ сам по себе не
зависит от размещения: memcpy() нормально работает, и инструкция
вызова функции (memcpy) в кортексе сама по себе относительная. SciFi(159 знак., 08.07.2022 09:51)
- возможно нужно включить в настройках компилера "position
independence" Nikolay801_(16 знак., 08.07.2022 09:32)
- +1 хочется подробностей - Aleksey_75(07.07.2022 23:02)
- Я так почему-то не стал делать, хотя именно это и планировалось... POV(126 знак., 07.07.2022 15:19)
- не выложите для потомков свой чудо бутлоадер? ) - 0men(07.07.2022 16:10)
- Да, я забыл сказать, что мой загрузчик при старте копирует себя в
ОЗУ, чтобы можно было обновить самого себя :-) - SciFi(07.07.2022 15:14)
- У меня это сделано в том числе чтобы и загрузчик можно было
обновить самим загрузчиком )) Ну, вариантов может быть мильён.. а
мой уже обкатан на 4х изделиях - шуршит, радует глаз. - POV(07.07.2022 14:58)
- У меня обновление делается через основную прошивку, заливает образ
в SPI Flash. Загрузчик лишь копирует оттуда в память программ. Ну и
он умеет аварийный режим загрузки через TFTP на случай, если
основная прошивка похерилась, а также для первичной загрузки.
Получается маленький загрузчик. - SciFi(07.07.2022 14:56)
- В загрузчике дохрена нужного и самостоятельного (обновление, CLI -
и что все сопровождает работу с функциями загрузчика). И под два
полностью независимых приложения тупо нет места, поэтому часть кода
вынесена в загрузчик. А так да, приходится следить за API
загрузчика. - POV(07.07.2022 14:54)
- а что разве переход с загрузчика на основное по не через ресет ? - Aleksey_75(07.07.2022 14:44)
- нет. у меня диагностическая сессия по CAN открыта. нужно продолжать
работу. - Nikolaev_Aleksey(07.07.2022 14:46)
- хм, а накой так сделано ? что за извраты - Aleksey_75(07.07.2022 14:46)
- ISO 14229. - Nikolaev_Aleksey(07.07.2022 14:48)
- хм, а накой так сделано ? что за извраты - Aleksey_75(07.07.2022 14:46)
- нет. у меня диагностическая сессия по CAN открыта. нужно продолжать
работу. - Nikolaev_Aleksey(07.07.2022 14:46)
- Ответ: SciFi(562 знак., 07.07.2022 14:45 - 14:48)
- да не хотелось бы. загрузчик много периферии инициализируют.
Хотелось с чистого сброса работать. - Nikolaev_Aleksey(07.07.2022 14:40)
- Всем спасибо. Может кому пригодится, сделал так: Nikolaev_Aleksey(1093 знак., 08.07.2022 09:52)