2016-01-06 4 views
1

У моего TI-Nspire CX CAS есть сломанный аппаратный компонент, а его ADC3 считывает значение ~ 465 единиц, когда для правильной работы оно должно быть ~ 73. Поэтому вместо того, чтобы исправлять аппаратное обеспечение, я хотел попробовать грязное исправление, переназначив местоположение вывода (которое написано калькулятором до 0xC4000170) и заставляя калькулятор читать то, что должно быть правильным, но я понятия не имею, как это сделать.Ремарширование ввода-вывода с памятью

Я должен иметь доступ к C и Assembly (используя ndless). Как мне переделать виртуальную память калькулятора, чтобы он всегда читал значение 73 по этому адресу?

ответ

1

На самом деле относительно сложно переназначить жестко закодированное адресное пространство. В вашем случае, когда вы, вероятно, читаете физический аппаратный адрес, это почти невозможно без существенных изменений ядра.

Как работа вокруг, вы можете изменить фактическую сборку. В этом случае попробуйте установить переменную до 73 на каком-то известном адресе, а затем смените ptr в исполняемом файле на этот известный адрес. Например, измените значение 0xC4000170 на местоположение вашей переменной, которую вы ранее установили равной 73.

1

Использование встроенного ARM9 MMU можно разблокировать периферийное устройство ADC в памяти, а затем использовать обработчик прерывания данных для реализации пользовательского поведения , например, всегда возвращается 73. Однако это не тривиальное обязательство. Хорошей отправной точкой будет https://github.com/ndless-nspire/Ndless/blob/master/ndless/src/resources/lcd_compat.c, что делает что-то подобное с контроллером LCD.