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

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

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

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

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

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

  1. void task3Entry (void * param) {
  2. for (;;) {
  3. task3Flag = 1;
  4. tTaskDelay(1);
  5. task3Flag = 0;
  6. tTaskDelay(1);
  7. }
  8. }

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

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

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

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

  • 为什么在创建任务时,要对任务的堆栈预先填入一些初始化数值?

  • 为什么要按指定的次序依次填入?为什么要填入这些数值,而不是其它数值?

    答案获取

    练习题的答案,请关注微信公众号i01ketang 01课堂,发送相应的答案获取码,即可获得。
    任务切换实现-练习题 - 图1