【发布时间】:2013-09-20 15:42:53
【问题描述】:
我想设计和实现一个裸机,OS-likesimple and safe scheduler。
该机制应处理 IRQ 上下文(USB 和 SDH),其中 3-4 个主子例程同时操作 USB 和 SDH 控制器,并且都具有一定的 CPU 使用率。
对于 ARM cortex A12 单核,最好和最有效的方向是什么,以实现安全的调度机制,运行所有子例程(全部在特权模式下)并且可以处理 IRQ 上下文?
【问题讨论】:
-
你写过代码吗?你有更具体的问题吗?有很多免费的实时高管可供您参考。
-
我正在尝试找出正确的设计,然后尝试自己实现它,但我不确定我是否考虑了所有正确的考虑。我已经实现了所有子例程和 irq 处理程序,长代码,但我想包装它们并以正确的方式调度它们。谢谢
-
这绝对需要意见。一个明确的设计标准是先发制人与非先发制人。同样,我会假设没有 MMU?如果它是非抢占式(或合作式),则无需在上下文切换上保存任何寄存器并在汇编器中编写 ISR;这使得调度程序非常高效。我认为 best 是您需要解决的问题的超载部分。
-
也许Simon Tatham coroutines 对您来说很有趣。如果你有的话,也可以看看 Coroutine at wikipedia 或 Donald Knuth 的书。
-
基本上,你有一个处理USB的协程线程。当没有更多数据要处理时,它yield 并且SDH 用户线程或更高层的USB 例程运行。您的 ISR 将 feed 协同例程。我猜 routines 正在处理不同的层。当你有足够大的块时,你可以继续下一层。这有助于 缓存局部性,如果结构正确,您应该会获得更好的 I/O 性能。
标签: c arm scheduling irq bare-metal