原创 DSP5402之另类的"数组"访问

2008-5-16 20:39 2878 5 5 分类: 处理器与DSP

#define FLASH(x)  (*((volatile unsigned char *) 0x8000 + (x)))
/*----------------------------------------------------------
另类的"数组"访问,外扩的SST39VF800A从0x8000开始
void FlashObj::ChipErase(void)
{
  FLASH(0x5555) = 0xaa; 
  FLASH(0x2AAA) = 0x55; 
  FLASH(0x5555) = 0x80;
  FLASH(0x5555) = 0xaa; 
  FLASH(0x2AAA) = 0x55; 
  FLASH(0x5555) = 0x10;
  Wait(0x5555);
}
void FlashObj::Wait(unsigned int address)
{
unsigned int temp, val;
  do {
    val = FLASH(address);
    __nop();
    temp = FLASH(address);
    __nop();
  }
  while(((val ^ temp) & (1 << BIT6)) != 0);
}
----------------------------------------------------------*/


点击看大图


 


在此非常感谢simon21ic对宏bug的纠错!!!



hotpower 发表于 2008-5-18 07:27 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

41楼: 非常感谢simon21ic对宏bug的纠错!!!


哈哈~~~

当x为复杂的表达式时:

#define FLASH(x)  (*((volatile unsigned char *) 0x8000 + x))

中x的有部分可能与0x8000先"乱搞"~~~~

#define FLASH(x)  (*((volatile unsigned char *) 0x8000 + (x)))


俺以前就有过"惨痛"的教训~~~

开始:
#define LedChar0 LedSegA + LedSegB + LedSegC + LedSegD + LedSegE + LedSegF
//...................................

实战出错找了一天才想到了是宏bug~~~

以后俺都是:
#define LedChar0 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegE + LedSegF          )
#define LedChar1 (          LedSegB + LedSegC                                        )
#define LedChar2 (LedSegA + LedSegB           + LedSegD + LedSegE           + LedSegG)
#define LedChar3 (LedSegA + LedSegB + LedSegC + LedSegD                     + LedSegG)
#define LedChar4 (          LedSegB + LedSegC                     + LedSegF + LedSegG)
#define LedChar5 (LedSegA           + LedSegC + LedSegD           + LedSegF + LedSegG)
#define LedChar6 (LedSegA           + LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)
#define LedChar7 (LedSegA + LedSegB + LedSegC                                        )
#define LedChar8 (LedSegA + LedSegB + LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)
#define LedChar9 (LedSegA + LedSegB + LedSegC + LedSegD           + LedSegF + LedSegG)
#define LedCharA (LedSegA + LedSegB + LedSegC           + LedSegE + LedSegF + LedSegG)
#define LedCharB (                    LedSegC + LedSegD + LedSegE + LedSegF + LedSegG)
#define LedCharC (LedSegA                     + LedSegD + LedSegE + LedSegF          )
#define LedCharD (          LedSegB + LedSegC + LedSegD + LedSegE           + LedSegG)
#define LedCharE (LedSegA                     + LedSegD + LedSegE + LedSegF + LedSegG)
#define LedCharF (LedSegA                               + LedSegE + LedSegF + LedSegG)




DSP281X硬件SPI读写一体化C++函数(驱动74hc595)

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条