打印

继续裸奔,但是vsprintf为什么到这就不执行了?

[复制链接]
1432|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mars.CN|  楼主 | 2012-10-16 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
 

/**************************************

通过串口0发送数据

**************************************/

void Uart0_Put(int data)

{

while(!(rUTRSTAT0 & (1<<2)));

if(data=='\n')

{

rUTXH0='\r'; //替换发送

}

else

{

rUTXH0=data; //发送数据

}



}





void Uart0_SendString(char *pt)

{

while(*pt)

Uart0_Put(*pt++);;

}



/**************************************

批量发送数据

**************************************/

void Uart0_Printf(const char *fmt,...)

{

va_list ap;

char string[256];

Led_On(1);

va_start(ap,fmt);

Led_On(2);

vsprintf(string,fmt,ap);

Led_On(3);

Uart0_SendString(string);

Led_On(4);

va_end(ap);

}


为什么执行到vspringf就直接报错了?
LED_On()是我测试的,点亮第几个Led
但是led只亮了两个,意思就是到了vspringf就报错重新执行了
什么情况?
为什么测试程序中的就能执行过?代码一样的
如果我用Uart0_SendString(string);直接发送数据是没有问题的,可以发送
vspringf用到了缓冲区,是不是得设置堆栈什么的??
启动代码中我没有做设置,请问一下启动代码中哪些是必须的代码?对于我这个程序来说

相关帖子

沙发
sedatefire| | 2012-10-16 10:47 | 只看该作者
为什么执行到vspringf就直接报错了?
怎么个报错法

使用特权

评论回复
板凳
sedatefire| | 2012-10-16 10:49 | 只看该作者
你如何确定 vsprintf 最终就是链接到uart0那边去

你要研究一下你那个系统的C编译器关于printf的说明

看看库里面有没有retarget.c之类的代码需要修改

使用特权

评论回复
地板
Mars.CN|  楼主 | 2012-10-16 11:54 | 只看该作者
2# sedatefire

我里面加了四个LED灯,只亮了前两个就不再亮了,然后重新开始Main的执行(应该走引导了),肯定是vsprintf报错了

使用特权

评论回复
5
sfpxfpcfp| | 2012-10-16 11:59 | 只看该作者
printf 书上有专门讲的,好是谭老师那本

使用特权

评论回复
6
sedatefire| | 2012-10-17 14:31 | 只看该作者
在mcu里面,printf是需要重映像连接的
c51是链接到putchar,就是自己要重写putchar
keil的armcc是链接到fputc那里,
如果是STM32的话,他的库有个retarget让你修改

使用特权

评论回复
7
Mars.CN|  楼主 | 2012-10-17 17:30 | 只看该作者
6# sedatefire

能说具体点吗?我用的是ARM9的S3C2440芯片,开发板是TQ2440
我要怎么做才能用?

使用特权

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

本版积分规则

9

主题

43

帖子

0

粉丝