C嵌入式编程设计模式

《C嵌入式编程设计模式》
Bruce Powel Douglass著
刘旭东译

C嵌入式编程设计模式

标签: 读书笔记 嵌入式开发

1.1 嵌入式系统有何特殊之处

实时系统,”实时”并不意味着很快。

1.1.1 嵌入式设计的约束

减少使用硬件的需求
性能:吞吐量
可靠性:衡量系统正确完成功能的可能性
健壮性:违反先决条件下仍能提供相应服务的能力
安全性:系统的风险水平,可能会造成那些意外或者损失

1.1.2 嵌入式工具

交叉编译器:在主机上运行,开发的可执行代码在不同环境中运行
连接器
载入程序
调试器工具集
以上集成到IDE中

1.1.3 OS,RTOS,还是没有操作系统

1.1.4 嵌入式中间件

中间件是一种使用某种方法将软件组件连接的软件

1.1.5 与硬件协同开发

1.1.6 调试与测试

1.2 面向对象还是结构化

结构化编程:一方面,函数和过程形成基本的编程基础;另一方面是数据结构的概念。
面向对象编程:基于正交范式。面向对象编程仅有基于类概念的一个分类标准。类将数据(存储为属性)和在数据上的操作的过程(称为操作)组合到一起。对象是类的实例。
像C一样的结构化语言能够完成面向对象的编程么?可以。
如何实现?接着往下看。

1.2.1 类

类仅是一个C语言的结构体,但特殊之处是包含两种不同的特性:数据(属性)和行为(操作)。
最简单的实现类的方法是简单使用文件作为封装边界;公共变量和方法在头文件中课件,而在实现文件中包含方法体、私有变量和方法。
一个更为灵活的方式是使用文件内的结构体来表示类。类的操作用位于相同文件内的结构体的函数定义。
这允许我们拥有同一个类的多个实例,并且保证成员函数在正确的数据拷贝上工作。此外,类可以赋予“特殊”的操作。构造函数创建类的一个对象。初始化程序(可选择)初始化对象和它的属性。析构函数销毁类并释放已使用的内存。

代码1-1 sensor.h

#ifndef SENSOR_H
#define SENDOR_H

typedef struct sensor
{
    int filterFrequency;
    int updateFrequency;
    int value;
    char whatKindOfInterface;
}SENSOR;

int Sensor_getFilterFrequency(const SENSOR* const me);
void Sensor_setFilterFrequency(SENSOR* const me, int p_filterFrequency);
int Sensor_getUpdateFrequency(const SENSOR* const me);
void Sensor_setUpdateFrequency(SENSOR* const me, int p_updateFrequency);
int Sensor_getValue(const SENSOR* const me);
//int acquireValue(SENSOR* me);
SENSOR* Sensor_create(void);
void Sensor_Destroy(Sensor* const me);

#endif

代码1-2 sensor.c

#include "sensor.h"


void Sensor_Init(SENSOR* const me){


}

void Sensor_Cleanup(SENSOR* const me){


}

int Sensor_getFilterFrequency(const SENSOR* const me){

    return me->filterFrequency;
}

void Sensor_setFilterFrequency(SENSOR* const me, int p_filterFrequency){

    me->filterFrequency=p_filterFrequency;
}

int Sensor_getUpdateFrequency(const SENSOR* const me){

    return me->updateFrequency;
}

void Sensor_setUpdateFrequency(SENSOR* const me, int p_updateFrequency){

    me->updateFrequency=p_updateFrequency;
}

int Sensor_getValue(const SENSOR* const me){

    return me->value;
}

/*
int acquireValue(SENSOR* me){

    int *r, *w;
    int j;

    switch(me->whatKindOfInterface)
    {

        case MEMPRYMAPPED:
            w=(int*)WRITEADDR; //Address to write to sensor
            *w=WRITEMASK;      //sensor command to force a read
            for (j = 0; j < count; j++)
            {
                // wait loop 
            }
            r=(int*)READADDR;  //Address to returned value
            me->value=r;
            break;
        case PORTMAPPED:
            me->value=inp(SENSORPORT);
                                //inp() is a compliler-specific port function
            break;
    }

    return me->value;
}
*/

SENSOR* Sensor_create(void){

    SENSOR* me=(SENSOR*)malloc(sizeof(SENSOR));
    if (me != NULL)
    {
        Sensor_Init(me);
    }

    return me;
}

void Sensor_Destroy(SENSOR* const me){

    if (me != NULL)
    {
        Sensor_Cleanup(me);
    }

    free(me);
}

1.2.2 对象

对象是类的实例。

代码1-3 main.c

#include "sensor.h"
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char const *argv[])
{
    SENSOR *p_sensor0, *p_sensor1;
    p_sensor0=Sensor_create();
    p_sensor1=Sensor_create();

    p_sensor0->value=99;
    p_sensor1->value=-1;
    printf("The current value from sensor0 is %d\n",
        Sensor_getValue(p_sensor0));
    printf("The current value from sensor1 is %d\n",
        Sensor_getValue(p_sensor1));

    Sensor_Destroy(p_sensor0);
    Sensor_Destroy(p_sensor1);
    return 0;
}

1.2.3 多态和虚拟函数

多态允许相同函数名在一种上下文中完成一种功能,在另一种上下文中完成另一种功能。
在C语言中,标准的做法是使用选择语句if或者switch。当出现多种上下文时,不方便;此外在最开始编写时就要知道所有可能的上下文,或者提供修改功能。

代码修改 1-1 sensor.h

#ifndef SENSOR_H
#define SENDOR_H

  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值