打印
[软件资料]

轮询操作系统原理

[复制链接]
2059|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jf101|  楼主 | 2024-7-22 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式



轮询系统即是在裸机编程的时候,先初始化好相关的硬件,然后让主程序在一个死循环里面不断循环,顺序地做各种事情。裸机系统通常分成轮询系统和前后台系统。
int main(void)
{
/* 硬件相关初始化 */
HardWareInit();

/* 无限循环 */
for (;;) {
   /* 处理事情 1 */
   DoSomething1();

   /* 处理事情 2 */
   DoSomethingg2();

   /* 处理事情 3 */
   DoSomethingg3();
}
}

轮询系统是一种非常简单的软件结构,通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情。在代码清单中,如果只是实现LED翻转,串口输出,液晶显示等这些操作,那么使用轮询系统将会非常完美。
但是,如果加入了按键操作等需要检测外部信号的事件,用来模拟紧急报警,那么整个系统的实时响应能力就不会那么好了。
假设DoSomethingg3是按键扫描,当外部按键被按下,相当于一个警报,这个时候,需要立马响应 , 并做紧急处理 , 而这个时候程序刚好执行到DoSomethingg1, 要命的是DoSomethingg1需要执行的时间比较久,久到按键释放之后都没有执行完毕,那么当执行到DoSomethingg3的时候就会丢失掉一次事件。
足见,轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低。

使用特权

评论回复
沙发
中国龙芯CDX| | 2024-7-26 22:54 | 只看该作者
轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低

使用特权

评论回复
板凳
szt1993| | 2024-7-27 12:42 | 只看该作者
轮询系统通常只适用于那些只需要顺序执行代码且不需要外部事件来驱动的就能完成的事情

使用特权

评论回复
地板
forgot| | 2024-7-30 14:32 | 只看该作者
轮询系统只适合顺序执行的功能代码,当有外部事件驱动时,实时性就会降低

使用特权

评论回复
5
10299823| | 2024-8-4 09:35 | 只看该作者
在这种系统中,主循环会不断地检查一组预定义的事件或任务,并根据事件的优先级或顺序来决定执行哪个任务。

使用特权

评论回复
6
wangdezhi| | 2024-8-4 10:50 | 只看该作者
// 全局任务状态标志
volatile int task1_flag = 0;
volatile int task2_flag = 0;
// ...

// 主循环
while(1) {
    if (task1_flag) {
        // 执行任务1
        task1();
        // 清除任务1的标志
        task1_flag = 0;
    }
   
    if (task2_flag) {
        // 执行任务2
        task2();
        // 清除任务2的标志
        task2_flag = 0;
    }
   
    // 检查其他任务...
   
    // 等待一段时间或进行其他操作
    delay_ms(10);
}

// 任务1的处理函数
void task1() {
    // 任务1的具体操作
}

// 任务2的处理函数
void task2() {
    // 任务2的具体操作
}

使用特权

评论回复
7
elsaflower| | 2024-8-4 11:41 | 只看该作者

单片机轮询操作系统(也称为轮询调度或循环调度系统)是一种简单的操作系统原理,主要用于嵌入式系统和单片机环境。在轮询操作系统中,CPU按照预定的顺序不断检查各个任务或事件是否需要处理,这种机制不需要复杂的调度算法,适合于简单的应用场景。

使用特权

评论回复
8
houjiakai| | 2024-8-4 12:52 | 只看该作者
每个任务被执行后,程序指针会回到循环的开头,从而进入下一个任务的执行。
如果有外部事件发生,ISR 将被触发,中断当前的任务执行并处理该事件。
ISR 执行完毕后,程序会返回到主循环继续执行。

使用特权

评论回复
9
wilhelmina2| | 2024-8-4 14:42 | 只看该作者
实现简单,代码量相对较少,易于理解和维护。
不需要复杂的硬件支持,适用于资源有限的单片机系统。

使用特权

评论回复
10
rosemoore| | 2024-8-4 16:22 | 只看该作者
轮询系统可能导致高优先级任务响应延迟,因为CPU必须等待当前任务完成才能处理其他任务。

使用特权

评论回复
11
chenqianqian| | 2024-8-5 07:49 | 只看该作者
紧急优先级更高的事件用中断处理啊

使用特权

评论回复
12
jimmhu| | 2024-8-5 11:36 | 只看该作者
虽然主循环是轮询的,但系统仍然依赖于中断来处理紧急事件,如外部中断或定时器溢出。

使用特权

评论回复
13
mmbs| | 2024-8-5 15:23 | 只看该作者
单片机轮询操作系统是一种基于轮询机制的简单操作系统,主要用于管理和调度单片机上的多个任务。在这种系统中,每个任务都被分配一个时间片,系统在每个时间片内执行一个任务,从而实现多任务并发运行的效果。

使用特权

评论回复
14
cemaj| | 2024-8-5 17:16 | 只看该作者
不适合复杂的应用场景,难以处理多个高优先级任务的同时执行。
无法保证任务的执行时间,容易受到长时间运行任务的影响。
对于长时间运行的任务,可能导致其他任务被延迟执行。

使用特权

评论回复
15
mollylawrence| | 2024-8-5 19:08 | 只看该作者
如果检测到事件,系统会根据事件的类型调用相应的处理函数或任务。
任务的调度可以是顺序的,也可以是基于优先级的。

使用特权

评论回复
16
everyrobin| | 2024-8-5 20:55 | 只看该作者
系统在一个无限循环中依次执行各个任务,每个任务在自己的时间片内运行,然后主动放弃CPU控制权,让系统去执行下一个任务。

使用特权

评论回复
17
10299823| | 2024-8-6 10:29 | 只看该作者
在轮询操作系统中,没有复杂的任务切换和中断机制。程序通常在一个无限循环中运行,依次检查各个任务的状态,并执行相应的操作。

使用特权

评论回复
18
benjaminka| | 2024-8-6 12:07 | 只看该作者
实现简单,不需要复杂的调度算法。
上下文切换开销小,因为所有任务都在同一个上下文中执行。
对于简单应用而言,能够满足实时性要求。

使用特权

评论回复
19
mickit| | 2024-8-6 13:40 | 只看该作者
由于单片机的资源有限,上下文切换的过程需要尽量简化。在任务切换时,保存当前任务的寄存器状态,并恢复下一个任务的寄存器状态。

使用特权

评论回复
20
claretttt| | 2024-8-6 15:20 | 只看该作者
每个任务在执行时都应该是非阻塞的,即不应该有无限循环或长时间的延迟操作,以避免阻塞整个系统。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

231

主题

1538

帖子

2

粉丝