章节列表

任务切换实现-练习题

2018-03-12 11:36:28 +0000 李述铜

为提升学习效果,建议在阅读完题目后先自行尝试解答。

等待解答完毕之后,再与参考答案对照。参考答案并不一定准确,欢迎你提供自己不同的答案!

思考题一(答案获取码:0132)

我们知道,创建任务时会向任务传递参数,请问对于下面的代码:

tTaskInit(&task3, task3Entry, (void *)0x123456, TASK3_PRIO, task3Env, sizeof(task3Env));

上面的参数值0x123456是怎样传递给param的?

void task3Entry (void * param) {
    for (;;) {
        task3Flag = 1;
        tTaskDelay(1);
        task3Flag = 0;
        tTaskDelay(1);
    }
}

以下是4个选项,请选择:

  • A:将参数值写入任务堆栈,在运行需要时从堆栈直接取值
  • B:将参数值写入任务堆栈,运行前堆栈弹出到R0寄存器
  • C:将参数值写入任务堆栈,内核将值赋值变量param
  • D:将参数值写入tTask4结构,内核运行前赋值给param

思考题二(答案获取码:9328)

对于学习RTOS而言,最核心的是理解任务切换的原理。请结合之前的课程,回答以下内容:

  • 为什么在创建任务时,要对任务的堆栈预先填入一些初始化数值?
  • 为什么要按指定的次序依次填入?为什么要填入这些数值,而不是其它数值?

答案获取

练习题的答案,请关注微信公众号i01ketang 01课堂,发送相应的答案获取码,即可获得。