T113 在使用rt-thread 版本 4.1.1 双核启动没有问题, 但是下载最新的5.2.0 后 代码进入第二个核执行执行 rt_hw_spin_lock 这个函数的时候会卡死在ldrex 和 strex 这两条指令上, 分析是strex 指令返回失败 然后一直在那死循环了, 代码如下
还有个现象就是我如果在rt_hw_spin_lock前调用rt_hw_vector_init
这个函数, 会直接打印数据异常死机, 我怀疑过mmu 配置的问题,过入第二核后先调用 rt_hw_mmu_switch 在调用rt_hw_spin_lock(&_cpus_lock);
现象是一样的,
大家看下大概是什么没有配置后导致第二核在执行ldrex 和 strex 这两条指令会出现异常,
我把第二核心停止,在第一个核执行在调用rt_hw_spin_lock 和在第一个核执行在调用rt_hw_spin_unlock这两个函数是正常的,
我分析了rt-thread 启动代码没看出什么异常了, 想对比4.1.1的启动代码与5.2.0 有什么区别,结果差异太大了不知道是哪一块造成的
4.1.1 刚开始的时候第二核拉的也是不稳定,后面发现是 mmu 配置的时候 0地址要映射的,手册上并没有0x0地址的说明,那个我现在也没有搞明白什么原因了,做了简单的测试没有发现什么问题, 现在我拉了最新的代码 测试发现 rt_hw_spin_lock 这个函数中ldrex和strex 这两个指令异常了,非常奇怪了理论上来说这两个指令除了对mmu内存属性有需求其他没有需求了,我测试了下A9的demo 发现是可以正常运行的
具体咋映射?我有空也试试。
就是映射MMU的时候要把地址
差不多是这种了,什么原因我也不知道, 我用的是t113i
你在5.2.0 上双核可以启动吗,试的话也测试下,我测试到5.0.2 版本查以启动,以后的版本运行 ldrex,strex这两条指令直接异常了
5.2.0 启动文件有Bug,在进入第二核后 没有开启动cp15 smp 功能, ACTLR 控制寄存器的smp 功能在新的启动文件中没有使能,我估计A9 可以正常使用可能是模拟的CPU ACTLR smp默认使能了, 不知道他们专业版怎么处理的
老兄有t113的bsp吗,我也在玩这个的双核,但是我这没进入二核连个崩溃的机会也没给我