章节列表

任务管理模块-练习题

2018-09-11 05:38:32 +0000 李述铜

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

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

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

假设系统中有资源A,只有任务B和中断C对资源A写访问。

为了避免写冲突,需要使用tTaskEnterCritical()/tTaskExitCritical()进行保护。请问中断C中是否需要在写过程中添加这种保护?()

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

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

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

void tTaskGetInfo (tTask *task, tTaskInfo *info) {
    uint32_t *stackEnd;

    // 进入临界区
    uint32_t status = tTaskEnterCritical();

    info->delayTicks = task->delayTicks;                // 延时信息
    info->prio = task->prio;                            // 任务优先级
    info->state = task->state;                          // 任务状态
    info->slice = task->slice;                          // 剩余时间片
    info->suspendCount = task->suspendCount;            // 被挂起的次数
    info->stackSize = task->stackSize;

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

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

答案获取

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