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++下编译

最后,编程成功,点亮!!

作者:小鱼️遨游

物联沃分享整理
物联沃-IOTWORD物联网 » STM32与FreeRTOS混合编程方法详解:C语言实现指南

发表回复