天嵌 ARM开发社区

 找回密码
 注册
查看: 3728|回复: 4

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

[复制链接]
suolong123 发表于 2012-10-15 19:06:41 | 显示全部楼层 |阅读模式
  1. /**************************************
  2. 通过串口0发送数据
  3. **************************************/
  4. void Uart0_Put(int data)
  5. {
  6.         while(!(rUTRSTAT0 & (1<<2)));
  7.         if(data=='\n')
  8.         {
  9.                 rUTXH0='\r';                //替换发送
  10.         }
  11.         else
  12.         {
  13.                 rUTXH0=data;                //发送数据
  14.         }
  15.        
  16. }


  17. void Uart0_SendString(char *pt)
  18. {
  19.         while(*pt)
  20.                 Uart0_Put(*pt++);;
  21. }

  22. /**************************************
  23. 批量发送数据
  24. **************************************/
  25. void Uart0_Printf(const char *fmt,...)
  26. {
  27.         va_list ap;
  28.         char string[256];
  29.         Led_On(1);
  30.         va_start(ap,fmt);
  31.         Led_On(2);
  32.         vsprintf(string,fmt,ap);
  33.         Led_On(3);
  34.         Uart0_SendString(string);
  35.         Led_On(4);
  36.         va_end(ap);
  37. }
复制代码
为什么执行到vspringf就直接报错了?
LED_On()是我测试的,点亮第几个Led
但是led只亮了两个,意思就是到了vspringf就报错重新执行了
什么情况?
为什么测试程序中的就能执行过?代码一样的
 楼主| suolong123 发表于 2012-10-15 19:07:18 | 显示全部楼层
如果我用Uart0_SendString(string);直接发送数据是没有问题的,可以发送
回复

使用道具 举报

 楼主| suolong123 发表于 2012-10-15 19:14:53 | 显示全部楼层
突然想起来了,vspringf用到了缓冲区,是不是得设置堆栈什么的??
启动代码中我没有做设置,请问一下启动代码中哪些是必须的代码?对于我这个程序来说
回复

使用道具 举报

亚瑟王 发表于 2012-10-16 13:07:00 | 显示全部楼层
suolong123 发表于 2012-10-15 19:14
突然想起来了,vspringf用到了缓冲区,是不是得设置堆栈什么的??
启动代码中我没有做设置,请问一下启动 ...

建议你参考天嵌科技提供的TQ2440_Test的代码。
回复

使用道具 举报

 楼主| suolong123 发表于 2012-10-17 08:36:34 | 显示全部楼层
suolong123 发表于 2012-10-15 19:14
突然想起来了,vspringf用到了缓冲区,是不是得设置堆栈什么的??
启动代码中我没有做设置,请问一下启动 ...

这段其实就是从TQ2440_Test拷出来的,在TQ2440_Test上可以执行,单独拿出来就不能执行了,我怀疑是启动代码的问题,附上
init.s
  1.         GET option.inc
  2.         GET 2440addr.inc
  3.         GET memcfg.inc
  4.        
  5.         IMPORT Main
  6.     CODE32
  7.     AREA Init,CODE,READONLY
  8.     ENTRY           
  9.             ;初始化LOCKTIME寄存器
  10.             LDR R0 , =LOCKTIME
  11.             LDR R1 , =0xFFFFFF
  12.             STR R1 , [R0];
  13.            
  14.             ;设置CLKDIV的比值为1:2:4
  15.             LDR R0 , =CLKDIVN
  16.             LDR R1 , =CLKDIV_VAL
  17.             STR R1 , [R0]  
  18.            
  19.             ;设置时钟频率,否则时钟显示混乱
  20.             ;Fin=12.0MHz        Fout=200MHz
  21.             LDR R0 , =MPLLCON
  22.             LDR R1 , =((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV)
  23.             STR R1 , [R0]
  24.            
  25.             LDR R0, =0x53000000
  26.             MOV R1, #0x0
  27.             STR R1, [R0]
  28.             LDR SP, =1024 * 4
  29.             BL Main
  30. main_loop
  31.             B main_loop

  32.     END
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-16 18:31 , Processed in 2.044430 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表