Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тест команд перехода
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
DiMonstr
Есть код, который тестирует команды перехода контроллера 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
Maik-vs
Действительно, монструозная задачка.
07.gif Зачем, интересно? есть сомнения в правильной работе контроллера?
Что значит "определить смещение"? Относительно чего? Адрес в памяти программ определяется наведением мыши на метку (в AVR Studio) ну или по map-файлу, компилер его должен генерить.
Baser
Дежавю laughing.gif

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

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

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

будет вызван отказом в работе команды перехода, а не отказом флага прерывания I cool.gif
gormih
Задача попахивает болезнью под названием шизофрения - не обижайтесь.

На счет опредления смещения тривиально - смотрите файл с расширением .map после компиляции - там численное значение всех меток.
DiMonstr
Цитата(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, т.к. их проверка у меня тоже проводится.
_Pasha
В общем так.
Проверить сам себя проц не может.
Может только другой проц - через житаг, например, либо проверкой пинов при выполнении какой-либо тестовой задачи. Советую подумать об этом именно в таком ключе.
МП41
DiMonstr, а есть идеи, как АЛУ проверить? smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.