日志档案

发表于 2008-5-16 20:39:50

0

标签: 无标签

DSP5402之另类的"数组"访问

#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)

系统分类: DSP   |   用户分类: DSP5402   |   来源: 原创   |   【推荐给朋友】

    阅读(345)    回复(0)  

投一票您将和博主都有获奖机会!