单片机外部:
OOOOH--1FFFH:程序存储器的地址,系统程序所在的地方;
2000H--20FFH:进程列表,每次分隔3个字节,用来记录每个进程的ID号、各进程所用资源的高低位地址(DPH与DPL);
2200H--3FFFH:每次分隔256字节,给每个进程用,作为各进程所占有的资源;剩余地址则用在其他方面。在具体编写程序时,又做了如下规定:
1.进程运行时不得使用规定以外的资源,公共资源不包括在内;进程运行完后不释放资源,直到有其他新的进程代替该进程;
2.进程间不设通信。这一点读者可根据需要而定;
3.每个进程所能运行的时间为10ms.系统中断程序的运行时间不算在内。读者可根据需要而定。
4.30H存放的进程号,做如下处理:第0-3位为进程号,第6位为特殊进程标志位,第7位为进程运行完毕标志。因此当第7位为O时,进程处于等待或运行状态,第7位为1时,该进程运行完毕;
5.对进程列表中的单元做如下处理:第一个地址为进程的进程号及进程状态,第二个地址为进程的高位资源地址,第三位为进程的低位资源地址。
6.对进程的资源做如下处理:前64字节用来保存单片机内部存储器的数据,第O字节用来存放堆栈指针,第1字节存放高位PC,第2字节用来存放低位PC;第1-63字节用来存放50H-7FH中的数据(在堆栈中保留有中断返回的PC,此PC作为进程切换依据);剩下192字节的在其他情况中使用,所以这个系统在运行时添加新进程的最大长度不能大于192字节。
设计的这个分时操作系统的基本流程图如图所示。核心的中断程序如下:
在上面的程序中,没有检查进程的等级,进程等级仅作为特殊情况下用,一般可以不用。要改变进程的运行状态,只要在进程结束时将进程号的最高位置1即可。实现这部分的关键是保存好进程的PC及进程的运行环境,转换时将其恢复即可。整个系统做如下处理:
接下来要做的就是将进程的所在的位置写入进程所占的资源中,打开时钟中断,让进程开始运行,这样就可以简单地实现分时操作。将其运用到的一个实验板中,取得了比较好的效果。该程序还可以进一步完善,以达到更好的效果。