我利用空闲时间,日夜赶工,花了三个星期写了一个实时操作系统即RTOS,因目标代码小,我称之为OS_MINI,我的RTOS有如下特点:
1)精简版的OS_MINI,目标代码系统代码只有430字节,系统所占内存约为30字节,
最大支持16个任务,(在AT89c2051上最大只支持8个,每个任务所占堆栈至少6个,用于保存ACC,PSW,R0,R1,以及任务返回地址两字节,其他寄存器没有保存,属于共享资源)
本系统为优先级抢占式任务调度,当任务超时时,支持优先级反转,
2)使用任务为N个时,所占内存为30+6*N+(1+1bit)*n,其中n为每个任务定时模块的个数,可以根据需求加减,在AT89C2051中堆栈地址为50H,堆栈顶为7FH,共48字节,可以支持8个,不过最好不要超过8个,因为堆栈满了,就会造成堆栈溢出
同时每个任务可以设定一个定时模块,用于资源或时间等待,系统也占用一个定时模块,用于任务超时时系统自动切换任务
3)系统中的任务具有如下状态:运行、就绪、挂起,即Task_current,Task_ready,Task_wait,,每个任务就有不同的优先级,任务在挂起过程中支持系统唤起操作,任务唤起操作。
本系统有一个特点,在就绪队列中,各任务优先级相同,轮流运行,只有等待任务唤醒或超时情况下可以抢占CPU,【1.当等待任务唤起时,根据该任务优先级与当前任务比较来决定是否立即运行或切换】或者【2.当当前任务超时时,当前任务就会被抢占,避免每个任务占用过多的时间】,所以实时性比较好
4) 任务间通信可以采用Send(task_id,message,stat),Receive(message,stat),check(task_id,message,stat)方式通信,精简版的OS_mini不支持这些函数,采用全局变量通信,因为要占额外的内存
5)该系统支持动态堆栈功能,仿照的是RTX的堆栈管理方式,优先级高的在低地址,优先级低的在高地址,当下一个任务优先级高时,当前任务向高地址搬迁,反之,向低地址搬迁,中间空出一定的堆栈空间作为当前任务堆栈使用,所以内存的利用率很高
6)系统占用了一个定时器,为任务定时模块、系统定时模块提供时钟,调整范围为T0_INT=1MS-5MS,
任务超时时间为N*T0_INT,N可以设定超时时间长短最大255。
7) 该系统支持中断调用任务调度函数,同时,任务自己也可调用任务调度函数来放弃CPU,如果不自动放弃,任务会因超时,自动被系统剥夺CPU,然后插入就绪列表
以上的介绍是我写的精简版的OS_MINI,还有完整版的OS_mini_full,支持邮箱,优先级继承,信号量通信函数等,
所有的操作系统均用汇编来写的,所以结构精简,代码可以最大的优化,但移植性比较差,不过算法是同样的,同样的思想可以用于不同的单片机
作者:殷文跃, QQ:844721473
邮箱:[email=singleywy@qq]singleywy"at"qq[/email],com
本人大三,学单片机不久,欢迎拍砖,如有需要者可以附送 |