打印
[PIC®/AVR®/dsPIC®产品]

发字符串报char const too long错误

[复制链接]
1123|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhengxinydc|  楼主 | 2015-11-1 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在主程序中VIEWTECH_54(100,10,'d',1);发送一个字符,程序可以编译成功,如果发送2个及以上字符就报char const too long错误,请朋友们帮忙分析一下原因。谢谢!
#include<pic.h>
#define uint unsigned int
#define uchar unsigned char
#ifndef u8
#define u8 unsigned char
#endif
#ifndef u16
#define u16 unsigned int
#endif
#ifndef u32
#define u32 unsigned long
#endif
__CONFIG(0X1939);
void init();
void txbyte ( u8 Byte );
u8 recieve_byte ( void );
void tx8p (u8 *P,u8 Size);
void VIEWTECH_00();
void VIEWTECH_40(u16 FC,u16 BC);
void VIEWTECH_52(void);
void VIEWTECH_5E (void);
void VIEWTECH_5F_P(u8 PWM_T);
void VIEWTECH_5F();
void VIEWTECH_E0 (u8 Bode_Set,u8 Para1, u8 Para2);
void VIEWTECH_54(u16 X,u16 Y,u8 *P,u8 Size);
void VIEWTECH_98 (u16 X,u16 Y,u8 Lib_ID,u8 C_Mode,u8 C_Dots,u16 FC,u16 BC,u8 *P,u8 Size);
void main()
{
    init();
// VIEWTECH_00();
   // VIEWTECH_5E ();
    VIEWTECH_52();
// VIEWTECH_5F();
VIEWTECH_54(100,10,'d',1);
    while(1);
}
void init()
{
         TRISA=0;
         PORTA=0XFF;
         TXSTA=0x24;
         RCSTA=0X90;
         SPBRG=25;
         GIE=0;
         PEIE=1;
         RCIE=1;
}
/****************************************************************************
*  名    称: send_byte ( )
*  功    能:  串口发送单个字节
*  入口参数:  有      
*  出口参数:  无
****************************************************************************/
void txbyte ( u8 Byte )
{
TXREG = Byte ;
while(!TRMT);
TRMT=0;
}

/****************************************************************************
*  名    称:  recieve_byte ( )
*  功    能:  串口接收一个字节数据
*  入口参数:  无      
*  出口参数:  有
****************************************************************************/
u8 recieve_byte ( void )
  {
    while(!RCIF);
    RCIF=0;
return RCREG;
  }
/****************************************************************************
*  名    称:  tx8p ( )
*  功    能:  串口发送字符串,Size是字符串的长度
*  入口参数:  有      
*  出口参数:  无
****************************************************************************/
void tx8p (u8 *P,u8 Size)
{
u8 i;
for(i=0;i<Size;i++)
  txbyte(*(P+i));
}
/****************************************************************************
*  名    称:  VIEWTECH_00()
*  功    能:  联机测试指令
*  入口参数:  无      
*  出口参数: AA 00 OK_V*.* P1 P2 P3 Pic_ID CC 33 C3 3C
              OK_V*.*,*.*是 SDW 系列的当前软件版本;
P1  是显示屏分辨率(具体参数请参考 0xE0  指令)
P2  是当前用户所设置的串口波特率;
P3  是触摸屏按键配置参数;
Pic_ID 是当前显示图片的 ID;
****************************************************************************/
void VIEWTECH_00()
{
txbyte(0xAA);
txbyte(0x00);
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}
/****************************************************************************
*  名    称:  VIEWTECH_40()
*  功    能:  联机测试指令
*  入口参数:  FC  前景色调色板
               BC  背景色调色板         
*  出口参数: 无
****************************************************************************/
void VIEWTECH_40(u16 FC,u16 BC)
{
txbyte(0xAA);
txbyte(0x40);
txbyte((FC>>8)&0xff);
txbyte(FC&0xff);
txbyte((BC>>8)&0xff);
txbyte(BC&0xff);
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}
/****************************************************************************
*  名    称:  VIEWTECH_52()
*  功    能:  清屏
****************************************************************************/
void VIEWTECH_52(void)
{
txbyte(0xAA);
txbyte(0x52);
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}

/****************************************************************************
*  名    称:  VIEWTECH_5E()
*  功    能:  关闭背光
****************************************************************************/
void VIEWTECH_5E (void)
{
txbyte(0xAA);
txbyte(0x5E);
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}
/****************************************************************************
*  名    称:  VIEWTECH_5F()
*  功    能:  背光亮度调整
****************************************************************************/
void VIEWTECH_5F_P(u8 PWM_T)
{
txbyte(0xAA);
txbyte(0x5F);
if(PWM_T<0x63)
  txbyte(PWM_T);
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}
/****************************************************************************
*  名    称:  VIEWTECH_5E()
*  功    能:  背光打开最亮
****************************************************************************/
void VIEWTECH_5F()
{
txbyte(0xAA);
txbyte(0x5F);
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}
/****************************************************************************
*  名    称:  VIEWTECH_E0()
*  功    能:  工作模式设置
******************************************************************************/
void VIEWTECH_E0 (u8 Bode_Set,u8 Para1, u8 Para2)
{
txbyte(0xAA);
txbyte(0xE0);
txbyte(Bode_Set);
txbyte(Para1);
txbyte(Para2);
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}
/*****************************************************************************
   文本显示指令 VIEWTECH_54/55/6E/6F/98
    54 -显示16X16点阵GBK扩展码字符串  
    55 -显示32X32点阵GB2312内码字符串
    6E -显示12X12点阵GBK扩展码字符串  
    6F -显示24X24点阵GB2312内码字符串
    98 -选择字库显示文本,可以使用用户自定义的字库,显示透明字体等效果
*****************************************************************************/
void VIEWTECH_54(u16 X,u16 Y,u8 *P,u8 Size) //void VIEWTECH_54/55/6E/6F (u16 X,u16 Y,u8 *strings,u8 Size)
{
    u8 j;
txbyte(0xAA);
txbyte(0x54);
txbyte((X>>8)&0xff);
txbyte(X&0xff);
txbyte((Y>>8)&0xff);
txbyte(Y&0xff);
for(j=0;j<Size;j++)
{
  txbyte(*(P+j));
}
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}
void VIEWTECH_98 (u16 X,u16 Y,u8 Lib_ID,u8 C_Mode,u8 C_Dots,u16 FC,u16 BC,u8 *P,u8 Size)
{
u8 j;
txbyte(0xAA);
txbyte(0x98);
txbyte((X>>8)&0xff);
txbyte(X&0xff);
txbyte((Y>>8)&0xff);
txbyte(Y&0xff);
txbyte(Lib_ID);
txbyte(C_Mode);
txbyte(C_Dots);
txbyte((FC>>8)&0xff);
txbyte(FC&0xff);
txbyte((BC>>8)&0xff);
txbyte(BC&0xff);
for(j=0;j<Size;j++)
{
txbyte(*(P+j));
}
txbyte(0xCC);
txbyte(0x33);
txbyte(0xC3);
txbyte(0x3C);
}


沙发
JY-DX-JY| | 2015-11-2 15:43 | 只看该作者
是不是RAM溢出了?

使用特权

评论回复
板凳
zhengxinydc|  楼主 | 2015-11-2 16:07 | 只看该作者
十分感谢回复!RAM溢出怎么判断?我用的CPU是PIC16F877A。

使用特权

评论回复
地板
zhengxinydc|  楼主 | 2015-11-2 16:09 | 只看该作者
Memory Summary:
    Program space        used   151h (   337) of  2000h words   (  4.1%)
    Data space           used     Dh (    13) of   170h bytes   (  3.5%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Configuration bits   used     1h (     1) of     1h word    (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

使用特权

评论回复
5
zhengxinydc|  楼主 | 2015-11-2 22:10 | 只看该作者
上面程序中 txbyte(*(P+j));的参数怎么理解,看不懂,循环里 j++后 和字符串P相加有什么作用?麻烦各位朋友帮忙看看。谢谢!

使用特权

评论回复
6
millenniumm| | 2015-11-3 09:37 | 只看该作者
p是一个指针, 里面存放的是一个变量的地址, p+j以后就指向了第j个地址所存放的数据;
举个例子,假设p=0, *p就代表地址为0的位置存放的数据,p+j以后*(p+j)就代表地址为j的位置存放的数据;
关于楼主遇到的问题,可以尝试一下定义一个char数组,初始化以后将这个数组的首地址作为参数传给viewtech_54()函数;

使用特权

评论回复
7
zhengxinydc|  楼主 | 2015-11-3 11:49 | 只看该作者
非常感谢millenniumm朋友的支持!我试试。

使用特权

评论回复
8
GeekyGeek| | 2015-11-14 18:45 | 只看该作者
怀疑你是用单引号括字符串,字符串应该用双引号,呵呵,纯猜测,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

33

帖子

0

粉丝