Добрый день. Поднимаю тему из-за непонимания.
Все таки, каким образом портится стек?
Ведь с ними работаю не я, а компилятор. Я же просто пишу функции в текстовом виде и обращаюсь к ним тоже в текстовом виде, а все адреса переходов и запоминание и восстановление регистров делает компилятор...
Написал программу, в которой появился Prefetch abort. Появляется он после следующей строки:
Код
0x00101224 E8BD47F0 LDMIA R13!,{R4-R10,R14}
То есть, после восстановления регистров...
Но восстанавливается что-то странное. Значение R14 - 0x48d9055d, и, конечно, по этому адресу ничего нет...
Программа построена так:
3 юнита:
Процесс 1 (АЦП).с
Процесс 2 (LCD).с
Объединяющий процесс.с
Из объединяющего процесса запускаю Процесс 1, там по прерываниям опрашивается диапазон значений, после выставляется флаг окончания работы. Объединяющий процесс, среагировав на этот флаг, запускает отображение на LCD - Процесс 2. Заметил особенность - если Процесс 2 запускать из Процесса 1, то ошибки не возникает и все работает как надо.
Научите, как такие вещи лечить? Ну нашел я команду, после которой сбой возникает, но что делать дальше? И как таки эти ошибки возникают?
Спасибо.