打印

sdk中使用sprintf问题求解

[复制链接]
2059|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
leech42|  楼主 | 2012-4-11 12:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 leech42 于 2012-4-11 12:42 编辑

我用sp605开发file:///C:/Users/ysj/AppData/Local/Temp/moz-screenshot-2.png板,在EDK下生成了个mb,其详细如图:



file:///C:/Users/ysj/AppData/Local/Temp/moz-screenshot-1.png然后我Generate BitStream,再点击Export Design进入sdk。
我建立了个简单的串口测试例子,代码如下:
/*
* my_uart.c
*
*  Created on: 2012-4-10
*      Author: ysj
*/



/***************************** Include Files *********************************/
#include "xparameters.h"
#include "xuartlite_l.h"
#include "xbasic_types.h"

#if !SIM
#include "stdio.h"
#endif

/************************** Constant Definitions *****************************/
#ifndef UART_BASEADDR
#define UART_BASEADDR XPAR_RS232_UART_1_BASEADDR
#endif


/************************** Function Prototypes ******************************/
/* We don't use interrupts/exceptions.
   Dummy definitions to reduce code size on MicroBlaze */
#ifdef __MICROBLAZE__
void _interrupt_handler () {}
void _exception_handler () {}
void _hw_exception_handler () {}
#endif

static void my_printf(char *s)
{
    while (*s) {
        XUartLite_SendByte(UART_BASEADDR, *s);
        s++;
    }
}

int main (void)
{
    int i;
    char data[40];
    char c;
    c = '0';

    while (1)
    {
        sprintf(data, "Hello World! %c", c);
        my_printf(data);
        for (i = 0; i < 1000000; i++);
        c++;
        if (c >= '9') c = '0';
    }
    return 0;

}
然后,对应的ld文件配置如下图:

现在我的问题是:
1、为什么当使用了sprintf后,编译出来的代码会有好几十kB?
2、原来我在ld文件中的stack是设置为0x400大小的,这时编译通过,但运行时会出现异常;然后我把stack改为0x1000,就可以正常运行了。难道调用sprintf会占用这么大的stack空间吗?
没钱钱啦,少点,:lol

相关帖子

沙发
GoldSunMonkey| | 2012-4-11 15:51 | 只看该作者
这个是没有办法的。只能如此。

使用特权

评论回复
板凳
leech42|  楼主 | 2012-4-12 18:09 | 只看该作者
呵呵,不细研究他为什么了,接下来好好分析分析sp605_BRD_rdf0033的代码去,谢谢哈

使用特权

评论回复
地板
litgb| | 2012-4-13 09:54 | 只看该作者
路过学习  了

使用特权

评论回复
5
hawksabre| | 2012-9-4 19:36 | 只看该作者
sprintf的功能是字串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。
调用printf函数生成的代码空间相对与sprintf小的多了   什么原因   很纠结   希望高人指点    如果实在不行  建议就使用printf函数吧    哈哈

使用特权

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

本版积分规则

13

主题

29

帖子

0

粉丝