DiMonstr 0 30 ноября, 2008 Опубликовано 30 ноября, 2008 · Жалоба Есть код, который тестирует команды перехода контроллера 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 0 30 ноября, 2008 Опубликовано 30 ноября, 2008 · Жалоба Действительно, монструозная задачка. :07: Зачем, интересно? есть сомнения в правильной работе контроллера? Что значит "определить смещение"? Относительно чего? Адрес в памяти программ определяется наведением мыши на метку (в AVR Studio) ну или по map-файлу, компилер его должен генерить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 30 ноября, 2008 Опубликовано 30 ноября, 2008 · Жалоба Дежавю :laughing: Тестирование команд перехода А вообще, как вам уже говорили (да и не вам тоже, напр. некоему Дону Амброзио) , реализация самотестирования ядра процессора при помощи самого ядра, не дает никакой гарантии верности результатов тестирования :) С чего вы, например, взяли, что отрицательный результат теста ;// 21. TEST BRIE перехода(Перейти если флаг I=1) SEI BRIE TESTJMP_SUCCESS_BRIE ;// Ошибочный переход(I=0) CALL TESTJMP_FINISH будет вызван отказом в работе команды перехода, а не отказом флага прерывания I B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gormih 0 30 ноября, 2008 Опубликовано 30 ноября, 2008 · Жалоба Задача попахивает болезнью под названием шизофрения - не обижайтесь. На счет опредления смещения тривиально - смотрите файл с расширением .map после компиляции - там численное значение всех меток. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DiMonstr 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Дежавю :laughing: Мужики, и правда крышу понесло:) Просто моя сегодняшняя реализация меня не устраивает. Сегодня вот начал просматривать код решил снова понять как это сделать. Задача попахивает болезнью под названием шизофрения - не обижайтесь. На счет опредления смещения тривиально - смотрите файл с расширением .map после компиляции - там численное значение всех меток. На счёт map файла я в курсе, но смещение после изменения кода и компиляции будет меняться. С чего вы, например, взяли, что отрицательный результат теста ;// 21. TEST BRIE перехода(Перейти если флаг I=1) SEI BRIE TESTJMP_SUCCESS_BRIE ;// Ошибочный переход(I=0) CALL TESTJMP_FINISH будет вызван отказом в работе команды перехода, а не отказом флага прерывания I B) Я имел ввиду и все флаги регистра SREG, т.к. их проверка у меня тоже проводится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба В общем так. Проверить сам себя проц не может. Может только другой проц - через житаг, например, либо проверкой пинов при выполнении какой-либо тестовой задачи. Советую подумать об этом именно в таком ключе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mp41 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба DiMonstr, а есть идеи, как АЛУ проверить? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться