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

 
 
> Глюк симулятора в 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
 
Start new topic
Ответов
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
galjoen
сообщение May 19 2010, 21:31
Сообщение #5


Знающий
****

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


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

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


Знающий
****

Группа: Свой
Сообщений: 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
demiurg_spb
сообщение May 20 2010, 09:25
Сообщение #8


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

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


Знающий
****

Группа: Свой
Сообщений: 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
demiurg_spb
сообщение May 20 2010, 11:24
Сообщение #10


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

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


Знающий
****

Группа: Свой
Сообщений: 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
demiurg_spb
сообщение May 20 2010, 13:38
Сообщение #12


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

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



Цитата(galjoen @ May 20 2010, 15:57) *
А руки с мылом перед едой имеет смысл мыть?
Не всегда.
Цитата
Девайс не для атомной, а для дизельной станции.
Хорошо.
С проверкой RAM я соглашусь, ну а для проверки flash из приложения ИМХО разумнее вызывать функцию, находящуюся в секции загрузчика.
А то сам себя "напроверяешь"...


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


Знающий
****

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



Цитата(demiurg_spb @ May 20 2010, 17:38) *
С проверкой RAM я соглашусь, ну а для проверки flash из приложения ИМХО разумнее вызывать функцию, находящуюся в секции загрузчика.

Доступ к загрузчику из приложения д.б. запрещён!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 20 2010, 19:13
Сообщение #14


Гуру
******

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



Цитата(galjoen @ May 20 2010, 17:27) *
Доступ к загрузчику из приложения д.б. запрещён!
На запись и в некоторых устройствах на чтение. Но как, и, главное, зачем запрещать выполнение команды JMP/RJMP на область загрузчика?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
||- - V_G   Цитата(galjoen @ May 21 2010, 01:27) Дост...   May 21 2010, 03:47
|- - aleksey_g   Цитата(galjoen @ May 20 2010, 14:57) Чест...   May 21 2010, 07:03
|- - galjoen   Цитата(Сергей Борщ @ May 20 2010, 23:13) ...   May 21 2010, 12:54
|- - 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


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

 


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


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