RTOS应用程序嵌入式开发人员面临几个常见的挑战。让我们研究这些挑战并讨论一些可能的解决方案。挑战#1-选择任务优先级事实证明,有几种不同的方法可以选择任务优先级。首先,响应时间最短。在这种方法中,开发人员检查每个任务的响应时间要求,并为响应时间要求最短的任务分配最高优先级。二是最短作业优先法。在这种方法中,开发人员检查任务的执行时间,执行时间最短的任务是最高优先级(显然次高优先级,依此类推)。最后,还有一种在实时嵌入式系统中最常用的方法,即最短周期优先或更常见的“速率单调调度(RMS)”。在这种方法中,周期最短的任务具有最高优先级。遵循RMS会让你完成95%的任务,然后通常会有一个奇怪的任务,或者不定期的,需要优先考虑。可以为这些非周期性任务分配一个最坏情况周期,或者可以根据它们的重要性、执行时间或它们是否需要在可能需要其数据的另一个任务之前运行来分配它们。(请记住,任务优先级没有正确或错误的答案,只有可能比其他系统表现更好或更有效的系统)。挑战#2-用数据流图看大图嵌入式开发人员在实施他们的RTOS应用程序时没有真正理解数据从哪里来、去哪里以及如何到达那里,导致软件看起来有点像代码混乱而且经常随着更多应用程序的部署,需要不断返工。最小化这种返工并理解整个应用程序的方法是开发一个简单的数据流图。该图包含几个关键组件:DataProducersDataConsumersDataTransferMechanismStorageMechanismTaskCoordinationMechanism有了这个数据流图可以回答许多关于应用程序设计的问题,避免在返工或调试上??浪费大量时间。挑战#3–正确保护共享内存互斥锁用于保护共享内存资源,但在实现中,通常有嵌入式开发人员创建与受保护数据分开的互斥锁。虽然乍一看这似乎没问题,但问题是如果互斥锁是独立于数据结构创建的,并且有人打算使用该数据结构,他们可能没有意识到它是共享和受保护的资源。(是的,文档、设计和许多其他东西应该使这一点显而易见,但如果它自己声明,它很容易被忽视)。解决方案是将共享内存视为一个对象,并将互斥锁作为共享内存数据结构的一部分。例如,共享内存可能包含来自湿度、温度和电流传感器的数据。我们通常可以这样声明数据的结构:typedefstruct{uint16_tHumidity;uint16_tTemperature;uint16_tCurrent;}SensorData_t;此外,互斥量的单独声明可能会使数据共享不那么明显。相反,我们可以定义这样的结构:这是受保护的数据。当他们看到它受到保护时,应该提醒他们在访问数据之前需要获取互斥锁。开发人员经常忘记,仅仅因为创建了互斥锁来保护数据,并不能保证互斥锁将用于访问数据。(这也是为什么将数据结构视为对象并创建函数来限制对在应用程序级别抽象互斥的数据资源的访问和控制是有用的)。实时操作系统可以简化嵌入式系统的时间和资源管理。然而,RTOS确实增加了系统的复杂性,并可能带来意想不到的挑战,从而影响开发进度和代码质量。在今天的文章中,我们了解了嵌入式开发人员经常面临的几个常见挑战,这些挑战可以通过遵循一些最佳实践轻松克服。
