[an error occurred while processing this directive]
|
Proc - TMS320C6414.
Проблема в следующем.
Процессор грузит некую программу из ПЗУ. (Сам грузит...)
Программа стартует.
Эта программа перемещает себя с 0-го адреса в область старших адресов.
Потом через двухпортовую память (один порт - это IBM PC) грузит с 0-го адреса уже настоящую программу.
После чего делает JUMP на 0-й адрес.
Эффект такой - начинает работать загрузчик (как бы до своего перемещения).
Думал пишу неправильно. Проверяю - правильно. Затираю загрузчик - один черт. Хуже того, загрузчик позволяет
затереть ВСЮ память и при этом остается в рабочем состоянии.
Дело в том, что ДАННЫЕ пишутся в кэш первого уровня L1. А программа выполняется из L2. Кэш программ и данных разный. В смысле их 2 штуки.
А так как данным нет причины обновиться, то вновь загруженная программа так и сидит в L1, а содержимое L2 остается прежним.
Победить удалось тем, что прорграмму гружу и запускаю с адреса, где еще не ступала нога программы. Тогда - все хорошо.
Еще удалось заставить работать загружаемую программу - писать ее 2 раза подряд в одно и тоже место.
Первый способ нехорош - неуниверсален. Второй - время от времени - (редко, но очень надолго) отказывется работать (пишет программу неполностью!!!)
Может есть стандартные способы победить кэш первого уровня?
E-mail: info@telesys.ru