Сообщение от nonamedov
|
Такая программа через определенное число прерываний обязательно вызовет переполнение стека.
|
И как бы ей это удалось?
Это старый хакерский прием времен Спектрума, когда надо было либо ввести программу в режим автозапуска, либо для защищенной программы запустить отладчик. Чуть-чуть подправлялся загрузчик так, чтобы загружаемый дамп лег на область стека, а в соответствующие ячейки прописывался адрес старта.
Дело в том, что в стек я внес адрес возврата 0000H, по которому расположена команда JMP start. А на метке start находится команда MOV SP, 07H - и, обломайся стек, тебе нужно опять начинать с начального адреса. Что бы не было в стеке до этого, теперь этой командой уничтожено.
Ну да я же такую "продукцию" выдавать не собираюсь. Это я просто попробовал для себя.
Сообщение от nonamedov
|
я бы на Вашем месте использовал бы отладчик, понимая, что банально, но зато 100% гарантия успеха.
|
Так а я-то что так рвусь Протеус запустить? Именно потому что сразу бы все вопросы отпали, просто сам увидел бы, что происходит.
Вчера один вопрос с Протеусом решился: отсутствие окна с программой, в котором видно пошаговое исполнение оказалось просто глюком, пока проект составлял. После сохранения проекта, когда я перезапустил Протеус и открыл проект, теперь окно появляется само после выбора в меню "Запуск/Перезапуск отладки".
Теперь второй вопрос: а как бы еще увидеть содержимое регистров во время выполнения программы? Если кто знает, где искать, подскажите пожалуйста.
Сообщение от omercury
|
spamkerdyk, что это за устройство вообще?
|
У меня сейчас на крыше (на работе) куча принципиально разных ветряков, и СБ, на которых проводятся эксперименты по поиску оптимальных вариантов сочетаний ветросолнечных установок. Естественно наука хочет иметь данные по соотношению скоростей ветра и скоростей вращения ветряков. Если скорость ветра меряется анемометром, то для ветряков такой опции не предусмотрено. Ну, значит вопрос ко мне.
Но надо не просто померять. Так бы любой частотомер включил и порядок, благо этих дивайсов у нас во всех лабораториях хватает. Надо еще все данные передать на компьютер в базу данных. А для этого там стоит целая установка по сбору данных: напряжения, токи, температура и т. д. Вот теперь еще и обороты добавились. А обороты в цифре они могут взять только в SPI.
Первоначальная программа считала одним процессором обороты сразу с четырех источников: 4 нормализатора - компаратора 0.5 - 130 вольт синусоиды в уровень ТТЛ, их выходы на четыре входа порта процессора, а в программе общий цикл времени и четыре последовательных проверки состояния входов с занесением результата в память. И я наивно полагал, что данные будут забирать по какому-нибудь RS232 - 485. Уже после того, как счет был отлажен, мне объяснили, что данные будут затребоваться по прерываниям в стандарте SPI. Причем их аппарат хотя и инициирует обмен, сам работает только на прием и не может мне передать, по какому именно ветряку требуются данные. Оо-пс! Пришлось растащить программу на четыре процессора, так и родился "монстр", считающий обороты программой, а не аппаратным счетчиком. И решать проблемы с прерываниями.
Сообщение от omercury
|
Это Slave, а кто Master?
|
Я думаю, из предыдущего ясно.