一个嵌入式使用软件都会在某些时分拜访最底层的固件和进行一些硬件操控。驱动的规划和施行是保证一个体系能够满意其实时性要求的要害。以下5个诀窍是每一个开发者在规划驱动程序时应该考虑的,下面就随咱们一起来了解一下相关内容吧。
1.运用规划形式
规划形式是一个用来处理那些在软件中会重复呈现的问题的处理计划。开发人员能够挑选糟蹋名贵的时刻和预算从无到有地从头创造一个处理计划,也能够从他的处理计划工具箱中挑选一个最适合处理这个问题的计划。在微处理器呈现之初,底层驱动现已很老练了,那么,为什么不运用现有的老练的处理计划呢?
驱动程序规划形式大致分属以下4个类别:Bit bang、轮询、中止驱动和直接存储器拜访(DMA)。
Bit bang形式:当微操控器没有表里设去履行功用的时分,或许当一切的表里设都现已被运用了,而此刻又有一个新的恳求,那么开发者就应该挑选Bit bang规划形式。Bit bang形式的处理计划很有功率,但一般需求很多的软件开支来保证其施行的才能。Bit bang形式能够让开发者手动完结通信协议或外部行为。
轮询形式用于简略地监督一个轮询调度办法中的事情。轮询形式适用于十分简略的体系,但许多现代使用程序都需求中止。
中止能够让开发者在事情产生时进行处理,而不必等代码手动检查。
DMA(直接存储器拜访)形式答应其它外围设备来处理数据传输的需求,而不需求驱动的干涉。
2.了解实时行为
一个实时体系是否能满意实时需求取决于它的驱动程序。写入才能差的驱动是低效的,并或许使不知情的开发者抛弃体系的功用。规划者需求考虑驱动的两个特色:堵塞和非堵塞。一个堵塞的驱动程序在其完结作业之前会阻挠其他任何软件履行操作。例如,一个USART驱动程序能够把一个字符装入传输缓冲区,然后一向比及接收到传输完毕标志符才持续履行下一步操作。
另一方面,非堵塞驱动则是一般运用中止来完成它的功用。中止的运用能够避免驱动程序在等候一个事情产生时阻拦其他软件的履行操作。USART的驱动程序能够将一个字符装入传输缓冲区然后等主程序发布下一个指令。传输完毕标志符的设置会导致中止完毕,让驱动进行下一步操作。
不管哪种类型,为了坚持实时功用,并避免体系中的毛病,开发人员有必要了解驱动的均匀履行时刻和最坏情况下的履行时刻。一个完好的体系或许会由于一个潜在的危险而形成更大的安全问题。
3. 重用规划
在时刻和预算都很严重的情况下为什么还要再造轮子呢?在驱动程序开发中,重用、便携性和可维护性都是驱动规划的要害要求。这儿面的许多特征能够经过硬件笼统层的规划和运用来阐明。
硬件笼统层(HAL)为开发人员供给一种办法来创立一个标准接口去操控微操控器的外设。笼统躲藏完成细节,取而代之的是供给了可视化功用,如 Usart_Init和Usart_Transmit。这个办法便是让任何USART、SPI、PWM或其他外设具有一切微操控器都支撑的一起特色。 运用HAL躲藏底层、特定设备的细节,让使用程序开发人员专心于使用的需求,而不是重视底层的硬件是怎么作业的。一起HAL供给了一个重用的容器。
4.参阅数据手册
微操控器在曩昔的几年里变得越来越杂乱。曾经想要彻底了解一个微操控器需求把握由一个大约包括500页组成的单一数据手册。而现在,一个32位微操控器一般包括由部分的数据手册、整个微操控器系列的材料表、每个外设数以百计的材料以及一切的勘误表组成的数据手册。 开发人员假如想要彻底把握这部分的内容需求了解几千页的文件。
不幸的是,一切这些数据手册都是一个驱动程序能真实合理完成所需求的。开发人员在一开端就要对每个数据手册中包括的信息进行搜集和排序。一般它们中的每一个都需求被拜访以使外设发动和运转。 要害信息被涣散(或躲藏)在每种类型的数据手册中。
5.谨防外设毛病
最近我刚好有机会把一系列的微操控器驱动移植到其他的微处理器上。制造商和数据手册都标明PWM外设在这两个系列的微操控器之间是相同的。 但是,实际情况却是在运转PWM驱动器的时分两者之间有很大的不同。该驱动程序只能在本来的微操控器作业,而在新系列的微操控器上却无效。
在重复翻看数据手册之后,我在数据手册中一个彻底不相关的注脚里发现了PWM外设上电时会处于毛病状况,需求将一个躲藏在寄存器中的标志位清零。在驱动程序完成的开端,承认外设或许呈现的毛病并检查其他看似无关的寄存器过错。