Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15331441
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: C/C++

2008-12-09 09:29:38

S3C44B0x上的面向对象C++设计(gliethttp

对象的核心概念就是通常所说的“封装性(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++进行编程进行详细介绍:

    下面是定义的S3C44B0XAD 转换器类:

//-------------------

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,该类的父类为miscmisc 中定义了一些常用小函数。

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 = 0x7F; //分频系数

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,用来协调这两个对象的通道同步。()

阅读(1233) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~