(1)操作系统软件代码不宜过长
由于51系列单片机的系统硬件资源相对匮乏,如果操作系统的代码大于应用程序的代码,即使是用户的应用程序也应考虑给操作系统提供资源,这样的操作系统即使功能完善也不现实。目前流行的嵌入式操作系统不能应用于51系列单片机,因为代码太大。
开发一个基于5000行的裸机应用程序需要7-8kb的ROM空间。一个操作系统使用数十KB,这不算空间。实时的优势可能会丧失(执行如此多的指令需要时间)。因此,Mucos的作者不支持将他的代码移植到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中,如果局部变量分配在寄存器中还好些,如果局部变量分配在内存中就比较麻烦。 本文由单片机开发整理,此文不代表本站观点。