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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Глюк симулятора в AVR Studio v4.16 build 628, А вот в v3.56 всё было нормально
galjoen
сообщение May 19 2010, 11:11
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Вот пришлось вернуться к своему старому проекту на AVR (на асме написанному). Когда его ваял - пользовался AVR Studio v3.56. А сейчас использовал v4.16. Слегка изменил перетранслировал - всё нормально.
Там у меня кое какие вычисления делаются. Такая же программа и для компа есть. Но куда то я задевал её. Но на AVR то тоже самое считается. Ну и решил в симуляторе запустить. Запускаю - через некоторое время вылетает. Думал я что то попортил. Отлаживал и так и сяк - всё равно вылетает. Такое ощущение, что WD срабатывает. Сброс его поставил - всё равно вылетает. Кучу времени на это убил...
Потом от безъисходности решил AVR Studio v3.56 попробовать. Запускаю в симуляторе - всё нормально считается! Сравниваю hex-файлы той и другой студией сделанные - одинаковые. Т.е. явно в симуляторе ошибка...
Как у более новых студий не знаю. Давно с AVR дела не имел...
Go to the top of the page
 
+Quote Post
ut1wpr
сообщение May 19 2010, 11:21
Сообщение #2


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

Группа: Участник
Сообщений: 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 дела не имел...

Интересный и захватывающий рассказ. Однако, либо я пропустил, либо... Ни одного знака вопроса в тексте!
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 19 2010, 11:40
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(ut1wpr @ May 19 2010, 15:21) *
Интересный и захватывающий рассказ. Однако, либо я пропустил, либо... Ни одного знака вопроса в тексте!

Новые темы создаются не только с вопросами. Но и с новостями и т.д. Прочитайте правила...
Go to the top of the page
 
+Quote Post
alag57
сообщение May 19 2010, 12:22
Сообщение #4


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

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(galjoen @ May 19 2010, 17:40) *
Новые темы создаются не только с вопросами. Но и с новостями и т.д. Прочитайте правила...

Ну так это действительно просто рассказ.
Цитата
через некоторое время вылетает

Кто вылетает? Студия? Отладчик виснет? Винда синий экран кажет?
Как-то бы поподробней smile.gif
У меня при живой программе все работает нормально. Может код для опробования выложить?
Интерес в том, чтобы разобраться, в чем проблема. Может быть это все-таки не новость?
Go to the top of the page
 
+Quote Post
V_G
сообщение May 19 2010, 12:34
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Текущий билд имеет номер 700. Так что это даже не новость.
Чтобы рассказ не звучал голословно, стоит конкретизировать претензии к AVRStudio. Тем более, что на вычислительном софте глюки AVR действительно встречаются редко.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 19 2010, 19:37
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(galjoen @ May 19 2010, 15:11) *
Отлаживал и так и сяк - всё равно вылетает.Такое ощущение, что WD срабатывает.
Сброс его поставил - всё равно вылетает. Кучу времени на это убил...
Если склероз мне не изменяет, то WD в студии никак не роялит.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 19 2010, 21:31
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(alag57 @ May 19 2010, 16:22) *
Кто вылетает? Студия? Отладчик виснет? Винда синий экран кажет?
Как-то бы поподробней smile.gif

Вылетает на адрес сброса. Если там установлен 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 кочует из версии в версию, думаю, что и этот глюк присутствует в поздних версиях...
Go to the top of the page
 
+Quote Post
alag57
сообщение May 20 2010, 06:00
Сообщение #8


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

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 20 2010, 08:39
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 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

ЗЫ А вообще, здесь принято обращаться на вы.
Go to the top of the page
 
+Quote Post
alag57
сообщение May 20 2010, 09:25
Сообщение #10


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

Группа: Участник
Сообщений: 130
Регистрация: 26-06-06
Из: Березовский
Пользователь №: 18 355



Цитата(galjoen @ May 20 2010, 14:39) *
А вообще, здесь принято обращаться на вы.

Извиняюсь. Я лично не против, если ко мне будут обращаться на ты. Но вы правы - правила есть правила.

Насчет программы - попробую у себя, отпишусь. И заодно еще один вопрос - адрес таблицы CRC. Хочу наиболее точно воспроизвести ситуацию.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 20 2010, 09:25
Сообщение #11


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(galjoen @ May 20 2010, 12:39) *
И что же там такого оригинального? На мой взгляд совершенно тривиальный подсчёт CRC16.
Приложение считает свою CRC.
Это ИМХО идеологически неправильно. Это обязанность бута.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 20 2010, 10:19
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 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 ОЗУ.
Там есть ещё множество подобных фич, но они к теме не относятся...
И вообще, предлагаю не отклонятся от обсуждения глюка в отладчике.
Go to the top of the page
 
+Quote Post
aleksey_g
сообщение May 20 2010, 11:18
Сообщение #13


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

Группа: Свой
Сообщений: 151
Регистрация: 11-01-06
Из: Украина Ровно
Пользователь №: 13 066



Глюки действительно имеют место быть.
У меня, например, малюсенький проектик на тиньке13 в железе работает великолепно.
(Правда, скомпиленый на С под ИАР_ом)
В АВРСИМУЛЯТОРЕ - регулярные сбросы!
В АВРСИМУЛЯТОРЕ 2 - все пучком.
Вы чем симулите? Может тот же случай?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 20 2010, 11:24
Сообщение #14


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(galjoen @ May 20 2010, 14:19) *
Бут тоже считает CRC приложения. Но это приложение работает не выключаясь месяцами (т.е. в бут не заходит), хотя 80% времени спит, просыпаясь по часам раз в секунду на пару милисекунд. Проверяет не нужно ли поработать, и в 99.9% случаев снова засыпает. Но если решит, что нужно поработать, то перед работой посчитает свою CRC, а также CRC ОЗУ.
Там есть ещё множество подобных фич, но они к теме не относятся...
Ок. Последнее. А это действительно имеет смысл? Для атомной станции девайс?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
galjoen
сообщение May 20 2010, 11:57
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 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) *
А это действительно имеет смысл? Для атомной станции девайс?

А руки с мылом перед едой имеет смысл мыть?
Девайс не для атомной, а для дизельной станции.
Go to the top of the page
 
+Quote Post

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

 


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


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