目录
- Unix操作系统里的优先级
- 嵌入式系统里的优先级
Unix操作系统里的优先级
在《Unix传奇》中有这样一句话,用户态的进程/线程是三等公民、root线程是二等公民、硬件中断是一等公民。
在操作系统中,"用户态"和"内核态"是两种不同的执行级别或模式。进程和线程是用户态下的执行实体,而硬件中断处理则通常在内核态进行。这里的“三等公民”、“二等公民”和“一等公民”是形象地描述它们在资源访问权限和优先级上的不同。
嵌入式系统里的优先级
在嵌入式系统的所有线程中,app_task掌握其他任务的生杀大权,它的时间流程是确定的。
因此,在嵌入式框架中,我们往往也会采用 执行具体任务的线程是三等公民、app_task是二等公民、硬件中断是一等公民。
下面我们以一个嵌入式的语音助手为例,分别探讨其内部的组成。首先先展示下它的整体框图。
-
硬件中断
-
app_task
在app_task中,我们使用switch语句确保每个时刻都只处于一个状态。
static void app_task(void *arg) {
while (true) {
switch (state) {
//等待唤醒
case WAKEUP_WAITING: {
} break;
//开始录音和上传
case RECORDING: {
} break;
//等待服务器返回音频
case PLAY_WAITTING: {
} break;
//等待播放完成
case PLAY_DONE_WAITING: {
} break;
//连续对话
case VOICE_DETECT: {
} break;
//结束本次唤醒
case END: {
} break;
}
}
- 执行具体任务的线程
app_task给其他任务发送任务通知,
并且,其他每个任务都有事件组负责监控任务状态。
任务与任务之间一般使用队列进行通讯。