IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> AURIX C/C++混合编程 -> 正文阅读

[C++知识库]AURIX C/C++混合编程

AURIX C/C++混合编程

前言

实验平台:

AURIX? Development Studio 、龙邱TC264D核心板

C++相比于C:

C++的核心之一就在于面向对象思想。相比C语言常用的面向过程编程,面向对象编程的优势在于继承、封装、多态的特性,利用这种思想更有助于我们的程序实现模块化、抽象化。C++是一种天然支持面向对象编程的语言,在C语言的基础上,C++不仅提供了class关键字和类与对象的概念,使开发者可以清晰方便的实现面向对象编程。C++还支持数据封装和数据隐藏,支持继承和函数重载,因此可以有效的提高程序代码的复用程度。

–引用自https://blog.csdn.net/qq_31562655/article/details/121043097?spm=1001.2014.3001.5502

在进行环境配置前,建议先看一下这两篇博客,对C/C++混合编程有大致的了解。

STM32 C++编程系列一:STM32 C++编程介绍

STM32 C++编程系列二:STM32 C++代码封装初探

环境配置

打开项目属性

image-20220330113119567

添加 -lcpsx_fpu

image-20220330113248718

配置语言

image-20220330113330727

添加

extern void _Z12__call_ctorsv(void);
_Z12__call_ctorsv();

image-20220330113425717

至此,环境配置完成。

代码

image-20220330120132947

新建.cpp和.h文件。注意路径包含问题。

linear_motor.cpp中


/*
 * linear_motor.cpp
 *
 *  Created on: 2022年3月29日
 *      Author: ljg
 */

#include "linear_motor.h"

void linearMotor::init(){
    gtm_pwm_init(pwmch,freq,0);
    gpio_init(IN1,GPO,0,PUSHPULL);
    gpio_init(IN2,GPO,0,PUSHPULL);
    gpio_init(STBY,GPO,1,PUSHPULL);
}

void linearMotor::setTargetPos(float distance,uint32 _vel){
    targetPos = distance;
    vel = _vel;

}

float linearMotor::getCurrPos(){
    this->currPos = this->currEncoder * ENCODER2CM;
    return this->currPos;
}

void linearMotor::setVelZero(){
    gpio_set(IN1, 0);
    gpio_set(IN2, 0);
    pwm_duty(pwmch,0);
    //关闭外部中断
}

void linearMotor::control(){
    getCurrPos();
    float errorPos = this->targetPos - this->currPos;
    int32 errorEncoder = errorPos * CM2ENCODER;
    if(errorEncoder >0){
        gpio_set(IN1, 1);
        gpio_set(IN2, 0);
        pwm_duty(pwmch,vel);
    }
    else if(errorEncoder <0){
        gpio_set(IN1, 0);
        gpio_set(IN2, 1);
        pwm_duty(pwmch,vel);
    }
//开启外部中断
}

void linearMotor::test(){
    gpio_init(P10_6,GPO,0,PUSHPULL);
    systick_delay_ms(STM1,500);
    gpio_init(P10_6,GPO,1,PUSHPULL);
    systick_delay_ms(STM1,500);
}



linear_motor.h文件中


/*
 * linear_motor.h
 *
 *  Created on: 2022年3月29日
 *      Author: ljg
 */

#ifndef MIDDLEWARES_DEVICE_LINEAR_MOTOR_H_
#define MIDDLEWARES_DEVICE_LINEAR_MOTOR_H_

#include "include_lib.h"
#ifdef __cplusplus

#define CM2ENCODER 10
#define ENCODER2CM 10

class linearMotor{
    public:
        linearMotor(ATOM_PIN_enum _pwmch, uint32 _freq,PIN_enum _IN1,PIN_enum _IN2,PIN_enum _STBY){
            pwmch = _pwmch;
            freq = _freq;
            IN1 = _IN1;
            IN2 = _IN2;
            STBY = _STBY;
//          pid.SetPIDParam(0, 0, 0, 0, 0);
        }
        virtual ~linearMotor() {}
        int32 targetEncoder = 0;
        int32 currEncoder = 0;

        void init();
        void setTargetPos(float distance,uint32 _vel);
        float getCurrPos();
        void setVelZero();
        void control();
        void test();



    private:
        ATOM_PIN_enum pwmch;
        uint32 freq;
        PIN_enum IN1;
        PIN_enum IN2;
        PIN_enum STBY;

        float targetPos = 0.0;
        float currPos = 0.0 ;

        uint32 vel  = 0;



};
#endif

#endif /* MIDDLEWARES_DEVICE_LINEAR_MOTOR_C_ */

定义对象是在data.cpp文件中,然后main.c再去调用data.cpp中的函数。

注意事项

cpp文件中,若调用了C文件中的函数,那么C文件对应的.h文件中的函数声明需要添加

#ifdef __cplusplus
extern "C"
{
#endif
//C函数的声明
#ifdef __cplusplus
}
#endif

这样编译器在编译的时候,这里就会采用C的编译器。

C文件不能直接调用cpp文件中的类和对象。需要有个中间的包装器,极简式从C调用C++类方法

但C可以调用普通的cpp函数,同样cpp函数声明也要加 extern "C" 包裹

具体可以参见工程代码。

参考资料

Use C ++ to development TCxxx(like tc275)

Use C ++ to development TCxxx——code

代码工程

链接:https://pan.baidu.com/s/1A95ZOfVnCpjHvNYOOj7RPw
提取码:4lke

-to-development-TCxxx-like-tc275/m-p/318464)

Use C ++ to development TCxxx——code

代码工程

链接:https://pan.baidu.com/s/1A95ZOfVnCpjHvNYOOj7RPw
提取码:4lke

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:45:54  更:2022-03-31 23:47:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:09:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码