打印

大家帮忙看看到底是什么问题,谢谢了

[复制链接]
16859|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hengheng1217|  楼主 | 2010-12-15 00:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
俺在用keil调试LPC2132的串口的时候,调用#include <stdio.h>中的printf 函数会提示错误,SRC\UART.c(62): error:  #141-D: unnamed prototyped parameters not allowed when body is present。把代码贴出来大家帮忙看看,多谢了

#define UART_BPS 115200
#include "..\inc\config.h"
#include <stdio.h>

/**********************延时子函数****************************************/
void wait()
{
    U32 i = 10;      
//U8  counter = 0;  //此处如果设置的延时因子i>5则发送回去的信息会丢失,越打丢失的越多,最多时丢失到只剩2位为止
while(i--);
/*{  
  for(i = 5000;i--;i >0 );
} */
}
/**********************串口0初始化****************************************/
void UART0_Init ()  
{
   U16 Fdiv;
   U0LCR = 0x83;              // DLAB = 1,可设置波特率
   Fdiv = (Fpclk / 16)/ UART_BPS;           // 设置波特率
   U0DLM = Fdiv / 256;      
   U0DLL = Fdiv % 256;
   U0LCR = 0x03;
}
/***************************从串口0接收数据*********************************/
char UART0_GetChar ( void )
{
  U8 Rcv_Data;
  while((U0LSR&0x01)==0);                  //等待有效数据
  Rcv_Data=U0RBR;                          //读取数据
  return(Rcv_Data);
}
/***************************从串口0接收字符串*********************************/
void UART0_GetString ( U8 *s,U32 n )
{
  for(;n>0;n++)
  {
    *s++=UART0_GetChar();
  }
}
int putchar(int c)  
{  
  while (!(U0LSR & 0x20));
  return (U0THR=c);  
}
/***************************向串口0发送数据*********************************/
void UART0_PutChar ( U32 data)
{
  U0THR = data;       // 发送数据
  while( (U0LSR&0x40)==0 );     // 等待数据发送完毕
}
/***************************向串口0发送字符串*********************************/
void  UART0_PutString(char *str)
{
  while(*str !='\0')
  {
    UART0_PutChar(*str++);
  }
}
/*****************************PLL初始化**************************************/
void PLL_Init(void)
{
  /* 设置系统各部分时钟 */
    PLLCON = 1;
#if ((Fcclk / 4) / Fpclk) == 1
  VPBDIV = 0;
#endif
#if ((Fcclk / 4) / Fpclk) == 2
  VPBDIV = 2;
#endif
#if ((Fcclk / 4) / Fpclk) == 4
  VPBDIV = 1;
#endif
#if (Fcco / Fcclk) == 2
  PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
#endif
#if (Fcco / Fcclk) == 4
  PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
#endif
#if (Fcco / Fcclk) == 8
  PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
#endif
#if (Fcco / Fcclk) == 16
  PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
#endif
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  while((PLLSTAT & (1 << 10)) == 0);
  PLLCON = 3;
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
}
/***************************主函数*********************************/
void main( void )
{
  U8 command;
  PINSEL0 = 0x00000005;   // 设置I/O连接到UART0
  PINSEL1 = 0x00000000;
  

  PLL_Init();
  
  UART0_Init();           //UART0初始化
  UART0_PutString(" \n heng UART Test\n");
  printf(" \nPrint a number: %d\n",200);
  printf(" \nPrint a float number: %f\n",11.0592);
while ( 1 )   
    {
  command = UART0_GetChar(); //接收按键值
   
        UART0_PutChar(command);           //返回按键值
   
    }
}
问题就出在黑色字体的地方(错误提示的位置),请大虾们指点一下,多谢 !

相关帖子

沙发
areshan| | 2010-12-15 09:36 | 只看该作者
U0THR是UART的寄存器吗?你改成U0THR=c; return(c);试试看!

使用特权

评论回复
板凳
hengheng1217|  楼主 | 2010-12-15 23:31 | 只看该作者
试过了不行啊 ,提示 SRC\UART.c(62): error:  #141-D: unnamed prototyped parameters not allowed when body is present,估计是调用putchar 函数的时候出的问题,就是不知道为什么不行啊,各位帮帮忙啊,谢过了

使用特权

评论回复
地板
hengheng1217|  楼主 | 2010-12-15 23:42 | 只看该作者
SRC\UART.c(62): error:  #79: expected a type specifier,同时提醒这句话,没有定义类型说明符,程序中我定义了整形了啊,就是不知道哪出错了,看别人这么用的没有问题啊,不过人家的开发环境是IAR,不知道和开发环境有没有关系

使用特权

评论回复
5
airwill| | 2010-12-16 10:10 | 只看该作者
读那句话,
while (!(U0LSR & 0x20));
  return (U0THR=c);  
怎么这么别扭呢?
不能好好地写吗?

  U0THR=c;  
  return (U0THR);  

看看,是不是你的写法编译器拒绝接受?
其实我们根本没有必要写这么拗口的代码。编译器也很容易出现理解歧义的

使用特权

评论回复
6
hengheng1217|  楼主 | 2010-12-21 21:49 | 只看该作者
代码是别扭一些?关键是,我调用stdio.h的时候就出问题,难道这个头文件就有错误????
C:\Keil\ARM\RV31\INC\stdio.h(659): error:  #79: expected a type specifier
#ifdef __cplusplus
    inline int putchar(int __c) { return putc(__c, stdout); }
#else
    #define putchar(c) putc(c, stdout)
    extern _ARMABI int putchar (int /*c*/);#endif

使用特权

评论回复
7
hengheng1217|  楼主 | 2010-12-21 21:50 | 只看该作者
调用stdio.h时,错误提示就是上面的黑体部分的错误,不明所以,忘大家指点

使用特权

评论回复
8
areshan| | 2010-12-23 16:01 | 只看该作者
代码没有语法错误,要不就是那两个寄存器的名称有问题,U0LSR,U0THR。。。。。。光看代码是看不出来什么问题!

使用特权

评论回复
9
hengheng1217|  楼主 | 2010-12-23 22:38 | 只看该作者
寄存器没有问题,我感觉是调用stdio.h的问题,给我个您的邮箱,我把工程文件发给您帮忙看一下?

使用特权

评论回复
10
soonli| | 2010-12-25 11:02 | 只看该作者
帮顶   自己没用过   不过好多事情都是靠自己完成的   不是不帮忙   是力不从心啊

使用特权

评论回复
11
SHMILY200912| | 2011-11-30 09:20 | 只看该作者
你去检查一下putchar(int c) 函数实体,可能是定义上没有对参数定类型。

使用特权

评论回复
12
hall919| | 2012-12-13 18:37 | 只看该作者
都瞎说。
putchar 是库接口,而你在自己代码中又定义了一个putchar,所以定义重复。
把你自己的putchar改个名字就可以了。

使用特权

评论回复
13
hall919| | 2012-12-13 19:06 | 只看该作者
你没有用到putchar,为什么定义这个函数,
你用的是UART0_PutChar

使用特权

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

本版积分规则

个人签名:做一个独立思考的人

0

主题

117

帖子

1

粉丝