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

 
 
> Тест команд перехода
DiMonstr
сообщение Nov 30 2008, 16:41
Сообщение #1


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

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Есть код, который тестирует команды перехода контроллера AVR. После положительного теста каждой команды увеличивается значение счетчика R17. После теста это значение будет суммироваться с адресом смещения подпрограммы TESTJMP_FINISH. В результате должна выполниться эта строка кода:
RJMP TESTJMP_FINISH_COMPLETE
Количество команд зацикливания на себя RJMP $ равно значению счетчика R17.
Если хоть одна команда перехода отработает не правильно, то значение счетчика будет не верно и выполнение программы попадёт в программную ловушку
RJMP $
Вопрос: как мне определить смещение подпрограммы TESTJMP_FINISH?



Код
...
...
...
    ;//////////////////////////////////////////////////////////////////////////
    ;// 21. TEST BRIE перехода(Перейти если флаг I=1)
                SEI            
                BRIE            TESTJMP_SUCCESS_BRIE
    ;// Ошибочный переход(I=0)
        CALL        TESTJMP_FINISH
TESTJMP_SUCCESS_BRID:
        INC        R17                
                
    ;//////////////////////////////////////////////////////////////////////////
    ;// Формируем адрес перехода исходя из результатов тестов R17=0x19

                LDI             R31, 0x01                
                LDI             R30, 0x2C
            
                
    ;//////////////////////////////////////////////////////////////////////////
    ;// Косвенный переход в зависимости от результата в регистре Z:R30,R31
        IJMP
//        CALL        TESTJMP_FINISH_COMPLETE

    ;//////////////////////////////////////////////////////////////////////////
    ;// Програмные ловушки
TESTJMP_FINISH:
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $                
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $                
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            TESTJMP_FINISH_COMPLETE          
                RJMP            $                
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $
                RJMP            $                

;//////////////////////////////////////////////////////////////////////////
;// Тест прошёл успешно
TESTJMP_FINISH_COMPLETE:
    LDI        R17, 0x04
    sts     $2000, R17

    XCALL   __low_level_init

    REQUIRE ?cstartup_call_main
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
Maik-vs
сообщение Nov 30 2008, 18:02
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Действительно, монструозная задачка.
07.gif Зачем, интересно? есть сомнения в правильной работе контроллера?
Что значит "определить смещение"? Относительно чего? Адрес в памяти программ определяется наведением мыши на метку (в AVR Studio) ну или по map-файлу, компилер его должен генерить.
Go to the top of the page
 
+Quote Post
Baser
сообщение Nov 30 2008, 18:13
Сообщение #3


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Дежавю laughing.gif

Тестирование команд перехода

А вообще, как вам уже говорили (да и не вам тоже, напр. некоему Дону Амброзио) , реализация самотестирования ядра процессора при помощи самого ядра, не дает никакой гарантии верности результатов тестирования smile.gif

С чего вы, например, взяли, что отрицательный результат теста
Код
   ;// 21. TEST BRIE перехода(Перейти если флаг I=1)
                SEI            
                BRIE            TESTJMP_SUCCESS_BRIE
   ;// Ошибочный переход(I=0)
        CALL        TESTJMP_FINISH

будет вызван отказом в работе команды перехода, а не отказом флага прерывания I cool.gif
Go to the top of the page
 
+Quote Post
gormih
сообщение Nov 30 2008, 23:53
Сообщение #4


nofb
***

Группа: Свой
Сообщений: 430
Регистрация: 18-05-06
Из: Москва, Зеленоград
Пользователь №: 17 218



Задача попахивает болезнью под названием шизофрения - не обижайтесь.

На счет опредления смещения тривиально - смотрите файл с расширением .map после компиляции - там численное значение всех меток.


--------------------
Это не то что вы подумали ...

Go to the top of the page
 
+Quote Post
DiMonstr
сообщение Dec 1 2008, 04:14
Сообщение #5


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

Группа: Свой
Сообщений: 81
Регистрация: 26-10-06
Из: Россия, Пенза
Пользователь №: 21 706



Цитата(Baser @ Nov 30 2008, 21:13) *
Дежавю laughing.gif


Мужики, и правда крышу понеслоsmile.gif
Просто моя сегодняшняя реализация меня не устраивает. Сегодня вот начал просматривать код решил снова понять как это сделать.


Цитата(gormih @ Dec 1 2008, 02:53) *
Задача попахивает болезнью под названием шизофрения - не обижайтесь.

На счет опредления смещения тривиально - смотрите файл с расширением .map после компиляции - там численное значение всех меток.



На счёт map файла я в курсе, но смещение после изменения кода и компиляции будет меняться.

Цитата(Baser @ Nov 30 2008, 21:13) *
С чего вы, например, взяли, что отрицательный результат теста
Код
  ;// 21. TEST BRIE перехода(Перейти если флаг I=1)
                SEI            
                BRIE            TESTJMP_SUCCESS_BRIE
  ;// Ошибочный переход(I=0)
        CALL        TESTJMP_FINISH

будет вызван отказом в работе команды перехода, а не отказом флага прерывания I cool.gif


Я имел ввиду и все флаги регистра SREG, т.к. их проверка у меня тоже проводится.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 1 2008, 08:21
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



В общем так.
Проверить сам себя проц не может.
Может только другой проц - через житаг, например, либо проверкой пинов при выполнении какой-либо тестовой задачи. Советую подумать об этом именно в таком ключе.
Go to the top of the page
 
+Quote Post
МП41
сообщение Dec 1 2008, 09:14
Сообщение #7


4 синих кубика
****

Группа: Участник
Сообщений: 526
Регистрация: 19-09-08
Из: полупроводника, металла и стекла
Пользователь №: 40 326



DiMonstr, а есть идеи, как АЛУ проверить? smile.gif


--------------------
p-n-p-p-n-p-n-n-p-n-p структура однако очень эффективна
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:40
Рейтинг@Mail.ru


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