c++设备模板怎么声明和定义

  介绍

这篇文章主要讲解了“c++设备模板怎么声明和定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c++设备模板怎么声明和定义”吧!

将片上外设进行封装,可以使用如下三种技术:

<李>

使用类定义外设,然后创建对象。

<李>

豆荚类实现

<李>

普通的类

<李>

静态模板(所有的成员都是静态的)

这两种模板共同的特点是不需要动态分配内存,区别在于一个是静态访问成员,一个是对象方法访问,豆荚类型无法添加自定义的数据成员。

将一个单片机的全部寄存器声明好以后,如果是简单的单片机,那么就可以直接使用了,例如:PORTA.DDR。v |=0 x01或者USART0.UCSRC。芬欧蓝=0 x00;但是总有一些重复步骤和相关的代码,我们就可以将其封装起来,例如异步计数器的配置步骤就是可以复用的c + +可以使用对象封装这些操作,但遗憾的是,像avr编译器并不支持对象的生成和删除,定义好类之后,是不能用的,因为未定义删除操作符和其他基础的类库,这时可以自定义或者引用一些第三方的类库来解决这些问题,如果不想引用第三方类库的话,那么使用静态类模板也是一个不错的选择。如下所示:

 template
  class  USART  {
  公众:
  ,,,struct  SerialConfig  {
  ,,,,,,,word  baud =, 115200;
  ,,,,,,,byte  data =, USART_DATABIT_8;
  ,,,,,,,byte  stop =, USART_STOP_1;
  ,,,,,,,byte  parity =, USART_PARITY_DISABLE;
  ,,,};
  ,,,__f__  void  init (const  SerialConfig&, conf), {
  ,,,,,,,…
  ,,,}
  ,,,__f__  hword  calUBRR (const  word 波特),{
  ,,,,,,,…
  ,,,}
  ,,,,,//,其他操作
  私人:
  };

使用模板参数传递寄存器是为了提高代码效率,基本是为了复用模板,__f__是一个宏,他将函数成员定义成静态的。在定义完基本模板后,可以对其进行功能扩展或者功能的特化。例如,在初始化时,除了对USART功能寄存器进行设置之外,还要设置rx, tx管脚,这时,可以利用模板的特化技术来实现:

 template<比;
  void 情况::init (const  SerialConfig&,配置),{
  ,,,的处方::init(输入);
  ,,,tx: init(输出);
  ,,,u0_base: init ((u0_base:: SerialConfig&),配置);
  }
  
  template<比;
  void  u1:: init (const  SerialConfig&,配置),{
  ,,,…
  }//,其实可以再次简化,在模板参数总增加管脚定义。

usart0h和usart1的初始化函数可以加进对管脚的初始化,u0_base就是复用模板,我不用在写一遍USART的基本的初始化代码了。使用方法如下:

 using  u0 =, USART;
  
  情况::SerialConfig  sc;
  时间=sc.baud  115200;
  时间=sc.data  USART_DATABIT_8;
  时间=sc.parity  USART_PARITY_DISABLE;
  时间=sc.stop  USART_STOP_1;
  情况::init (sc);
  情况::开始();

感谢各位的阅读,以上就是“c++设备模板怎么声明和定义”的内容了,经过本文的学习后,相信大家对c++设备模板怎么声明和定义这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

c++设备模板怎么声明和定义