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

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

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现STM32 FreeRTOS LwIP TCP服务器需要按照以下步骤进行操作: 1. 首先,需要配置LwIP和FreeRTOS。可以在STM32CubeMX中选择配置相应的组件,生成对应的代码和初始化函数。 2. 在代码中创建任务来处理TCP服务器。通过创建一个任务,可以将其分配给特定的核心,以处理TCP请求和响应。 3. 在任务中,首先需要进行LwIP和FreeRTOS的初始化。这样可以确保网络和操作系统的适当设置。需要调用lwip_init()和vTaskStartScheduler()函数。 4. 配置和创建TCP服务器的套接字。可以通过调用lwip_socket()函数创建一个TCP套接字,并使用lwip_bind()函数将其与特定的IP地址和端口绑定。 5. 通过调用lwip_listen()函数监听TCP套接字,等待客户端的连接。 6. 使用lwip_accept()函数接受客户端的连接请求,并获得一个新的套接字来处理与该客户端之间的通信。 7. 通过调用lwip_recv()和lwip_send()函数来接收和发送数据。可以使用这些函数接收来自客户端的数据,并发送响应数据给客户端。 8. 当与客户端的通信完成后,使用lwip_close()函数关闭套接字。 9. 循环进行步骤6-8,以处理其他客户端的连接和通信请求。 需要注意的是,STM32系列芯片的内存和处理能力有限,因此在编写代码时需要谨慎处理内存和资源的分配和释放,以确保程序的稳定性和性能。 总结:通过以上步骤,可以在STM32上使用FreeRTOS和LwIP实现TCP服务器,使其能够接受和处理客户端的连接和通信请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值