原创 自行开发的一种嵌入式实时操作系统

2008-9-3 22:32 2536 3 5 分类: 汽车电子

过去一直用vxWorks,虽然它很好用,但它的体积很大,无法直接在单片机上使用,而其他的商业RTOS(如WINSEK,NUCLEUS等)又很难用,于是就自行开发了ZRTOS用于我的产品开发,潜水了几年回过头来看世上还是没有好的单片机RTOS,什么FREERTOS,uC/FS,OSEK类 很是bullshit,因此发出来以使食读者。


摘要


Z-RTOS 是本人自行开发的一种先进的嵌入式实时操作系统。本人已经用了多年了,完全bullet-prove or non error at all, Z-RTOS 由任务执行优先等级安排,存储管理,驱动器和软、硬件组合等部分组成。 Z-RTOS仅需要很少的计算机资源(例如仅使用少于100 8-字节读写( RAM)内存, 4K 8-字节的ROM)。Z-RTOS 性能可靠、运行高效。


Z-RTOS中API简介


在Z-RTOS中,有四类API(Application Interfaces) ,它们是1、Z-RTOS核API;2、驱动器组合API;3、任务运行参数组合API;4、应用任务组合API。


以下就是Z-RTOS的API表


1) Z-RTOS 核(core) API


RTOS_STATUS rtos_taskInit(void * buf, void * FAR srvwdt, unsigned char size);
/* package initialization */
RTOS_STATUS rtos_taskSpawn(
char priority,                   /* spawn a new task */
RTOS_FUNCPTR code,   /* task code */
long arg0 //, long arg1        /* task argument */ 
);
RTOS_STATUS rtos_taskDelay(long tick);
RTOS_STATUS rtos_taskSuspend(unsigned char taskId);
RTOS_STATUS rtos_taskDelete(unsigned char taskId);
RTOS_STATUS rtos_taskResume(unsigned char taskId); 
long rtos_taskShow (unsigned char tid);
short rtos_taskIdSelf(void);
void rtos_taskScheduler(void);
void rtos_taskTick(void);
unsigned long rtos_tickGet (void);
RTOS_SEM_ID rtos_semBCreate(short options, short initialState);
RTOS_STATUS rtos_semTake(RTOS_SEM_ID semId, long timeout);
RTOS_STATUS rtos_semGive(RTOS_SEM_ID  semId);
RTOS_STATUS rtos_semFlush(RTOS_SEM_ID semId);
RTOS_STATUS rtos_semDelete(RTOS_SEM_ID semId);  
RTOS_STATUS rtos_semWaitList(RTOS_SEM_ID semId);    
short rtos_intLock(void);
void rtos_intUnlock(short lockKey);   
long memPartitionInit(void * buf, unsigned long buf_size, unsigned short max_num_part);
void * rtos_malloc (long nBytes);
void rtos_free (void *ptr);
int rtos_memFindMax(void);
RTOS_STATUS rtos_iosInit(void* buf, short size);
RTOS_FD_TYPE rtos_iosDrvInstall(RTOS_FUNCPTR  pRead, RTOS_FUNCPTR  pWrite); 
RTOS_FD_TYPE rtos_iosDrvDelete(short name); 
RTOS_FD_TYPE rtos_iosDrvAdd(RTOS_FD_TYPE pDrv, short name, RTOS_FD_TYPE drvnum);
RTOS_FD_TYPE open(short name);
RTOS_FD_TYPE read(RTOS_FD_TYPE fd, char * buffer, size_t maxbytes);
RTOS_FD_TYPE write(RTOS_FD_TYPE fd, char * buffer, size_t maxbytes); 
long getFds(RTOS_FD_TYPE fd); 
void bzero(char *buffer,
/* buffer to be zeroed */ int nbytes /* number of bytes in buffer */);
RTOS_FD_TYPE select(fd_set* pRead, long timeout);
RTOS_FD_TYPE rtos_selWakeupAll(RTOS_FD_TYPE fd);  



2) 驱动器组合(Device driver configuration)API


void rmADevice(DEV_ID_TYPE * FAR device);
void addDevice(DEV_ID_TYPE * FAR device);
long showDevice(U8 id);


 


3) 任务运行参数组(Parameter configuration) API


RTOS_STATUS addParameter(parameter_type * FAR ptr); 
parameter_type * FAR getParameter(parameter_type * FAR ptr);
RTOS_STATUS setParameter(parameter_type * FAR ptr, long ref);
RTOS_STATUS defaultParameter(parameter_type * FAR ptr);
long getParameterByName(U16 name);
void flashParameter(void);
long showParameter(U8 id);
void paraInit(void);
long * FAR getTaskIDAddress(void);
 


4) 应用任务组合(Application task configuration)API


void rmAFeature(FEATURE_TASK_TYPE * FAR feature);
void addFeature(FEATURE_TASK_TYPE * FAR feature);
long showFeature(U8 id);


与其它实时操作系统的比较


目前在工程上较为流行的实时操作系统有windRiver’s vxWorks,windSEK,还有QNX,微软的Window CE,Linux相关的,和其它OSEK类型的实时操作系统。然而在Z-RTOS在以下的方面有技术上的优势:


1、Z-RTOS需要最少的内存RAM和ROM。


Z-RTOS可以在4K ROM及少于100 RAM的嵌入式芯片上使用。因此,对多数应用,Z-RTOS可直接利用嵌入式芯片上的RAM和ROM,无需使用附加内存。 VxWorks, QNX, Window CE 和 Linux 需要多得多的RAM和ROM来支持。WindSEK或OSEK类型的操作系统也许能在这方面 (RAM or ROM) 与Z-RTOS有接近的结果,但是这些操作系统的表现能力以及可读性和保持性则不太令人满意。


2、Z-RTOS可以控制更多的驱动器。


在一个嵌入式系统中, vxworks可以允许40-50个驱动器,然而Z-RTOS可以很轻易地控制多达256个驱动器,因此Z-RTOS对多个I/0系统,如汽车、航空及航天工程十分适合。


3、用同样的资源Z-RTOS可控制更多的活动任务。


4、高效。


作为一个试验例子:我们用MC9S12P256(12KRAM,256ROM)作为主芯片,设计一个嵌入式系统。在试验中,我们用CAN信息生成仪,生成高通量的CAN信息,同时用这个嵌入式系统记录这些CAN信息。结果,Z-RTOS的软件系统拥有最低的信息损失率。


5、Z-RTOS可靠性强和无差错。


我们以著名的任务优先反制(priority reverse)为例,与vxWorks作了如下比较。在这个例子中,vxWorks造成了火星探险者号中的著名失误。现在我们花一点时间解释一下Priority reverse。假定有三个任务A、B、C。它们都从一个入口读入数据;任务A有最高的优先权,如果没有数据,任何任务都将会被转变成等待(pended)状态。假如任务C最先试图读数据,随后B和A也跟着读,则任务A、B、C都将进入等待状态。当数据有了时,A将读得数据而且继续取得数据;B和C可能永远得不到读数据的机会。在火星探险者号的例子中,由于低优先的任务被“饿死(starving)”了。因此Watchdog timer不停地重新启动 (constantly reset)。


在Z-RTOS中,所有的供需事件都由操作系统和驱动器用一种完善的方式处理了,任务永远不用担心得不到数据的供应或“饿死”。


在嵌入式系统中,有一种叫“大循环big loop”的软件设计方法,对单片机仍然十分流行。有些改进的“大循环”方法比如用有优先次序的“大循环”来改进系统的性能。Z-RTOS的先进性对这些方法是显而易见的,在大多数的情况下,Z-RTOS所生成的软件,甚至在代码的尺寸上胜过“大循环”。


6、ZRTOS 强大的 Configuration 性能
由于ECU的软件可能出现错误等原因,ECU的软件时常需要更新。人们通常使用Bootloader来实现更新软件。ZRTOS has a very powerful ability of parameter configuration, feature configuration and device configuration. 使用ZRTOS可以省去Bootloader.

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1173375 2008-9-12 11:15

有没有实例产品应用?

用户461316 2008-9-4 09:13

看看你是怎么写的实时操作系统!!!
相关推荐阅读
用户1204612 2009-01-07 04:43
再谈谈配置(Configuration)的重要性
1、华尔街的数字<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />在过去的12个月中,...
用户1204612 2009-01-05 00:59
ZRTOS 应用实例
也许大家有疑问ZRTOS真的好用吗?有没有已知或未知的bug呢?可以负责地讲只要正确地使用,ZRTOS is bug-free. 现在向大家展示一个ZRTOS的应用实例。here is the sou...
用户1204612 2008-12-20 04:09
ZRTOS 的系统配置(Configuration)
ZRTOS 的系统配置(Configuration)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:offic...
用户1204612 2008-12-01 23:20
谈谈AUTOSAR
AUTOSAR是由欧日的主要汽车生产商和一些芯片制造商推出的产业标准或操作系统。其主要动机是为了应对日益复杂的汽车电子系统:提高系统的灵活性;增加系统的更新和升级性能;改善系统的可靠性和稳定性;在设计...
用户1204612 2008-10-12 08:13
ZRTOS的应用篇(2)
ZRTOS的应用篇(2)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />前几天老四看...
用户1204612 2008-09-17 22:26
原代码:ZRTOS的任务篇(2)SPI
1、问题综述:SPI具有连线少,速度较异步串口(UART)快,一个控制口可接多个SPI设备等优点,因此在嵌入式系统中得到广泛的应用。然而在“大循环”或某些RTOS中,对SPI编程往往会遇到代码效率低、...
EE直播间
更多
我要评论
2
3
关闭 站长推荐上一条 /3 下一条