微机内存按(请收藏C语言在嵌入式系统编程时的注意事项)

ntechnologytr778 2024-01-03 阅读:9 评论:0
大家好,今天给大家分享微机内存按,一起来看看吧。  typedef unsigned char BYTE;  typedef unsigned int WORD;  /* 函数功能:读NVRAM中字节  * 参数:wOffset,读取位置相...

大家好,今天给大家分享微机内存按,一起来看看吧。

  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? */  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)  {  …  }  define INT_I2_MASK 0x0040  wTemp = inword(INT_MASK);  outword(INT_MASK, wTemp | INT_I2_MASK);

判断该位是否为1的做法是:

  #define INT_I2_MASK 0x0040  wTemp = inword(INT_MASK);  if(wTemp & INT_I2_MASK)  {  … /* 该位为1 */  }

上述方法在嵌入式系统的编程中是非常常见的,我们需要牢固掌握。

总结

在性能优化方面永远注意80-20准备,不要优化程序中开销不大的那80%,这是劳而无功的。

宏定义是C语言中实现类似函数功能而又不具函数调用和返回开销的较好方法,但宏在本质上不是函数,因而要防止宏展开后出现不可预料的结果,对宏的定义和使用要慎而处之。很遗憾,标准C至今没有包括C 中inline函数的功能,inline函数兼具有调用开销和安全的优点。

使用寄存器变量、内嵌汇编和活用位操作也是提高程序效率的有效方法。

除了编程上的技巧外,为提高系统的运行效率,我们通常也需要最大可能地利用各种硬件设备自身的特点来减小其运转开销,例如减小中断次数、利用DMA传输方式等。

以上就是微机内存按的内容分享,希望对大家有用。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权发表,未经许可,不得转载。

«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
最近发布
热门文章