共2条
1/1 1 跳转至页
ZOGLAB 分时操作系统思想在单片机编程中的实现 转自ZOGLAB
问
作为嵌入式系统主控单元——单片机,其软件往往是一个微观的实时操作系统,且大部分是为某种应用而专门设计的。系统程序有实时过程控制或实时信息处理的能力,要求能够及时响应随机发生的外部事件并对该事件做出快速处理。而分时操作系统却是把CPU的时间划分成长短基本相同的时间区间,即“时间片”,通过操作系统的管理,把这些时间片依次轮流地分配给各个用户使用。如果某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做。此时CPU又分配给另一个作业去使用。由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所“停顿”;但用户察觉不出来,好像整个系统全由它“独占”似的。分时操作系统主要具有以下3个特点:① 多路性。用户通过各自的终端,可以同时使用一个系统。② 及时性。用户提出的各种要求,能在较短或可容忍的时间内得到响应和处理。③ 独占性。在分时系统中,虽然允许多个用户同时使用一个CPU,但用户之间操作独立,互不干涉。
分时操作系统主要是针对小型机以上的计算机提出的。一般而言,微处理器(MPU)驱动的通用计算机,系统设计人员对每一台的最终具体应用都是不得而知的,因此,在价格允许的情况下,硬件设计务求CPU时钟尽可能的快;计算及管理能力尽可能的强;程序和数据存储器的容量尽可能的大;各种计算机外设的配接尽可能的详尽等等,特别是采用分时操作系统的机器,因为是一机多用户的管理系统,它的要求就更高了。相对而言,微控制器(MCU)俗称单片机,是一个单片集成系统,它将这些或那些计算机所需的外设,诸如程序和数据存储器、端口以及有关的子系统集成到一片芯片上。从硬件上,单片机系统与采用分时操作系统的计算机系统是无法比拟的。但是,在单片机系统的设计中,设计人员对其最终具体应用是一清二楚的,它的使用环境相对是单一固定的。所控制的过程的可预见性为分时系统思想的实现提供了可能性。具体一点就是:虽然单片机的CPU速度较低,但其任务是可预见的,这样作业调度将变得简单而无须占用很多的CPU时间,同时“时间片”的设计是具体而有针对性的,因此可变得很有效。
一、单片机分时系统的设计
单片机系统往往是一个嵌入式的控制系统,因此目前绝大部分的单片机系统还是一实时系统。能够真正体现分时系统的设计思想的往往是那些多路重复检测控制系统。即便是在这些多路重复检测控制系统中,它的实时性也是非常重要的。也就是说,在单片机系统中应用了分时系统设计思想,但其及时性应首先进行考虑。
1.对单片机分时系统硬件设计的建议
随着单片机性能的提高,单片机系统设计中的一些硬件功能软件化是大势所趋。但同时,一日千里的芯片技术也为低成本的硬件完成高性能的功能提供可能。让一种功能到底是通过硬件实现还是通过软件来实现不能一概而论,只能是通过系统设计让整个系统的性能价格比最高才是每个单片机系统设计者孜孜追求的目标。
在单片机分时系统的硬件设计中,由于对系统的及时性的要求不能降低,而大多数单片机的处理速度相对而言是较慢的。因此,在接口硬件的设计上应采用一些能将信息量保持的器件,如触发器、锁存器。同时要求这些器件应该是三态门输出,因为是多路分时系统,当CPU没有访问到时,器件输出呈现高阻,以利于总线对其他器件的访问。还有,一些用软件比较费时的操作应转给硬件完成。如LED动态显示,没有必要一定用intel 8155或intel 8255硬件接口让软件时时为显示数字而煞费苦心,完全可以用intel 8279或MAX7218及MAX7219这些可编程外围器件来完成,使显示既漂亮又简单。当然,到底哪些功能留给硬件完成,哪些功能留给软件完成,应根据系统的不同而具体设计。总之,应总体考虑,追求最高的性能价格比。
2.单片机分时系统的软件设计
为了合理实现单片机分时系统,还须有完善的调度机制。完善的调度机制主要由调度指针和调度表组成。系统的调度分成两级,一是“路”的调度,相当于指示程序横向进行:从第一路的某一作业到第二路的某一作业,从第二路的某一作业再到第三路的某一作业……从最后一路回到第一路,循环往复。“路”调度的调度指针变化规律是固定不变的,算法简单,即递增一或递减一,循环到头后,再返回到起始。相对应的“路”调度指针还应构造“路”调度表。“路”调度表每一项表示各“路”程序入口地址及跳转指令。以MCS-51单片机为例,采用AJMP addr11作为每一项的内容,则调度表的每一表项占2个字节;当程序较长超过2K字节,则采用LJMP addr16作为每一项内容,占3个字节。所设计的单片机系统共有多少“路”,该调度表就有多少项数。二是作业调度,即相当于指示程序纵向进行:从某一路的第一作业指向该路第二作业,第二作业指向第四作业……也有从第六作业指回第三作业的等等。因稍复杂任务的流向都不可能是单方向性的,从上一作业流到下一作业都要根据系统的检测或运算结果来决定,因此作业调度指针的变化是随机决定的。作业调度表的构成形式与“路”调度表相同,每一项表示各作业模块的程序入口地址及跳转指令。作业调度表指示出各作业执行的一般先后次序,表项数等于一路任务的最大作业数。为了分清每路的任务进程,单片机系统要控制多少路就必须有多少个作业调度指针及相应作业调度表。以上两级指针都为1个字节的整数变量。调度指针与调度表的联系是通过指令JMP A+DPTR实现的。DPTR中是调度表的首地址。累加器A中的内容是调度指针的整数倍,若表项内容是AJMP addr11,则A的值为调度指针乘2;若表项内容是LJMP addr16,则A的值为调度指针乘3。
除了以上主程序的调度设计外,各个作业中共同的功能应放在中断中实现,主要是放在定时器中断。如计时功能应放在定时器定时中断中实现,定时参数的选择应考虑到系统各个作业中各种计时的要求,定时频率一般为最小计时频率的整数倍。任何软件延时都是不允许的。 实现分时控制的关键是在于合理地将系统的功能分解成各个作业模块。作业模块分得越细系统的实时性就越好。虽然单片机的时钟频率较低,在实际应用中当各个作业模块被细分成各个“动作”及简单的运算后,分时系统的实时性是能得到保证的。缺点就是各“路”的控制处理程序被分割得支离破碎,模块化得不到保证。
分时操作系统主要是针对小型机以上的计算机提出的。一般而言,微处理器(MPU)驱动的通用计算机,系统设计人员对每一台的最终具体应用都是不得而知的,因此,在价格允许的情况下,硬件设计务求CPU时钟尽可能的快;计算及管理能力尽可能的强;程序和数据存储器的容量尽可能的大;各种计算机外设的配接尽可能的详尽等等,特别是采用分时操作系统的机器,因为是一机多用户的管理系统,它的要求就更高了。相对而言,微控制器(MCU)俗称单片机,是一个单片集成系统,它将这些或那些计算机所需的外设,诸如程序和数据存储器、端口以及有关的子系统集成到一片芯片上。从硬件上,单片机系统与采用分时操作系统的计算机系统是无法比拟的。但是,在单片机系统的设计中,设计人员对其最终具体应用是一清二楚的,它的使用环境相对是单一固定的。所控制的过程的可预见性为分时系统思想的实现提供了可能性。具体一点就是:虽然单片机的CPU速度较低,但其任务是可预见的,这样作业调度将变得简单而无须占用很多的CPU时间,同时“时间片”的设计是具体而有针对性的,因此可变得很有效。
一、单片机分时系统的设计
单片机系统往往是一个嵌入式的控制系统,因此目前绝大部分的单片机系统还是一实时系统。能够真正体现分时系统的设计思想的往往是那些多路重复检测控制系统。即便是在这些多路重复检测控制系统中,它的实时性也是非常重要的。也就是说,在单片机系统中应用了分时系统设计思想,但其及时性应首先进行考虑。
1.对单片机分时系统硬件设计的建议
随着单片机性能的提高,单片机系统设计中的一些硬件功能软件化是大势所趋。但同时,一日千里的芯片技术也为低成本的硬件完成高性能的功能提供可能。让一种功能到底是通过硬件实现还是通过软件来实现不能一概而论,只能是通过系统设计让整个系统的性能价格比最高才是每个单片机系统设计者孜孜追求的目标。
在单片机分时系统的硬件设计中,由于对系统的及时性的要求不能降低,而大多数单片机的处理速度相对而言是较慢的。因此,在接口硬件的设计上应采用一些能将信息量保持的器件,如触发器、锁存器。同时要求这些器件应该是三态门输出,因为是多路分时系统,当CPU没有访问到时,器件输出呈现高阻,以利于总线对其他器件的访问。还有,一些用软件比较费时的操作应转给硬件完成。如LED动态显示,没有必要一定用intel 8155或intel 8255硬件接口让软件时时为显示数字而煞费苦心,完全可以用intel 8279或MAX7218及MAX7219这些可编程外围器件来完成,使显示既漂亮又简单。当然,到底哪些功能留给硬件完成,哪些功能留给软件完成,应根据系统的不同而具体设计。总之,应总体考虑,追求最高的性能价格比。
2.单片机分时系统的软件设计
为了合理实现单片机分时系统,还须有完善的调度机制。完善的调度机制主要由调度指针和调度表组成。系统的调度分成两级,一是“路”的调度,相当于指示程序横向进行:从第一路的某一作业到第二路的某一作业,从第二路的某一作业再到第三路的某一作业……从最后一路回到第一路,循环往复。“路”调度的调度指针变化规律是固定不变的,算法简单,即递增一或递减一,循环到头后,再返回到起始。相对应的“路”调度指针还应构造“路”调度表。“路”调度表每一项表示各“路”程序入口地址及跳转指令。以MCS-51单片机为例,采用AJMP addr11作为每一项的内容,则调度表的每一表项占2个字节;当程序较长超过2K字节,则采用LJMP addr16作为每一项内容,占3个字节。所设计的单片机系统共有多少“路”,该调度表就有多少项数。二是作业调度,即相当于指示程序纵向进行:从某一路的第一作业指向该路第二作业,第二作业指向第四作业……也有从第六作业指回第三作业的等等。因稍复杂任务的流向都不可能是单方向性的,从上一作业流到下一作业都要根据系统的检测或运算结果来决定,因此作业调度指针的变化是随机决定的。作业调度表的构成形式与“路”调度表相同,每一项表示各作业模块的程序入口地址及跳转指令。作业调度表指示出各作业执行的一般先后次序,表项数等于一路任务的最大作业数。为了分清每路的任务进程,单片机系统要控制多少路就必须有多少个作业调度指针及相应作业调度表。以上两级指针都为1个字节的整数变量。调度指针与调度表的联系是通过指令JMP A+DPTR实现的。DPTR中是调度表的首地址。累加器A中的内容是调度指针的整数倍,若表项内容是AJMP addr11,则A的值为调度指针乘2;若表项内容是LJMP addr16,则A的值为调度指针乘3。
除了以上主程序的调度设计外,各个作业中共同的功能应放在中断中实现,主要是放在定时器中断。如计时功能应放在定时器定时中断中实现,定时参数的选择应考虑到系统各个作业中各种计时的要求,定时频率一般为最小计时频率的整数倍。任何软件延时都是不允许的。 实现分时控制的关键是在于合理地将系统的功能分解成各个作业模块。作业模块分得越细系统的实时性就越好。虽然单片机的时钟频率较低,在实际应用中当各个作业模块被细分成各个“动作”及简单的运算后,分时系统的实时性是能得到保证的。缺点就是各“路”的控制处理程序被分割得支离破碎,模块化得不到保证。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |