本帖最后由 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 |