全部博文(2005)
分类: C/C++
2008-12-09 09:29:38
在S
对象的核心概念就是通常所说的“封装性(encapsulation)、“继承性”(inheritance)和“多态性”(polymorphism)。
下面讲解C++的程序实现,先来看一个VC 类:
//头文件 #ifndef _CSplashWnd //-------条件编译,避免“类“重定义 #define _CSplashWnd class CSplashWnd:public CWnd { Protected: CSplashWnd(); //-------构造函数 Public: CBitmap m_bitmap; //-------对象属性 Static void EnableSpalshScreen(BOOL bEnable = TRUE); ~CSplashWnd(); //-------析构函数 Virtual void PostNcDestroy(); //-------虚拟函数(实现多态) Virtual void my_test(void)=NULL;//-----(或=0)纯虚拟函数(只提供接口不进行实现) BOOL Create(CWnd * pParentWnd = NULL); //-------对象方法 Static BOOL c_bShowSplashWnd; //-------类属性 Proteted; Afx_msg void OnPaint(); // afx_msg Windows系统消息映射的处理函数。 }; #endif |
上面做了一个整体概括,不能用于嵌入式系统,要想在嵌入式系统中使用C++,需要重新定义,现在大家应该有一个整体的概念了吧!下面将对嵌入式系统中如何使用C++进行编程进行详细介绍:
下面是定义的S
//-------------------
AD类实体定义GADC
//---------------------------------------------------------------------- #include "misc.h" //---------------------------------------------------------------------- #ifndef _GADC #define _GADC class GADC:public misc { public: GADC(const char*ADC_CH); void read(uint16*data); static void __irq ADC_ISR(); private: uint8 ADC_CH; static uint8 pre_CH; }; #endif //---------------------------------------------------------------------- |
(1)详细讲解
class GADC:public misc 定义模数转换类GADC,该类的父类为misc,misc 中定义了一些常用小函数。
GADC 类的构造函数GADC(const char*ADC_CH);用来初始化模数转换硬件寄存器
GADC 类中有一个方法void read(uint16*data);用于实现模数转换值的提取。
GADC 类中有两个属性,一个为对象属性uint8 ADC_CH;另一个为类属性static
uint8 pre_CH; 他们都是私有属性。
属性ADC_CH 用来保存当前对象的通道号。
属性pre_CH 作为类属性,用来实现对象之间数据共享和通信。
//-------------------
AD 类实现(GADC.cpp)
//---------------------------------------------------------------------- #include "GADC.h" //---------------------------------------------------------------------- uint8 GADC::pre_CH=0xFF; //---------------------------------------------------------------------- GADC::GADC(const char*ADC_CH) {//格式:"AIN0"~"AIN7" HandleADC = (uint32)this->ADC_ISR; this->ADC_CH = ADC_CH[3]-'0'; gINTMOD = 0x00; //IRQ gINTCON = 0x01; //IRQ向量中断机制 gINTMSK &=~(0x01<<26|0x01<<0); gADCPSR = 0x gADCCON = 0x00; //唤醒 this->delay(10); } //---------------------------------------------------------------------- void GADC::read(uint16*data) {//10 位AD if(GADC::pre_CH != ADC_CH) { gADCCON = ADC_CH << 2; //重新建立转换通道 this->delay(50); this->pre_CH = ADC_CH; } gADCCON |= 0x01; //启动转换 while(gADCCON & 0x01); while(!(gADCCON & 0x40)); this->delay(200); *data = gADCDAT; } //---------------------------------------------------------------------- void __irq GADC::ADC_ISR() { gI_ISPC = 0x01 << 0; //清除pending } |
(1)详细讲解
GADC 模数转换类对象的使用:
将一个实体AD 封装成类之后,就可以用该类派生对象,生成AD 对象实体了,就像常说的那样,“类是对象的工厂”,也就是说类是专门生产对象的地方。
GADC AIN0("AIN0");
GADC AIN1("AIN1");
通过上面两个简单的语句,我们就生成了两个AD 模数对象AIN0 和AIN1,它们作为两个独立的实体,都可以具备独立完成AD 数据读取能力,它们的公共属性-类属性pre_CH,用来协调这两个对象的通道同步。(完)