Why C++ is Rarely Used in Microcontroller Development?

Follow+Star Public Account Number, don’t miss out on exciting content

Author | strongerHuang

WeChat Public Account | strongerHuang

When it comes to embedded programming, many people’s first impression is C/C++. However, you will find that microcontroller development is mostly done in C, with very few using C++.

So can C++ be used for microcontroller development? The answer is definitely yes.

Below, based on Keil and STM32, I will describe how to use C++ to light up an LED, providing beginners with an overview of using C++ for microcontroller development, and then you will understand why C++ is rarely used for microcontroller projects.

Why C++ is Rarely Used for Microcontroller Development

How well do you understand procedural programming and object-oriented programming?

Why C++ is Rarely Used in Microcontroller Development?C is a procedural language, while C++ is an object-oriented programming language. In the context of this article, procedural programming generates smaller code size (bin files) and has higher execution efficiency compared to object-oriented programming.Therefore, C has a smaller code size (bin files) and faster execution speed compared to C++. Of course, this is in comparison to C++. In fact, assembly language has a smaller code size and faster execution speed compared to C. (Refer to the article: Is it still necessary to learn assembly for embedded development?)Because microcontrollers have relatively small RAM and Flash resources, and their operating speed is also relatively low, you will find that very few people use C++ for microcontroller projects.Actually, as the storage resources and operating speeds of microcontrollers have increased, some engineers have started to use C++ for microcontroller projects.

Preparation Work

In the Keil MDK development environment, using C language for STM32 development is quite common. The steps for installing the development environment, creating projects, etc., will not be discussed in this article. Please refer to my articles:Keil Series Tutorial 01_Introduction, Download, Installation, and RegistrationKeil Series Tutorial 02_Creating a Basic Software Project

This is a basic tutorial for Keil. If there are students who do not understand, you can reply with the keyword “Keil Series Tutorial” in the backend of my public account to read more about using Keil.

Next, you need to understand some basic C++ syntax. The content discussed in this article is quite basic, using fundamental knowledge of C++. For example: classes, objects, and other basic concepts.

If you have not learned C++, it’s okay. As long as you understand C language, you can learn the basics of C++ online, and the difficulty is not high.

Usage Instructions

In the Keil MDK environment, the ARM compiler (Arm Compiler) is used. Many online tutorials use V6 compilation, but both V5 and V6 versions support C++ programming language.

Add C++ source code to the project (for example: main.cpp)

Why C++ is Rarely Used in Microcontroller Development?

Using V5 and V6, there are some differences in project configuration options:

Why C++ is Rarely Used in Microcontroller Development?

The ST development library has already provided support, and you will see a piece of code like this:

#ifdef __cplusplusextern "C" {#endif
// C source code here
#ifdef __cplusplus}
#endif

What does this mean?

This is a piece of preprocessor code, which indicates that it supports mixed programming in C and C++.

Defining the LED Class

In this article, it is assumed that everyone has mastered the knowledge of developing a running LED with C language for STM32, and I will directly describe the C++ code content.

This article discusses a very basic example “LED Lighting”, and there are many methods to implement it using C++. Here, I will present one of the basic methods.

First, create a main.cpp source code file and define an LED class:

class LED_Class {}

Then define private members (public can also be used):

class LED_Class {private:  GPIO_TypeDef *GPIOx; uint16_t GPIO_Pin; uint32_t RCC_APB2Periph;}

Next, the functions used: initializing GPIO, turning on and off the LED, etc.

class LED_Class {private:  GPIO_TypeDef *GPIOx; uint16_t GPIO_Pin; uint32_t RCC_APB2Periph;
public:  LED_Class(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, uint32_t RCC_APB2Periph) {    LED_Class::GPIOx = GPIOx;    LED_Class::GPIO_Pin = GPIO_Pin;    LED_Class::RCC_APB2Periph = RCC_APB2Periph;  }
void Init(void) {      GPIO_InitTypeDef GPIO_InitStruct;
      RCC_APB2PeriphClockCmd(RCC_APB2Periph, ENABLE);          GPIO_InitStruct.GPIO_Pin   = GPIO_Pin;      GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;      GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;      GPIO_Init(GPIOx, &GPIO_InitStruct);  }
void Open(void) {    GPIO_SetBits(GPIOx, GPIO_Pin);  }
void Close(void) {    GPIO_ResetBits(GPIOx, GPIO_Pin);  }};

Isn’t this code very simple? Even if you don’t know C++, as long as you understand C language, you should be able to comprehend it.

Running LED Implementation (main function)

The thought process in C++ is similar to that in C: first initialize, then implement:

int main(void) {LED_Class LED1(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF);LED_Class LED2(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);
  LED1.Init();  LED2.Init();
while(1)  {    LED1.Open();    LED2.Open();    Delay(10);
    LED1.Close();    LED2.Close();    Delay(10);  }}

There is also another way to initialize:

int main(void) {  LED_Class *LED1 = new LED_Class(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF);  LED_Class *LED2 = new LED_Class(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);
  LED1->Init();  LED2->Init();
while(1)  {    LED1->Open();    LED2->Open();    Delay(50);
    LED1->Close();    LED2->Close();    Delay(50);  }}

The compiled code size is relatively larger:

Why C++ is Rarely Used in Microcontroller Development?

Then, if you have a development board, you can directly download it to run the LED blinking phenomenon.

Note:

There are many methods to implement a microcontroller running LED program using C++, such as more advanced inheritance, polymorphism, etc., which can also be introduced. The above is just one approach, guiding beginners to learn C++ programming.

Isn’t it simple? By now, have you mastered it?

———— END ————Why C++ is Rarely Used in Microcontroller Development?● Column “Embedded Tools”● Column “Embedded Development”● Column “Keil Tutorials”● Selected Tutorials in Embedded ColumnFollow the public accountReply “Join Group” to join the technical exchange group according to the rules, reply “1024” to see more content.Click “Read the original text” to see more shares.

Leave a Comment