微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > (10)mbed实战——c++入门与应用1

(10)mbed实战——c++入门与应用1

时间:10-02 整理:3721RD 点击:

       最开始玩单片机是从51开始的,玩了一阵子一直没什么进展,直到后来接触了Arduino,各种高大上的功能:pwm、AD等等竟然只要一句代码就可以调用,就这样利用Arduino做了很多小作品,最后的毕业设计也是基于Arduino的,涉及到了IIC,单总线,串口,等的功能,虽然那时候我对这些总线的理解完全只停留在概念上,但完全不影响我利用它;                       
        后来在对C语言和硬件有一定理解后开始入手stm32,才对C和硬件有了更清晰的认识;偶然的机会,在论坛里看到arm公司做的mbed项目,mbed对硬件进行了多层抽象,对于用户调用起来非常简洁方便又高效,看过他的编程方式后,让我想起了Arduino,仔细查看他们的底层实现发现:简洁高效的调用接口,归功于工程师们采用了面向对象的编程方法,并用严谨的逻辑把底层的寄存器一层一层组织起来。
               过多的讨论用什么语言来编程没有意义的,这里不赘述。
       就我个人看来,对于嵌入式的编程,C是完全可以驾驭的,大多数的工程师使用的也是C,不过对于大项目C++无疑是更理想的选择,更有意义的是面向对象优秀的编程思想,另外不管是Keil还是IAR都支持C/C++,因此我决定学习C++。
===================================================
之前写的程序纯属照葫芦画瓢,后来专门买了《c++ primer plus》,看了一周了,大概理解了之前的程序的原理,下面简单分析下,
纯属简单暴力入手来的,描述可能不够准确,我尽力表达专业一点。
拿我之前的帖子来分析下:
http://bbs.elecfans.com/forum.php?mod=viewthread&tid=1098810&extra=
在CPP文件中的函数实现需要如下形式:
void IIC_1602::lcdPrint(const char* charactor)
{}
函数(方法)加上所属的类的名字,中间以::来间隔。

在.h文件中的函数实现需要如下形式:以class的方式来定义
  • class IIC_1602 {
  • public:
  •         IIC_1602(PinName sda, PinName scl);
  •         void lcdPrint(const char* charactor);
  •         void lcdPrint_int(const u16 val);
  •         void disOneChar(unsigned char X, unsigned char Y, char word);
  •         void writeOneChar(const u8 cmdOrData, const u8 Data);
  •         void setCursor(u8 colmn, u8 line);
  •         void i2cAction(u8 status);
  • private :
  •         I2C i2c_port;
  • };

public:部分是公用接口,而private部分是私有变量,只允许类内部调用,不允许直接访问,这也是c++的一个优势,在C语言中,如果有两个函数都想访问同一个数据,那没办法,只能用全局变量,这就存在被意外修改的风险。
另外有个特殊的函数
IIC_1602::IIC_1602(PinName sda, PinName scl):i2c_port(sda, scl)
这个称之为构造函数,他在你创建类对象时自动调用,用来初始化单片机的引脚、寄存器非常方便。






Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top