繁体   English   中英

重新映射内存映射的I / O

[英]Remapping Memory-Mapped I/O

我的TI-Nspire CX CAS的硬件组件损坏,其ADC3的读数约为465个单位,正常运行时应为73个单位。 因此,我不想修复硬件,而是想通过重新映射输出位置(由计算器写入0xC4000170)并强迫计算器读取正确的值来尝试进行肮脏的修复,但是我不知道如何。

我应该可以使用C和Assembly(使用ndless)。 我将如何重新映射计算器的虚拟内存,使其始终在该地址读取值73?

重新映射硬编码的地址空间实际上相对困难。 在您可能读取物理硬件地址的情况下,如果不进行大量内核修改,几乎是不可能的。

解决方法是,您可以更改实际的装配体。 在这种情况下,请尝试在某个已知地址处将变量设置为73,然后将可执行文件中的ptr更改为该已知地址。 例如,将0xC4000170更改为您先前设置为73的变量的位置。

使用内置的ARM9 MMU,可以取消映射内存中的ADC外设,然后使用数据中止处理程序来实现自定义行为,例如始终返回73。但是,这并不是一件容易的事。 一个很好的起点是https://github.com/ndless-nspire/Ndless/blob/master/ndless/src/resources/lcd_compat.c ,它与LCD控制器的功能类似。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM