Embedded 版 (精华区)

发信人: yypking (沪宁小猪), 信区: Embedded
标  题: C语言嵌入式系统编程修炼之内存操作(三)
发信站: 哈工大紫丁香 (Tue Aug  8 18:48:45 2006), 站内

extern BYTE ReadByteNVRAM(WORD wOffset)

    {

     LPBYTE lpAddr = (BYTE*)(NVRAM + wOffset * 2); /* 为什么偏移要×2? */

     return *lpAddr;

    }

 /* 函数功能:读NVRAM中字

    * 参数:wOffset,读取位置相对NVRAM基地址的偏移

    * 返回:读取到的字

    */

    extern WORD ReadWordNVRAM(WORD wOffset)

     {

     WORD wTmp = 0;

     LPBYTE lpAddr;

    /* 读取高位字节 */

     lpAddr = (BYTE*)(NVRAM + wOffset * 2); /* 为什么偏移要×2? */ 

     wTmp += (*lpAddr)*256;

     /* 读取低位字节 */

     lpAddr = (BYTE*)(NVRAM + (wOffset +1) * 2); /* 为什么偏移要×2? */

     wTmp += *lpAddr;

     return wTmp;

    }

    /* 函数功能:向NVRAM中写一个字节 

    *参数:wOffset,写入位置相对NVRAM基地址的偏移

    * byData,欲写入的字节

    */

    extern void WriteByteNVRAM(WORD wOffset, BYTE byData)

    {

     …

    }

    /* 函数功能:向NVRAM中写一个字 */

    *参数:wOffset,写入位置相对NVRAM基地址的偏移

    * wData,欲写入的字

    */

    extern void WriteWordNVRAM(WORD wOffset, WORD wData)

    {

     …

    } 

  子贡问曰:Why偏移要乘以2?

  子曰:请看图1,16位80186与8位NVRAM之间互连只能以地址线A1对其A0,CPU本身的
A0与NVRAM不连接。因此,NVRAM的地址只能是偶数地址,故每次以0x10为单位前进!

    总结

  本篇主要讲述了嵌入式系统C编程中内存操作的相关技巧。掌握并深入理解关于数据
指针、函数指针、动态申请内存、const及volatile关键字等的相关知识,是一个优秀的
C语言程序设计师的基本要求。当我们已经牢固掌握了上述技巧后,我们就已经学会了C
语言的99%,因为C语言最精华的内涵皆在内存操作中体现。



--
花老虎出没!


※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.71.66]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.994毫秒