使用C++ 编写嵌入式应用程序_c++嵌入式工程,2024年物联网嵌入式开发开发突破20k有哪些有效的路径

79 阅读5分钟

例如:我们来定义一个循环缓冲区类:

循环队列是嵌入式程序设计中常用的数据结构,例如在 串口UART通信中,如果使用终端方式就需要使用循环队列。它大概需要下面几个数据结构和操作:

  1. 缓冲区buffer
  2. 输入指针 input_index;
  3. 输出指针 output_index;
  4. 计数器  counter

操作程序包括

  • init()
  • put(char v)
  • char get()

C语言的代码为:

uint8_t buffer[SIZE];
int input_index;
int output_index;
int counter
void init()
{
input_index=0;
output_index=0;
counter=0;
}
void put(uint8_t value)
{
buffer[input_index++]=value;
if (input_index==SIZE-1) input_inedx=0;
counter++;
}
uint8_t  get(){
int temp;
temp=buffer[output_index++];
if (output_index==(SIZE-1))
   output_index=0;
counter--;
}

 如果使用C++来编写一个循环队列的类:

class circular_buffer {
public:
 circular_buffer();
put(uint8_t val);
 uint8_t get();
private:
 int input_index;
 int output_index;
 int buffer[SIZE];

}
circular_buffer:: circular_buffer()
{
  input_index=0;
  output_index=0;
  counter=0;

}
void  circular_buffer:: put(uint8_t value)
{
buffer[input_index++]=value;
if (input_index==SIZE-1) input_inedx=0;
counter++;
}
uint8_t  circular_buffer:: get(){
int temp;
temp=buffer[output_index++];
if (output_index==(SIZE-1))
   output_index=0;
counter--;
}


    

对象是类的实例,就好比变量是类型的实例。上面的类实例化

circular_buffer mybuffer;

   从形式上看,没有太多的变化,实际上,我们使用Class 描述的循环队列,不那么凌乱。更像是一个硬件的元器件。面向对象程序设计是我们用更接近物理特性的方式来描述物件。用类描述的循环缓冲区更像一个硬件器件。这才是OOP 的独特魅力。

  如果我们在程序中使用多个循环缓冲区的话,使用类(CLASS) 就显得简洁了,只要写成:

circular_buffer inputBuffer;
circular_buffer outputBuffer;

通过C++ 的类,我们将循环缓冲区变成了像一个元器件,我们不在需要关心内部的实现细节,而只需要关心它给使用者呈现出来的性能就可以了。我们也可以使用一个符号来表示。 

circular buffer

 

我们有必要再去学习C++呢?我也疑惑过,以至于很长时间没有去关心Arm公司C++编译器。直到Mbed OS 中大量地使用C++来编写程序,才开始认真地开始研究C++在嵌入式程序设计中的应用。

从C语言转向C++,不仅仅是你要学习新的语言规则,而是要改变编程的思维方式。最有价值的可能不是那些已存在的代码库(给出合适的工具,可以转变它),而是已存在的头脑库。一旦从C语言面向过程的方式转变为面向对象程序设计方式。你的效率会大大提高。所以C程序员学习C++的一项值得的投资。程序员是在用问题空间的术语描述问题的解(例如“把锁链放在箱子里”),而不是用计算机的术语,也就 是解空间的术语,描述问题的解(例如“设置芯片的一位即合上继电器”)。程序员所涉及的是 较高层的概念,一行代码能做更多的事情。

      在MBed OS 中,硬件接口都是使用类来定义。使程序员不需要关注细节,就可以直接访问和控制硬件电路。例如下面这些都是接口类。

DigitalOut 数字输出类

构造函数  

DigitalOut myled(PF_14); 它真正指定了STM32F429 的一个GPIO 脚

成员函数

write (int value);

read ();;

使用方式:

 myled.write(1);
   myled=1;
   myled=!myled;

 看到了吧?使用C++定义的硬件类,使我们控制GPIO 变得非常的方便。

      使用C++ 的类,和类似硬件设计那样,利用简单的功能电路构造构建了一个功能更强大,更智能的硬件零部件。在modular-2 电脑中,所有的I/O 接口板都对应封装了一个接口类(interface Class).将硬件抽象成了软件的类。

IOmoduleClass

     应用程序不再需要了解IO 模块的硬件细节,只要了解接口类就好了。正是由于Mbed OS 使用了C++类来设计API。才成就了Mbed OS 简单易学的特色。

C++ 的类是软件模块化设计的基石。使用类,可以几乎描述所以的物理部件的特性,比如步进电机,ADC 等等。

现在,我爱使用C++ 编写嵌入式程序,这个过程和使用各种元器件搭建PCB板,然后构成一个设备非常相似。编写一个好的类,就好像设计了一个芯片。既可以自己使用,也可以给朋友分享。

 

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!