-
- От компилера зависит. Вот мой кусок кода для IAR AVR Codavr(98 знак., 24.12.2018 11:15)
- у меня с 8-битным Z8Encore и командой .org тоже проблем нет. :-) - Лагунов(24.12.2018 12:12)
- Пардон, не увидел, что тема про АРМы. Но вроде как в ИАРе для них аналогично, нет? Ты бы писал об каком компилере речь. Но смысл везде один, компилятор не знает куда линкер засунет код, посему в сишнике должна быть привязка, которая сообщает Codavr(120 знак., 24.12.2018 12:16 - 12:24)
- В IAR для ARM практически английским по белому: ЫЫукпу(271 знак., 24.12.2018 18:00 - 18:10)
- да и в Кейле я разобрался. Всё, что надо, помещаешь в отдельный файл. Как item подключаешь. А в его свойствах указываешь всё что хочешь - RAM, ROM2. И адрес какой надо. Теперь можно думать дальше. :-) - Лагунов(24.12.2018 19:53)
- Если два дня нихера не получается прочти инструкцию :))) - Codavr(25.12.2018 09:15)
- чего не получается? Что спрашивал - как раз получилось. Любой сегмент своей программы размещаю где хочу. А логика бутлодера - отдельная песня. - Лагунов(25.12.2018 11:05)
- Хер тебя знает о чем ты тут народ два дня пытал. - Codavr(25.12.2018 17:46)
- Как чукча - что вижу, то и пою :) - Гудвин(25.12.2018 18:48)
- Хер тебя знает о чем ты тут народ два дня пытал. - Codavr(25.12.2018 17:46)
- чего не получается? Что спрашивал - как раз получилось. Любой сегмент своей программы размещаю где хочу. А логика бутлодера - отдельная песня. - Лагунов(25.12.2018 11:05)
- Если два дня нихера не получается прочти инструкцию :))) - Codavr(25.12.2018 09:15)
- да и в Кейле я разобрался. Всё, что надо, помещаешь в отдельный файл. Как item подключаешь. А в его свойствах указываешь всё что хочешь - RAM, ROM2. И адрес какой надо. Теперь можно думать дальше. :-) - Лагунов(24.12.2018 19:53)
- вот этот красивый термин #pragma я уже видел. Теперь бы куда его засунуть! :-) Мне и надо только кусок кода в старший банк флэш сунуть. Ничего больше. - Лагунов(24.12.2018 13:18)
- 5.4x of IAR Embedded Workbench® for ARM Codavr(24.12.2018 13:47)
- Не хочешь говорить какой компилятор, прочти хелп. Ну елы палы. - Codavr(24.12.2018 13:37)
- В IAR для ARM практически английским по белому: ЫЫукпу(271 знак., 24.12.2018 18:00 - 18:10)
- Пардон, не увидел, что тема про АРМы. Но вроде как в ИАРе для них аналогично, нет? Ты бы писал об каком компилере речь. Но смысл везде один, компилятор не знает куда линкер засунет код, посему в сишнике должна быть привязка, которая сообщает Codavr(120 знак., 24.12.2018 12:16 - 12:24)
- у меня с 8-битным Z8Encore и командой .org тоже проблем нет. :-) - Лагунов(24.12.2018 12:12)
- ORG адрес - argus98(23.12.2018 20:08)
- во как! обычный ассемблерный прикол? А! это надо мной прикол. :-). Раньше-то да, у меня любимое развлечение было - Лагунов(23.12.2018 20:22 - 20:24)
- с каких это пор директивы ассемблера стали приколом?! Мир сходит с ума... - argus98(23.12.2018 22:30)
- ТО ЕСТЬ вы утверждаете, что Кейл примет у меня ORG? Я пробовал - не принимает. :-) - Лагунов(24.12.2018 08:54)
- Искал директиву для IAR ARM и не нашел. Только через сегменты. В чем прикол? - misyachniy(23.12.2018 23:47)
- А у меня нашлась. Но через сегменты, ИМХО, правильнее, поскольку линкер следит за расположением кусков. SeregaB(241 знак., 25.12.2018 17:54 - 17:57)
- ARM и AVR, по моему, разные архитектуры. - misyachniy(26.12.2018 10:27)
- В исходном сообщении ТС вообще ничего не было про архитектуру МК. В сообщении, на которое отвечал я было явно указано: SeregaB(160 знак., 26.12.2018 11:05)
- На сколько мне известно этот раздел конференции озаглавлен "АРМ". ;-) - misyachniy(26.12.2018 11:25)
- В исходном сообщении ТС вообще ничего не было про архитектуру МК. В сообщении, на которое отвечал я было явно указано: SeregaB(160 знак., 26.12.2018 11:05)
- Ну не знаю, эта pragma так и осталась темной для меня. В Кейле куда всё проще оказалось. Я там указал, куда класть эти функции, по какому адресу - они там и легли. Я по *.hex потом проверил. - Лагунов(25.12.2018 20:56)
- ARM и AVR, по моему, разные архитектуры. - misyachniy(26.12.2018 10:27)
- А у меня нашлась. Но через сегменты, ИМХО, правильнее, поскольку линкер следит за расположением кусков. SeregaB(241 знак., 25.12.2018 17:54 - 17:57)
- :)) - MBedder(23.12.2018 22:35)
- с каких это пор директивы ассемблера стали приколом?! Мир сходит с ума... - argus98(23.12.2018 22:30)
- во как! обычный ассемблерный прикол? А! это надо мной прикол. :-). Раньше-то да, у меня любимое развлечение было - Лагунов(23.12.2018 20:22 - 20:24)
- Линкер может установить жесткий адрес для конкретной функции, либо запихнуть их в определёную область. evgeniy1294(458 знак., 23.12.2018 17:36 - 17:52)
- к примеру в Кейле как это сделать? "запихнуть их в определёную область" - вот только этого и хочу - Лагунов(23.12.2018 17:52)
- Вот пример, подходит для исходников выше. Кейлу необходимо сказать, какой scutter-файл использовать, делается это в настройках проекта. evgeniy1294(329 знак., 23.12.2018 17:55 - 18:03)
- значит вот он какой scutter-файл! :-) (в свойствах линкера это место видел, но не знал - чего это там) - Лагунов(23.12.2018 18:29)
- К слову, скрипты ни как не стандартезированы. В посте выше есть пример такого скрипта для Segger Embedded Studio. - evgeniy1294(23.12.2018 18:32)
- значит вот он какой scutter-файл! :-) (в свойствах линкера это место видел, но не знал - чего это там) - Лагунов(23.12.2018 18:29)
- Вот пример, подходит для исходников выше. Кейлу необходимо сказать, какой scutter-файл использовать, делается это в настройках проекта. evgeniy1294(329 знак., 23.12.2018 17:55 - 18:03)
- к примеру в Кейле как это сделать? "запихнуть их в определёную область" - вот только этого и хочу - Лагунов(23.12.2018 17:52)
- Встречный вопрос: с какой целью? - SciFi(23.12.2018 17:45)
- А Вы с какой целью интересуетесь? Вообще-то разработчик не обязан отчитываться перед компилятором о своих планах. Хоть по диагонали. - Крок(23.12.2018 22:44)
- А он и не обязан. Кто-то видел, как я держал пистолет у его виска? А если по делу, оч. часто оказывается, что вопрошающий норовит изобрести велосипед, но через одно место, такшта вопрос не праздный. - SciFi(24.12.2018 08:25, картинка)
- Вот я помню, что в 8-разрябных ПИКах это было очень надо, а зачем - уже склероз. Вычисляемые переходы, таблицы и проч. - Крок(24.12.2018 08:30)
- так и у меня в 8-битном Z8Encore это везде штатно. Бутлодер в конце памяти. Перед ним - .org %383E. Я туда свободно прыгаю из основной программы, перепрошиваю нужное количество страниц и вуаля. Новая прошивка. - Лагунов(24.12.2018 08:57)
- Тогда проще бут тоже в конце расположить и при прошивке подменять адрес штатного ресета на начало бута. Тогда при старте прыгнет в бут и из него при правильной CRC программы и через пару секунд обратно на программу: правильный адрес ресета можно Andreas(234 знак., 24.12.2018 11:06)
- да мне как раз было бы понятней, если бы человек из меню шагнул в бут. Если там всё есть - прошивка (и перезапуск). Если чего-то не так - возврат. Для того и хочу узнать - как функцию бута разместить гарантировано за пределами возможной прошивки. - Лагунов(24.12.2018 12:15)
- Но при этом уж совсем любой сбой окирпичит девайс. Лучше, когда при сбое процесса прошивки или зашивки не того, можно было девайс к жизни вернуть без вскрытия. - Andreas(24.12.2018 12:35)
- ну как только стер первую страницу уже ты весь подвис. Если сбой - только вскрывать. Это ведь у кого угодно. - Лагунов(24.12.2018 13:20)
- В классическом варианте в первой странице сидит загрузчик и никогда не стирается. Для Кортекса-М0 без переноса регистра начала таблицы векторов это грустно, приходится ее в ОЗУ переправлять и прочим гимором заниматься. Кроме того надо правильно Andreas(276 знак., 24.12.2018 13:45)
- И зачем её стирать? Там должен сидеть нестираемый загрузчик, чтобы никаких кирпичей. - SciFi(24.12.2018 13:24)
- ну как только стер первую страницу уже ты весь подвис. Если сбой - только вскрывать. Это ведь у кого угодно. - Лагунов(24.12.2018 13:20)
- Делаю так же, как s_h_e говорит: сброс и анализ флагов. Из бонусов: МК после сброса в известном состоянии. Но возврата нет. Кстати, "если чего не так" без бута можно проверить. Дублирование кода в загрузчике и в основной прошивке не есть SciFi(16 знак., 24.12.2018 12:19, ссылка)
- При острой необходимости это зло решается переносом функций в загрузчик, и использованием их из приложения с помощью таблицы адресов. - VLLV(24.12.2018 12:53)
- И такое делал. Но Лагунов хвастается избытком памяти, такшта есть хороший повод его использовать :-) - SciFi(24.12.2018 12:54)
- При острой необходимости это зло решается переносом функций в загрузчик, и использованием их из приложения с помощью таблицы адресов. - VLLV(24.12.2018 12:53)
- Но при этом уж совсем любой сбой окирпичит девайс. Лучше, когда при сбое процесса прошивки или зашивки не того, можно было девайс к жизни вернуть без вскрытия. - Andreas(24.12.2018 12:35)
- да мне как раз было бы понятней, если бы человек из меню шагнул в бут. Если там всё есть - прошивка (и перезапуск). Если чего-то не так - возврат. Для того и хочу узнать - как функцию бута разместить гарантировано за пределами возможной прошивки. - Лагунов(24.12.2018 12:15)
- Тогда проще бут тоже в конце расположить и при прошивке подменять адрес штатного ресета на начало бута. Тогда при старте прыгнет в бут и из него при правильной CRC программы и через пару секунд обратно на программу: правильный адрес ресета можно Andreas(234 знак., 24.12.2018 11:06)
- так и у меня в 8-битном Z8Encore это везде штатно. Бутлодер в конце памяти. Перед ним - .org %383E. Я туда свободно прыгаю из основной программы, перепрошиваю нужное количество страниц и вуаля. Новая прошивка. - Лагунов(24.12.2018 08:57)
- Вот я помню, что в 8-разрябных ПИКах это было очень надо, а зачем - уже склероз. Вычисляемые переходы, таблицы и проч. - Крок(24.12.2018 08:30)
- А он и не обязан. Кто-то видел, как я держал пистолет у его виска? А если по делу, оч. часто оказывается, что вопрошающий норовит изобрести велосипед, но через одно место, такшта вопрос не праздный. - SciFi(24.12.2018 08:25, картинка)
- разместить там (в банке 2) бутлодер и прошивать банк 1 - Лагунов(23.12.2018 17:49)
- так не получится, если компилятор скомпилирует ваш бутлоадер заодно с обновляемой прошивкой, потроха бутлоадера окажутся с ней перемешаны и при стирании основной прошивки бутлоадер работать перестанет - AlexG(23.12.2018 18:34)
- это я чувствую, потому банке 2 будет полноценная программа бутлодера, независящая от основной программы. Макет такого бута у меня уже получился по адресу 0x08020000. В принципе надо просто скакнуть из основной программы туда в какой-то момент. :-) - Лагунов(23.12.2018 18:59)
- По-хорошему загрузчик должен быть там, где умолчальная таблица векторов. Иначе растёт риск превращения устройства в тыкву в процессе обновления. - s_h_e(23.12.2018 20:24)
- если у меня будут запрещены все прерывания, то не понадобится трогать таблицу векторов? В принципе при записи флэш (беря байты из ОЗУ или к примеру из SPI EEPROM) прерывания мне и не нужны. - Лагунов(24.12.2018 08:59)
- С одной стороны - да, вектора не нужны. А с другой стороны, как прошивка окажется в ОЗУ или в еепром? приложение закачает? а если оно битое? - VLLV(24.12.2018 09:06)
- вот сейчас как раз пробую скачать файл из USB disk, полностью его проверяю, сохраняю в SPI EEPROM (может еще и дублирую, место есть). До этого момента пользуюсь всеми ресурсами старой прошивки. После того, как всё идеально, запрещаю все Лагунов(140 знак., 24.12.2018 12:21)
- 1) Произойдет сбой питания во время прошивки. 2) Второпях во время очередных коррекций приложения произошла ошибка, не позволяющая подготовить данные. - VLLV(24.12.2018 12:48)
- так масса перепрошиваемых устройств всегда про это (отключение питания) верещат, предупреждают. Тут уж как не повезет. - Лагунов(24.12.2018 13:22)
- 1) Произойдет сбой питания во время прошивки. 2) Второпях во время очередных коррекций приложения произошла ошибка, не позволяющая подготовить данные. - VLLV(24.12.2018 12:48)
- вот сейчас как раз пробую скачать файл из USB disk, полностью его проверяю, сохраняю в SPI EEPROM (может еще и дублирую, место есть). До этого момента пользуюсь всеми ресурсами старой прошивки. После того, как всё идеально, запрещаю все Лагунов(140 знак., 24.12.2018 12:21)
- С одной стороны - да, вектора не нужны. А с другой стороны, как прошивка окажется в ОЗУ или в еепром? приложение закачает? а если оно битое? - VLLV(24.12.2018 09:06)
- Ежели поциент не просчитал риски превращения в кирпич, так поциенту и надо. - SciFi(23.12.2018 20:28)
- если у меня будут запрещены все прерывания, то не понадобится трогать таблицу векторов? В принципе при записи флэш (беря байты из ОЗУ или к примеру из SPI EEPROM) прерывания мне и не нужны. - Лагунов(24.12.2018 08:59)
- и что, полноценная программа загрузки получилась без вложеных функций? - VLLV(23.12.2018 20:15)
- да нет конечно, это так - теоретически. :-). - Лагунов(23.12.2018 20:21)
- По-хорошему загрузчик должен быть там, где умолчальная таблица векторов. Иначе растёт риск превращения устройства в тыкву в процессе обновления. - s_h_e(23.12.2018 20:24)
- это я чувствую, потому банке 2 будет полноценная программа бутлодера, независящая от основной программы. Макет такого бута у меня уже получился по адресу 0x08020000. В принципе надо просто скакнуть из основной программы туда в какой-то момент. :-) - Лагунов(23.12.2018 18:59)
- а вы уверены что смогете что либо записать (не затерев всю флеш) в 1 банк при залоченном проце ?? - Aleksey_75(23.12.2018 18:22)
- да пока в своих поделках ничего не залочивал. :-) Так-то флэш пописывал помаленьку (константы), стирая страницы. - Лагунов(23.12.2018 18:33)
- Это не так делается. Нужно 2 прошивки: загрузчик и основная программа. - SciFi(23.12.2018 17:54)
- Да, это самый правильный вариант. Бутлоадер размещается в памяти FLASH с нулевым смещением, основная прошивка размещается в памяти со смещением. evgeniy1294(666 знак., 23.12.2018 18:12 - 18:20)
- и как это переключать? Необходимо из меню устройства перейти в загрузчик, считать с флэшки новую прошивку, прошить и перезапуститься. Или тут подразумевается при каждом включении проверять наличие флэшки с обновлением? - Лагунов(23.12.2018 18:26)
- Например проверить прошивку на флешке, записать куда-нибудь флаг для загрузчика, перезапуститься. Загрузчик сам читает прошивку и обновляет. Как-то так. - s_h_e(23.12.2018 18:30)
- да, вариант. Надо смотреть. Спасибо. - Лагунов(23.12.2018 18:31)
- Например проверить прошивку на флешке, записать куда-нибудь флаг для загрузчика, перезапуститься. Загрузчик сам читает прошивку и обновляет. Как-то так. - s_h_e(23.12.2018 18:30)
- и как это переключать? Необходимо из меню устройства перейти в загрузчик, считать с флэшки новую прошивку, прошить и перезапуститься. Или тут подразумевается при каждом включении проверять наличие флэшки с обновлением? - Лагунов(23.12.2018 18:26)
- Да, это самый правильный вариант. Бутлоадер размещается в памяти FLASH с нулевым смещением, основная прошивка размещается в памяти со смещением. evgeniy1294(666 знак., 23.12.2018 18:12 - 18:20)
- так не получится, если компилятор скомпилирует ваш бутлоадер заодно с обновляемой прошивкой, потроха бутлоадера окажутся с ней перемешаны и при стирании основной прошивки бутлоадер работать перестанет - AlexG(23.12.2018 18:34)
- А Вы с какой целью интересуетесь? Вообще-то разработчик не обязан отчитываться перед компилятором о своих планах. Хоть по диагонали. - Крок(23.12.2018 22:44)
- От используемого компилятора зависит. В Си нет стандартного способа сделать это, поэтому везде по разному. - AlexG(23.12.2018 17:24)
- От компилера зависит. Вот мой кусок кода для IAR AVR Codavr(98 знак., 24.12.2018 11:15)