【发布时间】:2017-08-17 09:00:27
【问题描述】:
我最近正在阅读有关微控制器(尤其是 AVR)中的实时操作系统的信息,我正在尝试为 (AVR) 编写一个简单的操作系统。我的问题是关于上下文切换...
因此,taskA 执行并被 ISR 中断,该 ISR 决定现在应该运行另一个任务(即 taskB),然后加载 taskB 的上下文(寄存器文件、堆栈指针、状态寄存器),并在退出 ISR 时,因为“堆栈指针”设置在正确的位置(就在 taskB 的程序计数器上方,当 taskB 被 ISR 中断时保存在堆栈中),代码将为 taskB 执行。到目前为止,这是我阅读互联网所理解的。
我的问题是:一切如何开始?如果这是第一次 taskA 被中断,那么为 taskB 加载了什么?堆栈上没有 taskB 的程序计数器,因此没有要加载的堆栈指针。如何编码?
【问题讨论】:
-
它像任何其他操作系统一样由引导加载程序启动。
-
也许这个问题并不清楚,但我正在尝试编写自己的 RTOS ...我不明白如何编写该部分 :)
-
为什么投反对票?
-
“为什么投反对票?” 因为你的问题太宽泛了。您需要编写一个小型引导加载程序来初始化 ISR 并跳转到程序的主入口点。
-
@user0042 :这不是他要问的;他在询问任务/线程启动,而不是操作系统启动。与任何引导加载程序无关。无论如何,这不是引导加载程序启动
main()的方式。像 AVR 这样的微控制器不可能有一个引导加载程序,而不是已经在掩码 ROM 中的简单引导加载程序。您也许应该避免对您根本不理解的问题投反对票。我的任何衡量标准都不算太宽泛。
标签: c++ c operating-system embedded