赞
踩
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++下编译
最后,编程成功,点亮!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。