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

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

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

假设系统中有资源A,只有任务B和中断C对资源A写访问。
为了避免写冲突,需要使用tTaskEnterCritical()/tTaskExitCritical()进行保护。请问中断C中是否需要在写过程中添加这种保护?()

  • A、需要;
  • B、不需要

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

    任务状态查询接口实现如下。请说明为什么要额外传入一个tTaskInfo结构变量,然后在tTaskEnterCritical()/tTaskExitCritical()将需要的信息从tTask结构中拷贝出来,而不是直接让调用者访问tTask结构;除了向调用者隐藏tTask的实现细节外,是否有其它原因?

    1. void tTaskGetInfo (tTask *task, tTaskInfo *info) {
    2. uint32_t *stackEnd;
    3. // 进入临界区
    4. uint32_t status = tTaskEnterCritical();
    5. info->delayTicks = task->delayTicks; // 延时信息
    6. info->prio = task->prio; // 任务优先级
    7. info->state = task->state; // 任务状态
    8. info->slice = task->slice; // 剩余时间片
    9. info->suspendCount = task->suspendCount; // 被挂起的次数
    10. info->stackSize = task->stackSize;

    思考题三(答案获取码:5421)

    请简述tinyOS中提供了哪几种任务删除方式,并解释删除过程原理?为什么要提供这两种删除方式?

    答案获取

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