嵌入式系统通用驱动程序接口及其实现-EERPOM存取位置标准化(视频教学时的同步输入文件)
来源:互联网 发布:淘宝我要日报在哪 编辑:程序博客网 时间:2024/06/07 06:18
嵌入式系统通用驱动程序接口及其实现-EERPOM存取位置标准化
存储单元 结构
保存永久性数据 每次读 写位置 要一致 才能恢复
- flash 程序存储器宽间
- RAM 空间
- EEPROM空间 由我们决定的。
编译器所决定的
LED控制器
LedCtrler.h:
struct _LedCtrlerInfo{ unsigned char DispMode, unsigned char FlashCount unsigned char OnCount; unsigned char OfCount; . . . .};Struct _LedCtrler{ struct _LedCtrlerInfo Info; unsigend char a; unsigned char b; . . .};
Sen.h //亮度传感器模块:
struct _SenInfo{ unsigned short Zero; unsigned short Gain; }; struct _Sen{ struct _SenInfo Info; unsigend char a; unsigned char b; . . . };
传统做法: InfoBase.h
//EEPROM初始化标志
#define INFO_BASE_INIT_FLAG_ADR 0x0000
#define INFO_BASE_INIT_FLAG_LEN 1
//应用相关:LED_CTRLER_INFO
#define INFO_BASE_LED_CTRLER_INFO_ADR (INFO_BASE_INIT_FLAG_ADR + INFO_BASE_INIT_FLAG_LEN)
#define INFO_BASE_LED_CTRLER_INFO_LEN 8
//应用相关:SEN_INFO
#define INFO_BASE_SEN_INFO_ADR (INFO_BASE_LED_CTRLER_INFO_ADR + INFO_BASE_LED_CTRLER_INFO_LEN)
#define INFO_BASE_SEN_INFO_LEN 8
.
.
换一种思路,解决这个问题:
- 并不关心,放在那个位置,需要的的:从那儿写,从那儿读回来
能否让编译器像flash RAM一样,让系统帮我们分配:固定
define struct_offset(type, member)
unsigned long Adr = struct_offset(struct _LedCtrlerInfo, OnCount);
//编译器结果: Adr = 2;
*struct_offset 原理:
typedef struct _type{
member0; //0位置
member1; //1位置
.
.
.
memberN;
}type;
type A; //flash分配空间(自动) 0X50 type *a = &A; //a = 0x50; a->member1 = ?? //&a->member1 地址 0x51 unsigend char memberOffset = (char*)(&a->member1)- (char*)a = 0x51 - 0x50;#define struct_offset(type,member) \ (unsigned int)(&(((type) *)0)->(member)))
Infobase_LedCtrler_V100.h 实现:
//整个EEProm空间 struct _LedCtrlerInfo_Ini{ unsigned char Reversed[8]; } struct _SenInfo_Ini{ unsigned char Reversed[8]; } typedef struct _InfoBase{ unsigned char InitFlag; struct _LedCtrlerInfo_Ini LedCtrlerInfo; //4存储空间 ->预留8个空间 struct _SenInfo_ini SenInfo; //4个空间 }InfoBase_t; #define InfoBase_GetLedCtrlerInfo() struct_offset(InfoBase_t, LedCtrlerInfo); #define InfoBase_GetSenInfo() struct_offset(InfoBase_t,SenInfo);
Infobase_LedCtrler_V200.h 实现:
略
Infobase.h实现:
#ifdef HW_V100
#inlude “Infobase_LedCtrler_V100.h”
#endif
#ifdef HW_V200 #inlude "Infobase_LedCtrler_V200.h" #endif
- 嵌入式系统通用驱动程序接口及其实现-EERPOM存取位置标准化(视频教学时的同步输入文件)
- 嵌入式系统通用驱动程序接口及其实现-总则(视频教学时的同步输入文件)
- 嵌入式系统通用驱动程序接口及其实现-IO口(视频教学时的同步输入文件)
- 嵌入式系统通用驱动程序接口及其实现-I2C主机设备驱动(视频教学时的同步输入文件)
- 如何同步播放asf和vga文件的教学视频
- 如何同步播放asf和vga文件的教学视频
- 基于视频处理的DSP系统通用设计模式及其实现
- 流接口驱动程序的特点及其实现方法
- 怎样实现文件上传的通用接口
- 一个通用的DAO接口及其Hibernate3实现(转)
- 一个通用的DAO接口及其Hibernate3实现
- 一个通用的DAO接口及其Hibernate3实现
- 一个通用的DAO接口及其Hibernate3实现 (2)
- 嵌入式linux系统ARM网络培训系列教学视频
- jdbc接口及其驱动程序
- 收集一些好的嵌入式视频教学与大家分享
- 《嵌入式系统接口设计与Linux驱动程序开发》读书笔记
- 嵌入式WinCE的CAN总线流接口驱动程序的设计与实现
- exit和_exit,atexit的浅析
- 使用struts1回显数据,防重复提交
- 再次拾回android-修改系统定义的style
- 补c++作业2
- 小心情
- 嵌入式系统通用驱动程序接口及其实现-EERPOM存取位置标准化(视频教学时的同步输入文件)
- 动手制作操作系统——开发环境
- Android极光推送之Hello World
- 机器学习总结9_未完待续
- 专题四1004
- 射频电容电感选择
- http://blog.csdn.net/liuhe688/article/details/6733407
- 【android】:android设计网站
- sencha Touch 省市区三级联动滚轮效果选择器