C# Windows CE特点之实时性
C# Windows CE的***一条设计目标是要支持实时系统的开发。在嵌入式编程中,实时性就是指在指定时间内完成指定任务的能力,这些任务可能是计算某个值,记录某次输入,或者是向某个外部设备发送一条命令。很多系统要求无论负荷有多么重,系统都应该能够连续可靠地执行这样的一个任务(或者是一些任务)。
从C# Windows CE 3.0开始,C# Windows CE开发团队就加入了一系列特性以支持实时系统的开发。其中包括支持256个线程优先级(C# Windows CE一直都支持多线程编程)和嵌套的中断请求。C# Windows CE对实时性的支持在C# Windows CE Platform Builder的文档中定义如下:
◆保证高优先级线程安排的上限,但仅对所有排队线程中优先级***的线程有效。
◆在执行高优先级中断服务程序(ISR,interrupt service routine)时保证延时的上限。在内核中专门设置了一些空间用于临时关闭中断服务。
◆确保对调度程序的控制,使其能顺利地安排线程。
实时系统可以根据需求分为两种,一种要求硬实时,另一种则要求软实时。软实时需求的系统在没有严重后果的情况下允许出现一些延时,而硬实时需求的系统中则不能出现任何一点延时。
硬实时需求系统的例子如工厂里控制机器手臂动作的系统。有时也许必须移开这个手臂才能让生产线继续向前流动,或者才能让其它的机器进入生产线开展工作,但是如果没有及时移开它,结果可能会导致这个手臂、产品或者部分生产线被破坏。(我们假设这样的事故会使整条生产线停下来,造成大量时间和成本的损失。)
尽管C# Windows CE提供很好的实时性支持,但.NET精简框架却不是一个理想的构建实时组件的编程接口。这是因为运行时引擎可能会出现各种时间间隔不等的延时。例如,在使用运行时编译执行(JIT,just-in-time)编译器(本章后面会有介绍)装载代码和将代码编译为本地机器代码时,都会出现延时。
托管代码与非托管代码
.NET精简框架代码有时也可作为托管代码,但对应用程序程序员来说,它最重要的特性是由运行时来管理数据,特别是已清除的数据。尽管代码也可以被托管,但是必须确保其中没有错误的内存指针。本书第3章将重点介绍这个问题。
相反,Windows API代码有时也可作为非托管代码。这是一种以.NET为中心处理问题的方法,尽管我们有时使用如本地代码和Win32代码之类不同的术语来指代它。
C# Windows CE遇到的问题,另外,当垃圾回收器工作的时候也可能出现延时,因为这时所有在托管代码中运行的线程都被冻结了,然而非托管代码则不会。因此,.NET精简框架托管代码可以支持实时线程16,但是多数情况下实时线程是通过调用Win32的DLL在非托管代码中实现的。当然,以上只是一些基本原则,如果是一个很快的CPU,系统负荷也很轻,在托管代码中运行的线程也能提供足够快的响应以满足这个系统实时性支持的要求。对于定时和性能的关系,我们需要“三思而后行”(measure twice and cut once),测量所需性能的次数往往跟错失实时性底限的程度成正比。
C# Windows CE特点之实时性的相关内容就向你介绍到这里,希望对你了解和学习C# Windows CE特点之实时性有所帮助。
【编辑推荐】