sdk中使用sprintf问题求解

[复制链接]
 楼主| 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 | 显示全部楼层
路过学习  了
hawksabre 发表于 2012-9-4 19:36 | 显示全部楼层
sprintf的功能是字串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数,使用时经常出问题,而且只要出问题通常就是能导致程序崩溃的内存访问错误,但好在由sprintf 误用导致的问题虽然严重,却很容易找出,无非就是那么几种情况,通常用眼睛再把出错的代码多看几眼就看出来了。
调用printf函数生成的代码空间相对与sprintf小的多了   什么原因   很纠结   希望高人指点    如果实在不行  建议就使用printf函数吧    哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

29

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部