Перейти к содержанию
    

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

Есть код, который тестирует команды перехода контроллера 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Действительно, монструозная задачка.

:07: Зачем, интересно? есть сомнения в правильной работе контроллера?

Что значит "определить смещение"? Относительно чего? Адрес в памяти программ определяется наведением мыши на метку (в AVR Studio) ну или по map-файлу, компилер его должен генерить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дежавю :laughing:

 

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

 

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

 

С чего вы, например, взяли, что отрицательный результат теста

   ;// 21. TEST BRIE перехода(Перейти если флаг I=1)
                SEI            
                BRIE            TESTJMP_SUCCESS_BRIE
   ;// Ошибочный переход(I=0)
        CALL        TESTJMP_FINISH

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дежавю :laughing:

 

Мужики, и правда крышу понесло:)

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

 

 

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

 

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

 

 

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

 

С чего вы, например, взяли, что отрицательный результат теста

  ;// 21. TEST BRIE перехода(Перейти если флаг I=1)
                SEI            
                BRIE            TESTJMP_SUCCESS_BRIE
  ;// Ошибочный переход(I=0)
        CALL        TESTJMP_FINISH

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

 

Я имел ввиду и все флаги регистра SREG, т.к. их проверка у меня тоже проводится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем так.

Проверить сам себя проц не может.

Может только другой проц - через житаг, например, либо проверкой пинов при выполнении какой-либо тестовой задачи. Советую подумать об этом именно в таком ключе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DiMonstr, а есть идеи, как АЛУ проверить? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...