为什么使用C++进行MCU开发
我从18年开始在STM32等上使用C++编程,在医疗器械行业进行IVD仪器开发,在此之前的项目开发中我是使用C语言。初次在MCU上使用C++,我有很多疑惑:C语言不挺好的吗?MCU上居然可以使用C++? 为什么选择C++?
工作七八年了,以前都没写过博客,现在开始记录一点东西吧!
尽管18年时使用C语言进行MCU开发已经相当熟练,但C++我是刚入茅庐,才会有那些疑问,并还专门请教了部门经理。这几年,随着工作经验的积累,愈发的认通C++在产品开发中的优点,那些疑惑也随之解开。
使用C++进行MCU开发,不代表只用C++,C语言也是可以混用的,特别是原厂提供的一些SDK,可以用C++封装这层SDK,后续、上层驱动业务进行C++开发。
场景描述
这里使用NXP的S32K1系列MCU,使用TI的TMP101温度传感器做示例。开发环境使用NXP的S32DS,使用其C库SDK,编程语言为C++。为了使用C++演示,建立工程时选择C++语言,不选择SDK,SDK部分由我们自行导入工程。
软件架构
这里进行演示,架构较为简单,在SDK基础上封装IIC驱动CI2C(C++),基于IIC驱动实现TMP101驱动CTmp(C++),板级相关时钟、引脚封装在CBoard中(C++),最后App中的main.cpp实现读取温度。
工程结构
基于上述软件架构[在SDK基础上封装IIC驱动CI2C(C++),基于IIC驱动实现TMP101驱动CTmp(C++),板级相关时钟、引脚封装在CBoard中(C++),最后App中的main.cpp实现读取温度。]实现工程结构:
CI2C类
参见NXP S32K1 IIC Driver接口与实现实现该C++类。
头文件:CI2C.h中主要实现初始化、读从机数据、写从机数据三大接口,为了省事,将板机相关的从机枚举、从机地址和波特率等也塞在了这里。
#ifndef CI2C_H_
#define CI2C_H_
#include "stdint.h"
#include "lpi2c.h"
class CI2C{
public:
void init(void);
void deinit(void);
bool read(uint8_t slave, uint8_t addr, uint8_t *data, uint16_t len);
bool write(uint8_t slave, uint8_t addr, const uint8_t *data, uint16_t len);
static CI2C *getInstance(void);
enum SLAVE
{
SLAVE_TMP101 = 0x00,
SLAVE_COUNT
};
private:
static CI2C *pI2CInstance;
void config(uint8_t slave);
const