|
Глюк симулятора в AVR Studio v4.16 build 628, А вот в v3.56 всё было нормально |
|
|
|
 |
Ответов
|
May 19 2010, 11:21
|

Частый гость
 
Группа: Участник
Сообщений: 98
Регистрация: 20-06-05
Пользователь №: 6 150

|
Цитата(galjoen @ May 19 2010, 14:11)  Вот пришлось вернуться к своему старому проекту на AVR (на асме написанному). Когда его ваял - пользовался AVR Studio v3.56. А сейчас использовал v4.16. Слегка изменил перетранслировал - всё нормально. Там у меня кое какие вычисления делаются. Такая же программа и для компа есть. Но куда то я задевал её. Но на AVR то тоже самое считается. Ну и решил в симуляторе запустить. Запускаю - через некоторое время вылетает. Думал я что то попортил. Отлаживал и так и сяк - всё равно вылетает. Такое ощущение, что WD срабатывает. Сброс его поставил - всё равно вылетает. Кучу времени на это убил... Потом от безъисходности решил AVR Studio v3.56 попробовать. Запускаю в симуляторе - всё нормально считается! Сравниваю hex-файлы той и другой студией сделанные - одинаковые. Т.е. явно в симуляторе ошибка... Как у более новых студий не знаю. Давно с AVR дела не имел... Интересный и захватывающий рассказ. Однако, либо я пропустил, либо... Ни одного знака вопроса в тексте!
|
|
|
|
|
May 19 2010, 12:22
|
Частый гость
 
Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355

|
Цитата(galjoen @ May 19 2010, 17:40)  Новые темы создаются не только с вопросами. Но и с новостями и т.д. Прочитайте правила... Ну так это действительно просто рассказ. Цитата через некоторое время вылетает Кто вылетает? Студия? Отладчик виснет? Винда синий экран кажет? Как-то бы поподробней  У меня при живой программе все работает нормально. Может код для опробования выложить? Интерес в том, чтобы разобраться, в чем проблема. Может быть это все-таки не новость?
|
|
|
|
|
May 19 2010, 21:31
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(alag57 @ May 19 2010, 16:22)  Кто вылетает? Студия? Отладчик виснет? Винда синий экран кажет? Как-то бы поподробней  Вылетает на адрес сброса. Если там установлен 0, то с 0 начинает команды выбирать. Если установить 0xF000, то пишет, что оттуда неверный опкод прочитан (это приложение, у меня загрузчик в другом проекте) Цитата(alag57 @ May 19 2010, 16:22)  У меня при живой программе все работает нормально. Может код для опробования выложить? Интерес в том, чтобы разобраться, в чем проблема. Может быть это все-таки не новость? Сейчас ещё поэкспериментировал. Оказывается вылетает на подсчёте CRC16 FLASH. Код .DEF RBN0=R12 .DEF RBN1=R13 FlAC:; готовимся к подсчёту CRC-16 FLASH Приложения eor RBN0,RBN0; обнуление CRC eor RBN1,RBN1; аккумулятора ldi ZL,low(TbFlAd<<1); Z - ук-ль на таблицу блоков ldi ZH,high(TbFlAd<<1); с подсчётом CRC во FLASH movw R1:R0,ZH:ZL; сохраним адрес в R0, R1 FlAC1: movw ZH:ZL,R1:R0; ук-ль на таблицу адресов lpm YL,Z+ ; адрес начала lpm YH,Z+ ; очередного блока add YL,YL ; перейдём от rol YH ; слов к байтам ; при увеличении кода сверх FFFF так работать не будет brcs FlAC3 ; C=b15=1 -> посчитано, на сравнение lpm XL,Z+ ; адрес конца lpm XH,Z+ ; очередного блока add XL,XL ; перейдём от rol XH ; слов к байтам movw R1:R0,ZH:ZL; сохраним адрес таблицы в R0, R1 sub XL,YL ; X = конец - начало (в байтах) sbc XH,YH ; = кол-во байт в блоке (сч-к) FlAC2:; цикл вычисления CRC байта из FLASH wdr ; сбросим Watchdog (попытка справится с отладчиком) movw ZH:ZL,YH:YL; адрес во FLASH (байтовый) adiw YH:YL,1 ; inc адреса счётных байт lpm ZL,Z ; очередной байт из FLASH (токо до FFFF!) eor ZL,RBN1 ; проксорим данные с.б. старого CRC ldi ZH,Hi1021; там с.б. таблицы 2110 elpm RBN1,Z ; это с.б. т.к. таблица переставлена eor RBN1,RBN0; получили с.б. нового CRC ldi ZH,Lo1021; там м.б. таблицы 2110 elpm RBN0,Z ; м.б. CRC просто из таблицы ; вычислено CRC очередного байта sbiw XH:XL,1 ; уменьшим счётчик brne FlAC2 ; циклимся (подсчёт CRC-16 блока) rjmp FlAC1 ; циклимся (переход к след. блоку) FlAC3:; CRC-16 подсчитано - сравним с тем, что д.б. ..... TbFlAd:; таблица адресов подсчёта CRC у Flash .dw CRC_B1, CRC_E1; начало (включительно) и конец (исключительно) .dw CRC_B2, CRC_E2 .dw CRC_B3, CRC_E3 .dw CRC_B4, CRC_E4 .dw CRC_B5, CRC_E5 .dw 0xFFFF; признак конца этой таблицы RAMPZ0=1, поэтому lpm обращается к 1-й половине FLASH, а elpm ко 2-й. Во второй половине по адресу Hi1021 лежит выровненная (мл. байт адреса =0) таблица ст. байтов CRC 1021. Lo1021 - соответственно младшие байты. Но это, скорее всего, не сыграет. Всё остальное в 1-й половине FLASH. Когда подсчитывается небольшой блок, то всё нормально. Но при большом отладчик вылетает на адрес запуска. Кстати, а не при подсчёте ли того блока, в котором находится эта самая программа? Надо будет проверить. Прерывания запрещены, введение сброса WD в цикл не повлияло... Ах да, процессор AT90CAN128. Последними билдами AVR Studio не пользовался т.к. вообще давно AVR не занимался. Но судя по тому, что глюк с невозможностью программирования загрузчика из hex-файла с помощью AVRISPMK2 кочует из версии в версию, думаю, что и этот глюк присутствует в поздних версиях...
|
|
|
|
|
May 20 2010, 06:00
|
Частый гость
 
Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355

|
Приведи еще определения CRC_B1, CRC_E1, CRC_B2, CRC_E2, CRC_B3, CRC_E3, CRC_B4, CRC_E4, CRC_B5, CRC_E5. И пару-тройку строк начиная с FlAC3. И адрес FlAC. А пока замечу про оригинальность подсчета CRC с использованием полинома. Я делал подсчет CRC области апликейшена из секции загрузчика, там все нормально считается и отлаживается. Цитата глюк с невозможностью программирования загрузчика из hex-файла с помощью AVRISPMK2 кочует из версии в версию Не понял. Поясни, что значит невозможность программирования загрузчика.
Сообщение отредактировал alag57 - May 20 2010, 06:05
|
|
|
|
|
May 20 2010, 08:39
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(alag57 @ May 20 2010, 10:00)  Приведи еще определения CRC_B1, CRC_E1, CRC_B2, CRC_E2, CRC_B3, CRC_E3, CRC_B4, CRC_E4, CRC_B5, CRC_E5. И пару-тройку строк начиная с FlAC3. И адрес FlAC. Вот таблица с CRC_Bx и CRC_Ex. Это обычные метки, стоящие в начале и конце блока, в котором считается CRC Код TbFlAd:; таблица адресов подсчёта CRC у Flash 001cab 0000 001cac 004a .dw CRC_B1, CRC_E1; начало (включительно) и конец (исключительно) 001cad 007e 001cae 1cb6 .dw CRC_B2, CRC_E2 001caf 1cb9 001cb0 2859 .dw CRC_B3, CRC_E3 001cb1 2880 001cb2 5e53 .dw CRC_B4, CRC_E4 001cb3 5e80 001cb4 64b2 .dw CRC_B5, CRC_E5 001cb5 ffff .dw 0xFFFF; признак конца этой таблицы Вот таблица правильной CRC и пример установки меток CRC_Xx: Код CRC_E4:; конец 4-го блока во FLASH, где надо считать CRC TbCRC16: .db 0x2C, 0xA8; CRC-16 Flash (для контроля), тут CRC не считаем CRC_B5:; начало 5-го блока во FLASH, где надо считать CRC Вот адрес FLAC и несколько строк после FLAC3: Код FlAC:; готовимся к подсчёту CRC-16 FLASH Приложения 001a45 24cc eor RBN0,RBN0; обнуление CRC .......... FlAC3:; CRC-16 подсчитано - сравним с тем, что д.б. 001a70 e7e0 ldi ZL,low(TbCRC16<<1); Z = адрес 001a71 e3f9 ldi ZH,high(TbCRC16<<1); правильного CRC-16 001a72 91a5 lpm XL,Z+ ; м.б. того, что д.б. 001a73 91b4 lpm XH,Z ; с.б. того, что д.б. 001a74 25ac eor XL,RBN0 ; порксорим тем, 001a75 25bd eor XH,RBN1 ; что получилось 001a76 2bab or XL,XH ; =0 -> совпало 001a77 f479 brne ChBd16 ; Z=0 - CRC не совпало Цитата(alag57 @ May 20 2010, 10:00)  А пока замечу про оригинальность подсчета CRC с использованием полинома. Я делал подсчет CRC области апликейшена из секции загрузчика, там все нормально считается и отлаживается. И что же там такого оригинального? На мой взгляд совершенно тривиальный подсчёт CRC16. Приложение считает свою CRC. А дырки в нём возникают потому, что стоят .org для выравнивания адреса или, как в примере, само значение CRC для контроля. Маленькие куски действительно считаются и отлаживаются нормально. А большие - нет. Причём независимо от попадания адреса на сам считающий CRC код. Цитата(alag57 @ May 20 2010, 10:00)  Не понял. Поясни, что значит невозможность программирования загрузчика. http://electronix.ru/forum/index.php?showt...&hl=galjoenЗЫ А вообще, здесь принято обращаться на вы.
|
|
|
|
|
May 20 2010, 10:19
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(alag57 @ May 20 2010, 13:25)  И заодно еще один вопрос - адрес таблицы CRC. Хочу наиболее точно воспроизвести ситуацию. Код .SET BgLd=LARGEBOOTSTART-0x1000; начало таблицы CRC16 1021 (2110) .SET Lo1021=high(BgLd<<1); ук-ль на 256 младших байт .SET Hi1021=high((BgLd<<1)+0x100); ук-ль на 256 старших байт ..... .org BgLd .db 0x00, 0x21, 0x42, 0x63, 0x84, 0xA5, 0xC6, 0xE7; т.е. это Lo1021 00e000 2100 00e001 6342 00e002 a584 00e003 e7c6 .... .db 0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70; т.е. это Hi1021 00e080 1000 00e081 3020 00e082 5040 00e083 7060 Цитата(demiurg_spb @ May 20 2010, 13:25)  Это ИМХО идеологически неправильно. Это обязанность бута. Бут тоже считает CRC приложения. Но это приложение работает не выключаясь месяцами (т.е. в бут не заходит), хотя 80% времени спит, просыпаясь по часам раз в секунду на пару милисекунд. Проверяет не нужно ли поработать, и в 99.9% случаев снова засыпает. Но если решит, что нужно поработать, то перед работой посчитает свою CRC, а также CRC ОЗУ. Там есть ещё множество подобных фич, но они к теме не относятся... И вообще, предлагаю не отклонятся от обсуждения глюка в отладчике.
|
|
|
|
|
May 20 2010, 11:57
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(aleksey_g @ May 20 2010, 15:18)  В АВРСИМУЛЯТОРЕ - регулярные сбросы! В АВРСИМУЛЯТОРЕ 2 - все пучком. Вы чем симулите? Может тот же случай? Честно сказать - не знаю. А где выбирается симулятор? М.б. у меня и нет АВРСИМУЛЯТОРА 2? Версия AVR Studio то старая, а не обновлял т.к. давно АВРом не занимался. Да ещё боюсь, что в новых версиях новые глюки... Вон в ассемблере Version 1 - если в .dw неописанную метку поставить, он не ругнётся, а просто 0 туда подставит. А какой глюк в Version 2 я уже не помню. Какой то сложный, что то с арифметическими вычислениями, с деленим на 0 что ли? Но главное, что у них глюки разные. Т.е. если обоими оттранслировать, и там и там чисто, то и в действительности всё нормально. Цитата(demiurg_spb @ May 20 2010, 15:24)  А это действительно имеет смысл? Для атомной станции девайс? А руки с мылом перед едой имеет смысл мыть? Девайс не для атомной, а для дизельной станции.
|
|
|
|
|
May 21 2010, 07:03
|
Частый гость
 
Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066

|
Цитата(galjoen @ May 20 2010, 14:57)  Честно сказать - не знаю. А где выбирается симулятор? М.б. у меня и нет АВРСИМУЛЯТОРА 2? В верхнем меню студии: Debug/Select Platform and Device... - в левом окошке выбираем, каким симулятором будем пользоваться.
|
|
|
|
|
May 21 2010, 12:54
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Сергей Борщ @ May 20 2010, 23:13)  На запись и в некоторых устройствах на чтение. Но как, и, главное, зачем запрещать выполнение команды JMP/RJMP на область загрузчика? Эти запреты с целью защиты от копирования сделаны. Там, даже прерывания разрешаются только если таблица прерываний в загрузчике. Т.е. это защита от восстановления кода команды по произведённым ею изменениям. А я о том, что программа должна с любым загрузчиком работать. И при отсутствии загрузчика вообще. Переносимость. Да и запустить программирование FLASH, при работе с несоответствующим загрузчиком есть вероятность. В т.ч. поэтому вызовов быть не должно. А считать собственное CRC приложение просто обязано - не только контроль FLASH, но без этого защита от копирования крайне малоэффективной становится... Цитата(aleksey_g @ May 21 2010, 11:03)  В верхнем меню студии: Debug/Select Platform and Device... - в левом окошке выбираем, каким симулятором будем пользоваться. Спасибо, нашёл. Там у меня AT90CAN128 в списке нет. Сейчас посмотрю у кого, из тех, что есть, 128 FLASH и RAMPZ0 на том же месте. Нет, сначала новую версию скачаю. М.б. там есть?
|
|
|
|
Сообщений в этой теме
galjoen Глюк симулятора в AVR Studio v4.16 build 628 May 19 2010, 11:11      alag57 Цитата(galjoen @ May 20 2010, 14:39) А во... May 20 2010, 09:25        aleksey_g Глюки действительно имеют место быть.
У меня, напр... May 20 2010, 11:18          demiurg_spb Цитата(galjoen @ May 20 2010, 15:57) А ру... May 20 2010, 13:38           galjoen Цитата(demiurg_spb @ May 20 2010, 17:38) ... May 20 2010, 14:27            Сергей Борщ Цитата(galjoen @ May 20 2010, 17:27) Дост... May 20 2010, 19:13            V_G Цитата(galjoen @ May 21 2010, 01:27) Дост... May 21 2010, 03:47            demiurg_spb Цитата(galjoen @ May 21 2010, 16:54) А сч... May 21 2010, 14:07             galjoen Цитата(demiurg_spb @ May 21 2010, 18:07) ... May 21 2010, 14:42              =GM= galjoen, CRC на десятке килобайт может споткнуться... May 21 2010, 14:58              demiurg_spb Цитата(galjoen @ May 21 2010, 18:42) При ... May 22 2010, 08:18               galjoen Цитата(=GM= @ May 21 2010, 18:58) galjoen... May 24 2010, 09:37                demiurg_spb Цитата(galjoen @ May 24 2010, 13:37) А за... May 24 2010, 10:08                 galjoen Цитата(demiurg_spb @ May 24 2010, 14:08) ... May 27 2010, 09:15                  alag57 Цитата(galjoen @ May 27 2010, 15:15) Пока... May 27 2010, 15:36                   galjoen Цитата(alag57 @ May 27 2010, 19:36) Да не... May 28 2010, 08:15                    alag57 Цитата(galjoen @ May 28 2010, 14:15) А м.... May 28 2010, 14:08               =GM= Цитата(demiurg_spb @ May 22 2010, 07:18) ... May 26 2010, 21:53                demiurg_spb Предлагаю уважаемым модераторам вычленить из этой ... May 28 2010, 09:00                 galjoen Цитата(demiurg_spb @ May 28 2010, 13:00) ... May 28 2010, 09:30                  demiurg_spb Цитата(galjoen @ May 28 2010, 13:30) Не з... May 28 2010, 09:53                   galjoen Цитата(demiurg_spb @ May 28 2010, 13:53) ... May 28 2010, 10:38                    demiurg_spb Цитата(galjoen @ May 28 2010, 14:38) Не п... May 28 2010, 10:49                    =GM= Цитата(galjoen @ May 28 2010, 09:38) Стра... May 28 2010, 11:10                 =GM= Цитата(demiurg_spb @ May 28 2010, 08:00) ... May 28 2010, 09:59                  demiurg_spb Цитата(=GM= @ May 28 2010, 13:59) Памяти ... May 28 2010, 10:07                   =GM= Цитата(demiurg_spb @ May 28 2010, 09:07) ... May 28 2010, 10:47 V_G Текущий билд имеет номер 700. Так что это даже не ... May 19 2010, 12:34 demiurg_spb Цитата(galjoen @ May 19 2010, 15:11) Отла... May 19 2010, 19:37 aleksey_g Посмотрел у себя. Студия 4.18 Build 692.
Для АВРСИ... May 27 2010, 15:18 =GM= Цитата(aleksey_g @ May 27 2010, 14:18) По... May 27 2010, 15:50  aleksey_g Цитата(=GM= @ May 27 2010, 18:50) Странно... May 28 2010, 06:17
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|