我在给一个没有mmu的cortex-a7移植rtthread nano,请问start_gcc.S中关于mmu的代码应该如何处理?
我尝试直接将这段代码注释掉,注释掉之后的代码运行起来有两个现象:
1、在main函数中写一个死循环,一直执行打印和延时,但是结果是只打印一次(系统中断一直在正常进入)
2、使用静态方法创建线程,发现在进程调度过程中程序会跑飞,经过调试发现跑飞的直接原因是运行我创建的线程时,执行到 __rt_timer_remove(timer)时timer->row[0]->next->priv的地址已经不在RAM中了,导致赋值失败。
谢谢回答!我确认了一下,是有mmu的,只是没有使用,我们是把片内RAM当做内存使用的
是不是要想使用arm的cache,必须也要打开MMU?
@艾那的小强 是的
@aozima
请问,要想使用CACHE,必须打开MMU,这是在哪个手册中能找到相关说明?
另外,问一个关于MMU单独关闭的问题.
我在QEMU-VEXPRESS-A9的工程中,关闭MMU,程序是可以正常运行的.
但是,实际测试在cortex-A7的芯片上,关闭MMU后,会进入vector_dabt中断中.
我有点不明白,为什么不使用MMU会报数据异常.
还望指点一下.谢谢.
@艾那的小强
不开启 MMU 的话,就相当于没有给内存设置属性。默认的内存属性是强序内存,强序内存不支持非对齐访问。你这里触发了 data about 大概率是非对齐访问了。
@whj467467222
但是我看到start.S中已经关闭了Data alignment