Below, I will combine Keil and STM32 to explain the content of writing a running light program in C++, to see why C++ is not recommended.
Why is C++ rarely used for microcontroller development?
C language is a procedural language, while C++ is an object-oriented programming language. In this context, procedural programming generates a smaller code size (bin file) and has higher running efficiency compared to object-oriented programming.
Therefore, C language has a smaller code size (bin file) and faster running speed compared to C++.
Of course, this is relative to C++. In fact, assembly language has an even smaller code size and faster running speed compared to C. You can refer to the article: What is the difference between writing a running light program in Assembly and C?
Since the RAM and Flash resources of microcontrollers are relatively small, and the running speed is also relatively low, you will find that very few people use C++ to develop projects on microcontrollers.
Preparation Work
Keil Series Tutorial 01_Introduction, Download, Installation and Registration
Keil Series Tutorial 02_Creating a Basic Software Project
This is a basic tutorial for Keil. If there are any students who do not understand, you can reply with the keyword “Keil Series Tutorial” in the background of my public account to read more usage methods of Keil.
Then, you need to understand some basic syntax of C++. The content discussed in this article is quite basic, using very basic knowledge of C++. For example: classes, objects, and other foundational content.
Explanation
Add C++ source code to the project (for example: main.cpp)
There are some differences in project configuration options between V5 and V6:
The development library provided by ST has already supported this, and you will see a piece of code:
#ifdef __cplusplus extern "C" {#endif
// C source code here
#ifdef __cplusplus}#endif
Defining the LED Class
This article discusses a very basic example “LED Lighting”, and there are many methods to implement it using C++. Here is 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: initialize GPIO, turn on, turn off 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); }};
This code is quite simple. Even if you do not know C++, as long as you understand C language, you will be able to comprehend it.
Implementing the Running Light (main function)
The thought process using C++ is similar to C language: 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 larger code size is one reason, but the more important reason is the development of microcontrollers. Historically, they have used C language, and many existing software and mature solutions are based on C language. You can understand that the ecosystem of microcontrollers still belongs to C language rather than C++.

END
Source: Embedded Column
→ Follow for more updates ←