avr如何将字符定义在flash

我的程序如下:
unsigned char __flash DIS_STUDY[] = "** STUDY **";

            DispStr((unsigned char*)DIS_STUDY,0);

void DispStr( unsigned char* str, unsigned char sit )
{//把传送来字符串显示在指定位置上
unsigned char chr;

if( sit >= 80 )      //4行显示
    sit = 0;         //显示位置出错,设为0
while( ( chr = *str++ ) != '\0' )
{
    DispByte( chr, sit );
    sit++;
}

}
编译没有问题,也没有增加sram空间,但是运行的时候显示乱码
请教如何修改

参考:http://bbs.21ic.com/icview-226607-1-1.html