armv8a移植遇到的问题。

发布于 2021-06-10 09:49:10

系统环境

armv8-a 64位 4核cortex-a35
移植到rt-smart分支系统中
由于rt没有线程支持aarch64 cortex-a35,因此参考cortex-a72做些相关的改动
当前系统没有开启多核支持

问题

移植后开机出现以下日志,出现了以下错误。
image.png
红框为我额外添加的打印。对应的代码如下

void rt_system_scheduler_start(void)
{
    register struct rt_thread *to_thread;
    rt_ubase_t highest_ready_priority;

    to_thread = _get_highest_priority_thread(&highest_ready_priority);

#ifdef RT_USING_SMP
    to_thread->oncpu = rt_hw_cpu_id();
#else
    rt_current_thread = to_thread;
#endif /*RT_USING_SMP*/

    rt_schedule_remove_thread(to_thread);
    to_thread->stat = RT_THREAD_RUNNING;

    /* switch to new thread */
#ifdef RT_USING_SMP
    rt_hw_context_switch_to((rt_ubase_t)&to_thread->sp, to_thread);
#else
    
    rt_kprintf("[%s, %d]\r\n", __func__, __LINE__);
    
    rt_kprintf("to_thread->name = %s\r\n", to_thread->name);
    rt_kprintf("to_thread->sp = 0x%016X\r\n", to_thread->sp);
    rt_kprintf("to_thread->entry = 0x%016X\r\n", to_thread->entry);
    
    rt_hw_context_switch_to((rt_ubase_t)&to_thread->sp);
    
    rt_kprintf("[%s, %d]\r\n", __func__, __LINE__);
#endif /*RT_USING_SMP*/

    /* never come back */
}

看起来是rt_hw_context_switch_to跳转到timer线程没有成功。

当前没有查找的思路了,跪求有经验的大佬指导一下可以往下调试的手段,或者方向,谢谢!

查看更多

关注者
0
被浏览
60
2 个回答
Aurora_zk
Aurora_zk 2021-06-10
看起来是rt_hw_context_switch_to跳转到timer线程没有成功。

如果串口已经初始化了,可以通过打印的方式来去确定问题,如果没有可以通过注释该部分函数去巡查,看具体问题出现再哪里,才能再去具体排查

aozima
aozima 2021-06-10
拒绝白嫖,拒绝键盘侠!

同类型的问题,建议在原来的问题后面更新。
新开一个问题,容易分散精力。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览