
1) 【一句话结论】:在按摩椅电机控制场景下,实时任务调度系统需采用基于优先级的抢占式调度策略,将电机控制等关键任务设为最高优先级,通过固定优先级分配确保其响应时间满足硬实时要求,同时结合时间片轮转处理非关键任务,保障系统整体稳定性。
2) 【原理/概念讲解】:首先解释实时系统的分类:硬实时(任务必须在截止时间内完成,否则系统失效,如电机过载保护);软实时(允许一定延迟,如用户界面响应)。任务调度核心是“任务优先级划分”和“调度算法选择”。优先级划分原则:根据任务响应时间需求(如电机控制需快速响应,优先级高)、任务周期(周期短的任务优先级高)、中断优先级(硬件中断优先于软件任务)。调度算法:固定优先级(静态分配,如按摩椅中电机控制任务固定为最高优先级)、动态优先级(如EDF,根据任务剩余时间调整优先级,适合周期不固定任务)、时间片轮转(适合软实时任务,如状态监测)。类比:交通信号灯(固定优先级,红绿灯按固定顺序切换,类似固定优先级调度);工厂流水线(不同工序任务按优先级顺序执行,类似任务优先级划分)。
3) 【对比与适用场景】:
| 调度算法 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 固定优先级 | 静态分配任务优先级,运行时不变 | 简单高效,优先级高的任务优先执行 | 电机控制(硬实时)、初始化任务(低优先级) | 可能导致优先级反转(低优先级任务阻塞高优先级任务) |
| 动态优先级(EDF) | 根据任务剩余执行时间和截止时间动态调整优先级 | 更灵活,能保证最短剩余时间任务优先 | 用户指令处理(周期不固定)、状态监测(周期可变) | 计算复杂度较高,需实时计算剩余时间 |
| 时间片轮转 | 每个任务按固定时间片轮流执行 | 适合软实时任务,保证公平性 | 系统状态更新(非关键任务)、日志记录 | 时间片过短会导致上下文切换开销大,过长则降低实时性 |
4) 【示例】:假设使用FreeRTOS,任务划分如下:
void MotorControlTask(void *pvParameters) {
while(1) {
// 读取电机状态
uint32_t motorSpeed = ReadMotorSpeed();
// 根据用户指令调整速度
if (userCommand == SPEED_UP) {
SetMotorSpeed(motorSpeed + 100);
} else if (userCommand == SPEED_DOWN) {
SetMotorSpeed(motorSpeed - 100);
}
// 检查过载保护
if (motorSpeed > MAX_SPEED) {
TriggerOverloadAlarm();
}
// 任务延迟,模拟周期执行
vTaskDelay(pdMS_TO_TICKS(10)); // 10ms周期
}
}
void UserCommandTask(void *pvParameters) {
while(1) {
// 读取用户按键
uint8_t command = ReadUserButton();
// 更新全局变量
userCommand = command;
// 任务延迟
vTaskDelay(pdMS_TO_TICKS(20)); // 20ms周期
}
}
void StatusMonitorTask(void *pvParameters) {
while(1) {
// 读取系统状态(如温度、电流)
uint16_t temp = ReadTemperature();
uint16_t current = ReadCurrent();
// 存储到日志
LogStatus(temp, current);
// 任务延迟
vTaskDelay(pdMS_TO_TICKS(100)); // 100ms周期
}
}
调度流程:系统启动后,vTaskStartScheduler()启动调度器,优先级高的电机控制任务优先执行,当电机控制任务执行时,用户指令处理任务等待,状态监测任务在低优先级时执行。若电机控制任务因过载触发中断,中断服务程序(ISR)优先执行,完成后返回任务调度器。
5) 【面试口播版答案】:面试官您好,针对按摩椅电机控制任务,实时调度系统的设计核心是“优先级抢占式调度”,确保电机控制等关键任务快速响应。首先,任务优先级划分:电机控制(最高优先级,硬实时,需快速调整速度、过载保护)、用户指令处理(中优先级,软实时,处理用户按键)、状态监测(低优先级,非关键任务,记录系统状态)。调度策略采用固定优先级+时间片轮转结合的方式:电机控制任务固定最高优先级,抢占其他任务;用户指令处理任务采用时间片轮转(20ms时间片),保证公平性;状态监测任务按100ms周期执行。通过这种设计,电机控制任务能在10ms内完成一次周期性执行,满足硬实时要求,同时系统整体稳定。具体来说,电机控制任务优先级10,用户指令5,状态监测1,使用FreeRTOS的xTaskCreate创建任务,vTaskStartScheduler启动调度,任务间通过信号量或队列通信(如用户指令通过队列传递给电机控制任务)。这样,当用户按下加速键时,指令处理任务将指令放入队列,电机控制任务读取队列后立即调整速度,整个过程延迟控制在几十毫秒内,满足按摩椅的实时性需求。
6) 【追问清单】:
7) 【常见坑/雷区】: