STM32与FreeRTOS混合编程方法详解:C语言实现指南
c++是面向对象编程,对于一些项目来说,c++编程更加合适!!
这里用stm32cubemax 配置FreeRTOS系统,芯片是F103
一、前面准备工作
stm32cubemax配置,这里就不写了,配置资料比较多。
二、keil配置
1、在Target 下的 MicroLIB 是不支持C++的。
2、配置工程编译时候是–c99,是因为工程里面FreeRTOS是c语言,c++模式会报错。
其他一些资料上面,c++配置成–cpp11或者-cpp 都是把工程配置成c++。在添加FreeRTOS时候是报错的。
我们这里是默认c,编写的c++文件,单独选择–cpp编译,这在后面配置!
三、添加cpp文件,我们调用cpp文件里面的接口函数,不需要修改main.c后缀名。只需要在xx.cpp
的头文件中,把接口函数或者全局变量 包含在#ifdef __cplusplus extern "C" { #endif
中。
1、下面就是#include "ledCPP.h"头文件
#ifndef __LEDCPP_H
#define __LEDCPP_H
#ifdef __cplusplus
extern "C" {
#endif
void ledTask(void *argument);
#ifdef __cplusplus
}
#endif
#endif
2、ledCPP.cpp 源文件代码,这里创建一个led类,来点亮led
/**************************************************************
* c++编译方案
*
*
***************************************************************/
#include "main.h"
#include "ledCPP.h"
#include "FreeRTOS.h"
#include "task.h"
class LED_Class
{
public:
// LED_Class(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)\
// :GPIOx(GPIOx),GPIO_Pin(GPIO_Pin){};
LED_Class(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin)
{
this->GPIOx = GPIOx;
this->GPIO_Pin = GPIO_Pin;
// MX_GPIO_Init();
}
void open()
{
HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_PIN_RESET);
}
void close()
{
HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_PIN_SET);
}
void tiggle()
{
HAL_GPIO_TogglePin(GPIOx, GPIO_Pin);
}
private:
GPIO_TypeDef *GPIOx;
uint16_t GPIO_Pin;
};
void ledTask(void *argument)
{
LED_Class led1(LED1_GPIO_Port,LED1_Pin);
while (1)
{
led1.tiggle();
vTaskDelay(1000);
// HAL_Delay(100);
}
}
3配置CPP文件
这里就是让cpp文件在c++下编译
最后,编程成功,点亮!!
作者:小鱼️遨游