blta
blta
看了一下 am335x的源码 ``` RT_WEAK void rt_hw_cpu_shutdown() { rt_base_t level; rt_kprintf("shutdown...\n"); level = rt_hw_interrupt_disable(); while (level) { RT_ASSERT(0); } } ``` rt_hw_trap_udef,未定义指令 rt_hw_trap_swi,触发超级模式 rt_hw_trap_pabt,正在预取指令时,不能完成当前memory访问 rt_hw_trap_dabt 正在访问data,不能完成当前memory 访问 只有上面四种情况,会调用rt_hw_cpu_shutdown,出现显示的断言错误,但 这个PR,一般不会触发这些异常吧,我又在 407上试了,可以解决该小伙伴发现的bug,未出现异常
这个有意思!
可以的,如果只是单纯地加一个rt_schedule_insert_thread_next,确实可以解决 但总感觉调度还是太冗余的,我准备优化一下调度策略: 1. 把running thread保留在readylist,只是状态位发生变化 2. 如果最高的任务处于YIELD状态, list后移一次(6次指针移动) 3. 上诉操作后会保证_scheduler_get_highest_priority_thread返回的就是需要的to_read: - 不需要条件判断了, - 也不需要need_insert_from_thread标记 4. 后面在switch前更新一下状态:如果from_thread == to_thread, to_thread状态为 running; 否则from_thread的状态为ready, to_thread状态为 running; - rt_schedule_remove_thread也不需要在调度器里使用了,只有因延时,资源阻塞时才会从readylist移除 这样会简化很多,不存在来回remove ,insert问题,顺便把这个问题也解决了。 @mysterywolf 帮忙看看有没有问题