1,操作体系软件的代码不能太长
由于51系列单片机的体系硬件资本相对缺乏,假如操作体系的代码比运用程序的代码还大,乃至使得用户的运用程序要考虑给操作体系让出资本,这样的操作体系即便功用再完善,也不实用。如今盛行的嵌入式操作体系就不能运用于51系列单片机,原因是代码太大。开发一个5000行的基于裸机的运用程序也即是占用 7~8KB ROM空间,一个操作体系用掉了几十KB,占空间不算,实时性的优势恐怕也没了(执行这么多的指令要时间)。所以,μCOS的作者也不支持将他的代码移植到51系列单片机上,这也就不奇怪了。
2,操作体系不能占用太多的片内RAM空间
51系列单片机只要128个或许256个字节的片内RAM空间,略微不留意就用完了。假如操作体系把片内的RAM运用得所剩无几,那用户的运用程序用啥? 假如说用户的程序能够把变量界说在片外RAM中的话,那么体系的硬件仓库放在哪? 尽人皆知,51系列单片机的硬件仓库不能放在片外,所以要在51系列单片机上开发操作体系的话就要少用它的片内RAM。可是不用片内RAM是办不到的,由于操作体系也要传递参数,也要运用仓库。C51单片机的C函数传递参数是经过寄存器和存储器的,不能经过仓库。可是能够经过一些措施使得操作体系代码少用片内RAM。
3,解决好函数的重入疑问
开发实时占先式的操作体系,可重入函数是非用不可的。可重入函数能够被一个以上的使命调用,而不用忧虑数据被损坏。可重入函数任何时候都能够被间断,一段时间后又能够运转,而运用数据不会丢失。使得函数具有可重入性有必要使得函数能够满意下列三个条件之一:
① 不运用共享资本;
② 在运用共享资本时关间断,运用完毕后再开间断;
③ 在运用共享资本时请求信号量,运用完后开释信号量。
这些条件在标准C中编程很简单完结,可是在Keil C51中就比较费事。由于标准C是把局部变量分配到用户仓库中(动态分配),而Keil C51将局部变量分配到寄存器或内存固定地址(静态分配),并经过变量覆盖分析的办法,使多个函数的局部变量运用一样的内存地址以减少内存占用。在 Keil C51中,假如局部变量分配在寄存器中还好些,假如局部变量分配在内存中就比较费事。
4,仓库的分配疑问
占先式操作体系的主要使命即是进行使命的调度,经过对使命的实时调度来完结体系的功用。使命调度过程中,不可避免的发作使命对体系资本的抢占疑问,由于体系中 CPU只要一个,而每个使命都以为自个是CPU的绝对占用者,每一个使命都是一个死循环。使命间进行切换的根据即是各自的优先级,一个高优先级的使命能够经过使命调度函数或许间断退出函数等来间断正在运转的使命。被间断的使命只要自个的优先级在当时安排妥当使命表中最高时,才能从被间断处继续运转。这就需求为每个使命分配使命仓库,来保留使命的环境变量。由于每个使命在不一样时间被间断时需求保留的环境变量数目不一样,所以使命仓库空间的分配疑问也是一门学识。