单片机框架编程整理

单片机裸机编程框架

指导思想

  • 每一个电路模块单独编写驱动 程序。
  • 使用定时器或者cpu来进行时间调度(使用mcu编程框架)
    • 实现非阻塞式的程序调度体系。
  • 文件分层、同级之间不可以互相调用数据
    • 这样可以降低功能模块之间的耦合度,在统一平台下移植或者删减不同的功能模块之时,不会影响其他模块的功能。
  • 各个子文件建立自己的缓冲数据域,使用函数接口的方式来实现缓冲数据的访问。
    • 详细的原因在下面展开叙述。
  • 规范代码书写要求,统一变量和函数的命名格式方便阅读。
  • 某个硬件不正常工作,不能影响其他的硬件。
  • 函数和数据分开控制,不受时间约束。

电路整体的逻辑分层框架

  • 如下图所示:
    单片机框架编程整理_第1张图片

bsp层模块的开发方法

  • 典型:中断类型服务函数的编写
    • step1:查询相应状态标志位。
    • step2:清除状态标志位
    • step3:编写中断服务函数
      • ** 越短越好最好仅仅指示记录一些标志状态位,逻辑处理放到前台程序里面执行。**
      • 符合“快进快出”原则。
  • bsp层尽量不开辟自己的数据缓冲区。

driver层编写方法

  • 驱动层需要提供中断服务函数的具体函数,并且调用bsp层的回调函数注册接口,来实现相关中断外设的数据部分处理。
  • 驱动函数部分,要开辟自己的数据缓冲区,
  • 为了降低使用extern的频率,我们开辟对外的数据缓冲区访问接口,数组则传出首地址(比如,串口的环形缓冲区);

应用层编写方法

  • 应用层之间不允许互相调用接口,必须完全不具有耦合性。
  • 应用层需要处理的数据,都要通过下一级的驱动层数据缓冲访问接口来获取。
  • 尽量少使用extern关键字。

数据之间的交互

  • 整个系统的数据可以分成以下几类:
    • 复杂外设的句柄封装
      • 类似于stm32等复杂外设,需要建立外设句柄之时,该句柄作为内部变量使用,除了在it文件里面可以使用extern之外,不再对外访问使用。
    • 从外设获取的各种数据
      • 此类数据我们可以放置在应用层的数据缓冲区里,在应用层被处理。
    • 全局变量(自上而下的数据)
      • 此类数据的特点是增大了耦合性,它可能会作用在所有的app应用中。
      • 我们可以使用一个头文件和源文件,头文件里面定义出它的数据类型,源文件里面则把初始化以及参数检查,参数保存等及接口实现,此时往往会调用EEprom或者dataflash模块。

头文件之间的包含关系

  • bsp文件包含所有最基础的(如:数据类型,通用模块)头文件模块。
  • driver部分的头文件,只包含用到的bsp.h文件即可。
  • driver部分的源文件,只要去包含自己同名的模块头文件。
  • app部分的头文件,只包含所有的用到的驱动头文件。
  • app部分的源文件,只包含自己同名模块的头文件。
  • main部分只包含所有的app头文件。

应用层的初始化函数包含关系

  • 应用层的初始化调用驱动层的初始化,驱动层的初始化->bsp初始化。

应用层的初始化函数包含关系

  • 应用层的初始化调用驱动层的初始化,驱动层的初始化->bsp初始化。
  • main函数只用来包含应用层的初始化,不在包含被调用外设的初始化。

你可能感兴趣的:(单片机,嵌入式)