реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> BootLoader, Newbee наступает с вопросами!
smac
сообщение Feb 14 2009, 06:56
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(defunct @ Feb 14 2009, 03:13) *
Резетить контроллер из бутлоадера по WDT после проверки целостности прошивки чтобы запустить app, одним словом называется - дебилизм. Причину назову если спросите...

Назовите, если не сложно (я не с целью подлить масла в огонь, просто хочется знать). Вопрос как быть если в уарте, например, "недопереданный байт" остался. Хотя в принципе это тоже можно проверить и дождаться окончания передачи.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 14 2009, 10:17
Сообщение #17


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(defunct @ Feb 14 2009, 00:13) *
- Есть еще какие-то другие причины инициализировать железо перед запуском приложения?

Резонно, т.к. там была редакция, которая куда-то исчезла. Звучало примерно: "между ресетом и запуском приложения". Где-то между этим, конечно, проверка.

Цитата(defunct @ Feb 14 2009, 00:13) *
Первая и наиболее серьезная причина - влетели в бут нештатным образом (врезультате ошибки основного приложения).

Точно в начальный адрес загрузчика ? Или от балды ? Если первое, то у меня снова уйдет на начало приложения. Это пока. Хооший вопрос, кстати. Вероятно нужно посмотреть, что ресета не было и вообще остановить камень.

Цитата(defunct @ Feb 14 2009, 00:13) *
Вторая причина - допустим Bootloader проверил целостность, и с апп - все Ок. Как теперь ему узнать надо обновлять прошивку или не надо?
Без инициализации периферии - никак (аргумент "аппликейшн сообщает" - не катит, т.к. такой подход добавляет зависимость между бутлоадером и приложением).

Очень даже как. Так же, как у атмела. По холодному старту ждем апдейт, если он не произошел, по таймауту собаки сваливаемся опять в загрузчик, проверяем как в него попали, проверяем флешь и если все нормально уходим в приложение.

Цитата(defunct @ Feb 14 2009, 00:13) *
провести диагностику железа, отгрузить дамп/статисткику последнего запуска и т.п.).

А зачем этим всем заниматься загрузчику ? Вообще, какое назначение у загрузчика ? И самое интересное, как запихать все хотелки в тыщу слов ?

Цитата(defunct @ Feb 14 2009, 00:13) *
Раз инициализируем хотя бы один пин хотя бы одного порта

В этом нет никакой необходимости.

Цитата(defunct @ Feb 14 2009, 00:13) *
учитывать _всеми_ - кеми?

Программерами, схемотехниками, камнями, приложениями...

Цитата(defunct @ Feb 14 2009, 00:13) *
Выключить периферию так, чтобы от железного сброса было не отличить - дело нехитрое.

Только для одного камня. Иначе хитрое.

Цитата(defunct @ Feb 14 2009, 00:13) *
Насколько это сложно - сами видите, достаточно просто записать 0 в соотв. регистры периферии.

Вы явно не представляете по каким граблям прыгаете ATmega128.UCSRnC Initial Value 0 0 0 0 0 1 1 0
И, главное, закладываете эти грабли на будущее. Или есть какие-то гарантии, что оно еще и не изменится в новой ревизии ?

Цитата(defunct @ Feb 14 2009, 00:13) *
Резетить контроллер из бутлоадера по WDT после проверки целостности прошивки чтобы запустить app, одним словом называется - дебилизм.

Конечно дебилизм, после проверки нужно идти в приложение, иначе зачем его проверять.

Цитата(defunct @ Feb 14 2009, 00:13) *
а как вы запускаете приложение после обновления прошивки, ведь в процессе обновления прошивки вы периферию инициализируете, не так ли?).

Я же уже сказал - после ресета.

Цитата(defunct @ Feb 14 2009, 00:13) *
По поводу сбрасывания WDT - тут строго говоря, всегда надо исходить из того, что по законам Мерфи WDT включен и обязательно с минимально возможным интервалом.
А это значит, что в некоторых случаях (низкая тактовая + обновление NRWW) может понадобиться хотя бы изменить его интервал, иначе МК может сброситься при выполнении SPM.

Конечно надо. В чем, собственно, проблема ?
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 14 2009, 20:57
Сообщение #18


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Огурцов @ Feb 14 2009, 12:17) *
Очень даже как. Так же, как у атмела. По холодному старту ждем апдейт, если он не произошел, по таймауту собаки сваливаемся опять в загрузчик, проверяем как в него попали, проверяем флешь и если все нормально уходим в приложение.

Ничего не понял, сорри, как у Atmel'a? Если можно, объясните более подробно - как по холодному старту ждать апдейт без проинициализированной периферии?

Цитата
А зачем этим всем заниматься загрузчику ? Вообще, какое назначение у загрузчика ? И самое интересное, как запихать все хотелки в тыщу слов ?

Ну в m128 и подобных с 4K слов бутом есть где разгуляться. Все хотелки есть где разместить.

Цитата
В этом нет никакой необходимости.

Обоснуйте.

Цитата
Программерами, схемотехниками, камнями, приложениями...

Еще раз отмечу, программерам, схемотехникам, камням и приложениям - не нужно знать, что и как делает бутлоадер.
1. Схемотехнику и камень учитывает разработчик бутлоадера.
2. Этот же разработчик бутлоадера заботится о том, чтобы программерам и приложениям бутлоадер не мешал.

Цитата
Только для одного камня. Иначе хитрое.

То плачетесь что 1000 слов мало, то хотите чтобы программа из 1000 слов учитывала особенности всех камней. Понятное дело, бутлоадер затачивается напильником под конкретный камень, а иногда (чаще) под конкретный девайс. И тщательно следит за тем чтобы прошивки от других девайсов часом не залили в этот, т.к. чужая прошивка может попросту спалить железо.

Цитата
Вы явно не представляете по каким граблям прыгаете ATmega128.UCSRnC Initial Value 0 0 0 0 0 1 1 0

Зачем UCSRxC вообще трогать?! Он за вкл/откл уарта не отвечает.

Цитата
И, главное, закладываете эти грабли на будущее. Или есть какие-то гарантии, что оно еще и не изменится в новой ревизии ?

А вы что привязываетесь к default настройкам? или приложение таки настраивает то, что ему нужно?

Цитата
Я же уже сказал - после ресета.

Т.е. обновили прошивку, проверили app CRC, и сбросились по WDT, для того чтобы опять проверить CRC. Чем же это не тот же самый дебилизм?!

Цитата(smac @ Feb 14 2009, 08:56) *
Назовите, если не сложно

Причина - глобальное зацикливание sad.gif
После сброса мы опять попадаем в bootloader, и опять проверяем app CRC и опять резетимся, и опять попадаем в бутлоадер ......

Если поставить костыль - идти путём проверили, записали где-то флажек, перезапустились, проверили флажек - запустили апп. То нет гарантии, что между последней проверкой и входом в бутлоадер флеш не изменился. Что равносильно запуску битого приложения.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 14 2009, 21:43
Сообщение #19


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(defunct @ Feb 14 2009, 21:57) *
Еще раз отмечу, программерам, схемотехникам, камням и приложениям - не нужно знать, что и как делает бутлоадер.

И это единственно правильно. Ну до тех пор, конечно, пока не начинаете что-то инициализировать.

Цитата(defunct @ Feb 14 2009, 21:57) *
То плачетесь что 1000 слов мало, то хотите чтобы программа из 1000 слов учитывала особенности всех камней.

Это вы вынуждены учитывать, т.к. что-то инициализируете. А правильно не учитывать особенности, а не зависеть от них. И это гораздо проще и жрет меньше флеша.

Цитата(defunct @ Feb 14 2009, 21:57) *
Зачем UCSRxC вообще трогать?! Он за вкл/откл уарта не отвечает.

Да какая разница UCSRxC или какой другой. Просто пример, что не все инициализируется нулями. А вы хреначите во все регистры нули...

Цитата(defunct @ Feb 14 2009, 21:57) *
А вы что привязываетесь к default настройкам? или приложение таки настраивает то, что ему нужно?

А что не нужно - не настраивает. А вы это "ненужное" в загрузчике под себя настроили. И забыли...

Цитата(defunct @ Feb 14 2009, 21:57) *
Т.е. обновили прошивку, проверили app CRC, и сбросились по WDT, для того чтобы опять проверить CRC. Чем же это не тот же самый дебилизм?!


Причина - глобальное зацикливание smile.gif
После сброса мы опять попадаем в bootloader, и опять проверяем app CRC и опять резетимся.

Если поставить костыль - идти путём проверили, записали где-то флажек, перезапустились, проверили флажек - запустили апп. То нет гарантии, что между последней проверкой и входом в бутлоадер флеш не изменился. Что равносильно запуску битого приложения.

Посмотрите апнот от атмела. Потом пишите про дибилизм. Если все еще будет не понятно.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 14 2009, 22:42
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Огурцов @ Feb 14 2009, 23:43) *
И это единственно правильно. Ну до тех пор, конечно, пока не начинаете что-то инициализировать.

Непроинициализируете - не обновите прошивку.

Цитата
Это вы вынуждены учитывать, т.к. что-то инициализируете. А правильно не учитывать особенности, а не зависеть от них. И это гораздо проще и жрет меньше флеша.

Специально для тех кто в танке - еще раз - как ваш бутлоадер получает прошивку которую надо зашить во флеш? И как ваш бутлоадер проверяет подходит ли прошивка к конкретному устройству.

Цитата
Да какая разница UCSRxC или какой другой. Просто пример, что не все инициализируется нулями. А вы хреначите во все регистры нули...

Код то смотрели? Где там "во все"?

Цитата
А что не нужно - не настраивает. А вы это "ненужное" в загрузчике под себя настроили. И забыли...

С чего вы взяли, что мы о чем-то забыли? Вы экстрасенсорно определили? smile.gif
Ничего мы не забыли.

Цитата
Посмотрите апнот от атмела. Потом пишите про дибилизм. Если все еще будет не понятно.
Какой аппноут. Своими словами вам религия не позволяет объяснить суть?

Самое главное, Вы бутлоадер-то для кого обычно пишете (если пишите его вообще) - для себя или для пользователя вашего устройства?

PS: Если не затруднит - напишите ответ на самый первый вопрос предыдущего моего комента:
Цитата
Если можно, объясните более подробно - как по холодному старту ждать апдейт без проинициализированной периферии?
Без ответа на этот вопрос дальнейшие рассуждения бессмыслены, т.к. отстается только полагать, что Вы просто не владеете темой.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 14 2009, 23:03
Сообщение #21


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(defunct @ Feb 14 2009, 23:42) *
Непроинициализируете - не обновите прошивку.

Согласен. Или я писал обратное, то при обновлении нельзя инициализировать ?

Цитата(defunct @ Feb 14 2009, 23:42) *
И как ваш бутлоадер проверяет подходит ли прошивка к конкретному устройству.

Как и у атмела - сигнатура. На тип девайса. В т.ч. прошивка может подходить к разным девайсам, но не конфликтующим по железу.

Цитата(defunct @ Feb 14 2009, 23:42) *
Код то смотрели? Где там "во все"?

Смотрел. Код (наверно) правильный. Подход неправильный.

Цитата(defunct @ Feb 14 2009, 23:42) *
С чего вы взяли, что мы о чем-то забыли? Вы экстрасенсорно определили? smile.gif Ничего мы не забыли.

Сегодня не забыли, завтра забыли. Опыт, блин, и практика.

Цитата(defunct @ Feb 14 2009, 23:42) *
Какой аппноут. Своими словами вам религия не позволяет объяснить суть?

Выше кто-то давал. Алгоритм уже описан не раз, код в апноте. Зачем мне напрягаться еще раз ?

Цитата(defunct @ Feb 14 2009, 23:42) *
Самое главное, Вы бутлоадер-то для кого обычно пишете (если пишите его вообще) - для себя или для пользователя вашего устройства?

Не то и не другое. Загрузчик - для устройства.

Цитата(defunct @ Feb 14 2009, 23:42) *
PS: Если не затруднит - напишите ответ на самый первый вопрос предыдущего моего комента:
Без ответа на этот вопрос дальнейшие рассуждения бессмыслены, т.к. отстается только полагать, что Вы просто не владеете темой.

Разберитесь с атмеловским примером. Если он непонятен, то таки да, все зря.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 14 2009, 23:16
Сообщение #22


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Огурцов @ Feb 15 2009, 01:03) *
Разберитесь с атмеловским примером. Если он непонятен, то таки да, все зря.

AVR109 озвученный здесь я читал. Думал может быть Вы ссылаетесь на какой-то другой документ.
А так получается (уж насколько не печально выглядит), что Вы таки не владеете темой.
appnote AVR109. Figure 7. Самый первый пункт алгоритма - инициализация периферии.

Отрывок кода main из AVR109:

Код
__C_task void main(void)
{
    long address;
    unsigned int temp_int;
    unsigned char val;


    /* Initialization */
    void (*funcptr)( void ) = 0x0000; // Set up function pointer to RESET vector.
    PROGPORT |= (1<<PROG_NO); // Enable pull-up on PROG_NO line on PROGPORT.
    initbootuart(); // Initialize UART.


Цитата
Выше кто-то давал. Алгоритм уже описан не раз, код в апноте. Зачем мне напрягаться еще раз ?

Затем, что вы несете пургу преподносите нам полуправду (которая хуже чем откровенная ложь).
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 15 2009, 00:02
Сообщение #23


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(defunct @ Feb 15 2009, 00:16) *
AVR109 озвученный здесь я читал. Думал может быть Вы ссылаетесь на какой-то другой документ.

О да, вынужден признать, что это не тот документ про который я говорил. Дабы не рыться в поисках, откуда оно было украдено, вот общий принцип:

Код
    Wdt_change_enable();
    Wdt_enable_8s();

    Check_crc(MEM_SIZE + SPM_PAGESIZE, FLASHEND - MEM_SIZE - SPM_PAGESIZE + 1);
    if (boot_lock_fuse_bits_get(GET_LOCK_BITS) != 0xCC)
        Error();

    if (!Is_wdt_reset())
    {
        Bus_init();
        Loader_start_loading();
    }

    Wdt_clear_flag();
    Check_crc(0, MEM_SIZE);
    Check_crc(MEM_SIZE, SPM_PAGESIZE);
    Soft_reset();


Цитата
Затем, что вы несете пургу преподносите нам полуправду (которая хуже чем откровенная ложь).

Вот интересно, а слабо будет извиниться ?
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 15 2009, 01:27
Сообщение #24


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Огурцов @ Feb 15 2009, 02:02) *
Вот интересно, а слабо будет извиниться ?

Да не вопрос, извинюсь когда Вы дадите себе труд найти оффициальный документ описывающий этот принцип. Так как Вы дважды посылали меня рыться в аппнотах от Atmel, то желательно чтобы этот документ был от Атмел. Но я пойду Вам навстречу, приму документ от любого производителя МК...

Цитата
Дабы не рыться в поисках, откуда оно было украдено, вот общий принцип

Несмотря на проявленное неуважение к моему времени, скажу очень мягко:
По коду принцип к сожалению не очень понятен. Понятно только - что из пользовательской программы никак нельзя заставить бутлоадер обновить прошивку. А это IMHO минус, сами себя лишили возможности удаленного (автоматизированного) обновления прошивки.
И еще одно - даже в Вашем принципе без настройки периферии - никак.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 15 2009, 02:01
Сообщение #25


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(defunct @ Feb 15 2009, 02:27) *
Да не вопрос, извинюсь когда Вы дадите себе труд найти оффициальный документ описывающий этот принцип. Т.к. Вы дважды посылали меня рыться в аппнотах от Atmel, то желательно чтобы этот документ был от Атмел. Но я пойду Вам навстречу, приму документ от любого производителя МК...

Аха, а вы еще обвините меня в том, что я сам это придумал

Цитата(defunct @ Feb 15 2009, 02:27) *
Понятно только - что из пользовательской программы никак нельзя заставить бутлоадер обновить прошивку.

Никто не мешает передать управление на точку Bus_init() или подобно.

Цитата(defunct @ Feb 15 2009, 02:27) *
И еще одно понятно - даже в Вашем принципе без настройки периферии - никак.

Опять мимо. Это частный случай реализации и не идеальный. Первые две строки логично перенести перед Bus_init(), на работу загрузчика это не повлияет, хоть и менее изящно. В общем-то я так наверно и сделаю.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 15 2009, 02:11
Сообщение #26


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Огурцов @ Feb 15 2009, 04:01) *
Аха, а вы еще обвините меня в том, что я сам это придумал

Вы сами это сказали. Подтверждения обратного пока нет.

Цитата
Никто не мешает передать управление на точку Bus_init() или подобно.

Мешает зависимость между проектами, от которой Вы пытаетесь уйти. А в итоге приходите к еще бОльшей зависимости.
Если бутлоадера нет или версия другая, к чему такой прыжек приведет подумали?

Цитата
Опять мимо. Это частный случай реализации и не идеальный.

Всё-то у вас частно, и не идеально. А где же тот самый идеальный вариант, который Вы всем советуете делать? Как же другие его будут реализовывать если сам автор идеи его реализовать не может! smile.gif

Да и не мимо тут, а как раз в точку (хотя бы потому, что без настройки периферии, сброс по WDT сделать нельзя)..
Код сами привели никто за уши не тянул.
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 15 2009, 02:25
Сообщение #27


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(defunct @ Feb 15 2009, 03:11) *
Мешает опять таки зависимость между проектами, от которой Вы пытаетесь уйти.
Если бутлоадера нет, к чему такой финт ушами приведет?

Есть соглашение о вызовах и список функций загрузчика, которые им поддерживаются. Хотя приложение и не обязано их использовать. Загрузчик есть всегда, а вот приложения может и не быть.
Впрочем, если приложение не вызывает функции загрузчика, то это не важно.

Цитата(defunct @ Feb 15 2009, 03:11) *
Да не мимо, а как раз в точку. Сами же код привели никто за уши не тянул.

Хех, так я ж сказал, как сделать правильно, без какой бы то ни было инициализации периферии. Недостаточно ? Или вы мне м.б. сейчас про указатель стека напомните ? Да, тут таки сложно наверно будет возразить.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 15 2009, 02:31
Сообщение #28


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
так я ж сказал, как сделать правильно

С этим флеймом пора заканчивать... "правильно", "неправильно", детсад какой-то. Пока получается, что все делают неправильно, только Вы один знаете как надо делать правильно, и тем не менее приводите неправильный код. sad.gif

Или приводите документ с описанием принципа из comment #23 и мы проникаемся правильностью идеи...
Или честно скажите - "придумал сам, насколько это правильно или неправильно - не знаю".
Go to the top of the page
 
+Quote Post
Огурцов
сообщение Feb 15 2009, 02:51
Сообщение #29


Гуру
******

Группа: Участник
Сообщений: 3 928
Регистрация: 28-03-07
Из: РФ
Пользователь №: 26 588



Цитата(defunct @ Feb 15 2009, 03:31) *
С этим флеймом пора заканчивать...

И вам спасибо (с)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01547 секунд с 7
ELECTRONIX ©2004-2016