ARM技术论坛
直播中

李伟

7年用户 1524经验值
私信 关注
[问答]

怎么去解决armv8a移植到rt-smart分支系统中出错的问题呢

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

问题
移植后开机出现以下日志,出现了以下错误。

红框为我额外添加的打印。对应的代码如下

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]
", __func__, __LINE__);


rt_kprintf("to_thread->name = %s
", to_thread->name);


rt_kprintf("to_thread->sp = 0x%016X
", to_thread->sp);


rt_kprintf("to_thread->entry = 0x%016X
", to_thread->entry);


rt_hw_context_switch_to((rt_ubase_t)&to_thread->sp);

rt_kprintf("[%s, %d]
", __func__, __LINE__);


#endif /*RT_USING_SMP*/

/* never come back */

}

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

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

回帖(3)

刘润生

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

李伟

2022-6-23 14:58:15
你好,串口已经初始化完,打印可以用。但由于对汇编不是很了解,不是很懂中断跳转的机制。
armv8有可以跑通的bsp吗?我参考参考,当前这份是参考树莓派aarch64修改的
举报

刘润生

2022-6-23 14:58:25
没有的,官方还没有出,目前只支持树莓派,其他的需要你自己去移植试试
举报

更多回帖

发帖
×
20
完善资料,
赚取积分