您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术C语言嵌入式系统编程修炼之内存操作 正文
C语言嵌入式系统编程修炼之内存操作

C语言嵌入式系统编程修炼之内存操作

点击数:7646 次   录入时间:03-04 11:43:36   整理:http://www.55dianzi.com   嵌入式系统-技术

    typedef unsigned char BYTE;
    typedef unsigned int WORD; 
    /* 函数功能:读NVRAM中字节 
    * 参数:wOffset,读取位置相对NVRAM基地址的偏移
    * 返回:读取到的字节值
    */
    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? */ 

www.55dianzi.com
     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语言最精华的内涵皆在内存操作中体现。


上一页  [1] [2] 


本文关键字:嵌入式  C语言  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术