|
Ещё раз о бутлоадере, Некоторые тонкости. |
|
|
|
 |
Ответов
|
Oct 16 2007, 20:58
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
2 singlskv. Не планирую переходить на GCC. Работы завались и времени на изучение новых пакетов банально не хватает. Тем более, что я пробовал с ним работать вначале. Мне не понравилось, что по сути это не один продукт а десятки слабоинтегрированных фичей. Я, безусловно, не претендую даже на коментарии к этому продукту. Просто высказываю своё первое впечатление. Я уже обратил внимание, что есть специалисты, которым такое построение нравится. Они берут компилятор с одного источника линкер с другого, редактор с третьего а отладчик с четвёртого. Наверное это правильно. Возможно я до этого дойду, но пока - не готов. __eeprom пользуюсь. Ассемблерный файл spm выкинул и пользуюсь IARовскими приблудами. Благо Сергей Борщ предложил свой вариант. Спасибо ему. Кто-нибудь прогу по расчёту CRC от IAR смог повторить? Что-то у меня в лоб не заработало, а подбирать на CRC - гиблый номер. Легче свою сварганить. Я пробовал так. Вроде именно так они рекомендуют. Не причёсывал. Чтобы максимально близко к данному варианту было. Потом перепишу. Код #define POLY 0x11021
inline unsigned long crc16(int bit, unsigned long oldcrc) { unsigned long newcrc = (oldcrc << 1) ^ bit; if (oldcrc & 0x80000000) newcrc ^= POLY; return newcrc; }
__C_task void main(void) { __disable_interrupt();
#ifdef CRC_CHECK // Считаем CRC всей памяти флэш unsigned long crc = 0; unsigned char i,j; unsigned char APPFLASH *p = (unsigned char APPFLASH *)0x000000; unsigned char APPFLASH *n = (unsigned char APPFLASH *)MEM_SIZE; do { j= *p++; for(i=0;i<8;i++) { crc = crc16(j & 1,crc); j>>=1; } } while (--n); // Если секция программ повреждена // то переходим к загрузке в бутлоадер if (crc) ((void (*)())loader)(); // Переходим на сам загрузчик #endif ((void (*)())0x0000)(); // Если с CRC всё нормально, то перейдём в начало // секции программ }
|
|
|
|
|
Oct 17 2007, 20:29
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(SasaVitebsk @ Oct 17 2007, 00:58)  __eeprom пользуюсь. Ассемблерный файл spm выкинул и пользуюсь IARовскими приблудами. Благо Сергей Борщ предложил свой вариант. Спасибо ему. Ну если Вы так оптимизируете свой код, то в 2K точно будет сложно влезть... Цитата Кто-нибудь прогу по расчёту CRC от IAR смог повторить? Что-то у меня в лоб не заработало, а подбирать на CRC - гиблый номер. Легче свою сварганить. По расчету CRC16 опять же гляньте как это реализованно в Gcc, там есть встроенная функция тактов на 40 (по длинне правда с циклом не сравнивал, меня скорость обычно больше волнует). Цитата(Сергей Борщ @ Oct 17 2007, 13:56)  Ну так а что на "посмотрел" остановились? Попробуйте откомпилировать gcc, увидите, что без основательной "правки напильником" gcc дает в полтора раза бОльший код. И максимальная разница как раз на aes.c. Кто бы спорил ? Там вобще все написано левой ногой, и то что Iar справился соптимизировать этот код лучше, еще ни о чем не говорит. Я говорил лишь о том что данный алгоритм больше подходит для Gcc, и Ваш пост: Цитата(Сергей Борщ @ Oct 4 2007, 16:42)  Да. Проц - мега8. ключ 256 бит. компилятор - 4.10B. Объем кода - 1974, но есть куда ужимать. Та же мега8, WinAVR, 1888, но другой протокол команды входа в программирование и сильное ужимание. косвенно это подтверждает.
|
|
|
|
|
Oct 18 2007, 19:35
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(singlskv @ Oct 17 2007, 23:29)  Ну если Вы так оптимизируете свой код, то в 2K точно будет сложно влезть... По расчету CRC16 опять же гляньте как это реализовано в Gcc, там есть встроенная функция тактов на 40 (по длинне правда с циклом не сравнивал, меня скорость обычно больше волнует). Уважаемый. Бут оптимизируется по коду. В программе встречается 1 вызов п/п чтения EEPROM и 1 вызов записи. Библиотеки на Яре написаны на Асме. Я их смотрел, и честно говоря в 5 операторах ассемблера не нашёл ничего из ряда вон. Да и был бы очень удивлён если бы нашёл. Так ответьте мне причём здесь применение данных п/п к оптимизации. Совершенно очевидно что на этих двух вызовах можно сэкономить ну от силы пару байтов. Речь вначале шла о сотне! То же касается и CRC16. Я не спрашивал как её написать оптимально. Я не думаю, что написанное мной на ассемблере будет хуже вашего. Во всяком случае значительно. Я просто интересовался как именно IAR генерит CRC. Я переписал на АСМ весь свой WAKE протокол и думаю всётаки влезть в 2к. Переписал потому, что всё это реализовано по прерываниям и логически вообще не связано с самим бутом. Подытоживая всё выше сказанное, хочется чтобы вы более конкретно обдумывали свои посты. ========================================== Теперь по существу вопроса. Пишу это, так как только на этой странице уже поднимался вопрос по генерации CRC IARом. И думаю люди будут как и я пытаться его использовать. Для тех кто интересуется сообщаю следующее. При размещении CRC по разным адресам сам CRC не меняется. Из чего я делаю вывод (возможно некорректный, но это то что первое приходит в голову), что CRC считается только CODE области и размещается где указано. Это не позволяет мне его использовать так как я хочу. Наверное есть опция какая-то, но я не разобрался. Решил написать программу, которая будет считать CRC и вставлять её в нужное место прямо в HEX файле. Постораюсь написать её максимально универсально, причесать и выложить на форуме AVR для использования желающими. Ещё один момент - прога CREATE из набора идущего к AES. В ней есть хомут. При размещении данных (CRC) в последних двух ячейках секции пользователя CREATE начинает кричать оверлапинг. При размещении CRC на две ячейки меньше, выполняет операцию, но в прошивке вы получите дополнительно два байта мусора. Исходники там приведены, но я не стал разбираться, так как всё равно не чем её откомпилить. В принципе это не страшно, просто поясняю для того, кто пойдёт по моим стопам.  У меня - всё работает. Спасибо всем тем кто принял участие в обсуждении. Особенное спасибо Сергей Борщ за, просто неоценимую, конкретную помощь знающего человека. Тему не закрываю, возможно ещё что возникнет. Влезу или не влезу, для любопытных - напишу позже.  .
|
|
|
|
|
Oct 18 2007, 20:40
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(SasaVitebsk @ Oct 18 2007, 22:35)  так как всё равно не чем её откомпилить. Dev C++В комплекте исходников идут и файлы проекта под этот компилятор. Цитата(SasaVitebsk @ Oct 18 2007, 22:35)  Ещё один момент - прога CREATE из набора идущего к AES. В ней есть хомут. При размещении данных (CRC) в последних двух ячейках секции пользователя CREATE начинает кричать оверлапинг. При размещении CRC на две ячейки меньше, выполняет операцию, но в прошивке вы получите дополнительно два байта мусора. Естественно, потому что CREATE сама считает CRC (по полиному 0x8005) и располагает его в последних двух байтах секции приложения. Поэтому меня несколько ввело в замешательство ваше желание считать CRC при помощи линкера. При этом CREATE кoрректо считает все свободные ячейки заполненными 0xFFFF, в то время как линкер считает, что все свободные места между сегментами заполнены нулями.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
SasaVitebsk Ещё раз о бутлоадере Oct 4 2007, 09:17 Сергей Борщ Цитата(SasaVitebsk @ Oct 4 2007, 12:17) Х... Oct 4 2007, 09:37 IJAR Цитата(Сергей Борщ @ Oct 4 2007, 13:37) Е... Oct 9 2007, 11:40  Сергей Борщ Цитата(IJAR @ Oct 9 2007, 14:40) А какой ... Oct 9 2007, 12:01   IJAR Цитата(Сергей Борщ @ Oct 9 2007, 16:01) Ч... Oct 9 2007, 12:33    Сергей Борщ Цитата(IJAR @ Oct 9 2007, 15:33) Но есть ... Oct 9 2007, 14:33 SasaVitebsk Спасибо Сергей. Всё доступно объяснил. Подходят о... Oct 4 2007, 19:14 arttab а почему бы не объявить переменную в озу в загрузч... Oct 7 2007, 14:34 Сергей Борщ Цитата(arttab @ Oct 7 2007, 17:34) В загр... Oct 8 2007, 08:16 IJAR Цитата(SasaVitebsk @ Oct 4 2007, 13:17) З... Oct 9 2007, 07:28 Сергей Борщ Цитата(IJAR @ Oct 9 2007, 10:28) 1. Испол... Oct 9 2007, 10:45 SasaVitebsk Сергей, всётаки по коду не уложился в 2к. Со своим... Oct 9 2007, 23:55 Сергей Борщ Цитата(SasaVitebsk @ Oct 10 2007, 02:55) ... Oct 10 2007, 10:58  SasaVitebsk Цитата(Сергей Борщ @ Oct 10 2007, 13:58) ... Oct 10 2007, 13:35   Сергей Борщ Цитата(SasaVitebsk @ Oct 10 2007, 16:35) ... Oct 10 2007, 15:46    Dog Pawlowa Цитата(Сергей Борщ @ Oct 10 2007, 18:46) ... Oct 10 2007, 16:42     Сергей Борщ Цитата(Dog Pawlowa @ Oct 10 2007, 19:42) ... Oct 10 2007, 16:57   singlskv Цитата(SasaVitebsk @ Oct 10 2007, 17:35) ... Oct 16 2007, 18:01    Сергей Борщ Цитата(singlskv @ Oct 16 2007, 21:01) Ста... Oct 17 2007, 09:56 SasaVitebsk Код
2 106 bytes of CODE memory
1 430 bytes of D... Oct 11 2007, 09:07 Waso Извиняюсь что лезу в чужую тему, но есть дилетантс... Oct 12 2007, 08:36 Сергей Борщ Цитата(Waso @ Oct 12 2007, 11:36) Я плани... Oct 12 2007, 11:04 Waso Спасибо за совет!
Нашел апноты. Изучаю.
Safe ... Oct 15 2007, 07:02 SasaVitebsk Ещё один вопрос, напрямую с бутлоадером не связанн... Oct 16 2007, 10:28 Сергей Борщ Цитата(SasaVitebsk @ Oct 16 2007, 13:28) ... Oct 16 2007, 12:51  IgorKossak Цитата(Сергей Борщ @ Oct 16 2007, 15:51) ... Oct 16 2007, 20:32 SasaVitebsk Спасибо, но я не планирую запрещать локи на чтение... Oct 16 2007, 16:47  zltigo Цитата(singlskv @ Oct 17 2007, 23:29) то ... Oct 17 2007, 20:47   singlskv Цитата(zltigo @ Oct 18 2007, 00:47) Т.е. ... Oct 17 2007, 20:57    zltigo Цитата(singlskv @ Oct 17 2007, 23:57) Опя... Oct 17 2007, 21:12     singlskv Цитата(zltigo @ Oct 18 2007, 01:12) Конте... Oct 17 2007, 21:53      zltigo Цитата(singlskv @ Oct 18 2007, 00:53) Ско... Oct 17 2007, 22:04       singlskv Цитата(zltigo @ Oct 18 2007, 02:04) Легко... Oct 17 2007, 22:24        zltigo Цитата(singlskv @ Oct 18 2007, 01:24) а п... Oct 17 2007, 22:35         singlskv Цитата(zltigo @ Oct 18 2007, 02:35) В aes... Oct 17 2007, 22:55   zltigo Цитата(SasaVitebsk @ Oct 18 2007, 22:35) ... Oct 18 2007, 22:05   singlskv To zltigo и SasaVitebsk,
признаю, погорячился насч... Oct 18 2007, 22:48    zltigo Цитата(singlskv @ Oct 19 2007, 01:48) Спр... Oct 19 2007, 07:31    Непомнящий Евгений Цитата(singlskv @ Oct 19 2007, 02:48) Ну ... Oct 19 2007, 07:37     zltigo Цитата(Непомнящий Евгений @ Oct 19 2007, 10... Oct 19 2007, 08:01 Непомнящий Евгений Если максимальная оптимизация по размеру, то первы... Oct 19 2007, 08:33 singlskv Цитата(Непомнящий Евгений @ Oct 19 2007, 11... Oct 19 2007, 15:08  SasaVitebsk Цитата(singlskv @ Oct 19 2007, 18:08) А о... Oct 20 2007, 20:07   singlskv Цитата(SasaVitebsk @ Oct 21 2007, 00:07) ... Oct 21 2007, 17:28    pvp Цитата(singlskv @ Oct 21 2007, 21:28) __z... Oct 22 2007, 15:24     Сергей Борщ Цитата(pvp @ Oct 22 2007, 18:24) Поясните... Oct 22 2007, 15:33      pvp Цитата(Сергей Борщ @ Oct 22 2007, 19:33) ... Oct 23 2007, 14:02 SasaVitebsk Внимательно просмотрю.
Правда я отказался на сегод... Oct 22 2007, 10:43 singlskv Цитата(SasaVitebsk @ Oct 22 2007, 14:43) ... Oct 22 2007, 16:43 SasaVitebsk Я когда первый раз увидел результаты компилировани... Oct 22 2007, 21:24 skripach Не стал создавать новую тему, поэтому здесь.
Можно... Nov 9 2009, 14:11 skripach Что никто не знает? ...или я что-то не то спросил. Nov 12 2009, 07:30 zltigo Цитата(skripach @ Nov 12 2009, 10:30) Что... Nov 12 2009, 09:39 KSN Есть вопрос по прерываниям в bootloader и applicat... Feb 27 2010, 09:55 Сергей Борщ Цитата(KSN @ Feb 27 2010, 11:55) Может у ... Feb 27 2010, 11:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|