打印

一个关于堆栈和程序空间的问题(DSP,PRINTF变参,.TEXT.DATA.STACK)

[复制链接]
2835|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sioca|  楼主 | 2012-1-11 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在CCS\28335平台上移植了一个FATFS文件系统,调试时发现printf函数不正常了,程序是在其他单片机(STM32F107)上测试过的。
具体现象是进到XPRINTF后,str参数的地址没有正确传进来,导致xprintf中处理的是其他地址,但是其他函数是正常的。详情如下:
msg = "xprintf test\n"; --编译后msg地址0x0000DCD2
xprintf(msg); // 打印不正常乱码
xputs(msg); // 串口直接打印正常

void xprintf (const char* str, ...)
{
va_list arp;            -- 程序进到这里以后 str地址变为0xADA8
int d, r, w, s, l;

va_start(arp, str);
while ((d = *str++) != 0) {

另外我又确认了以下几件事:
1.把xprintf移植到一个小工程中(不带文件系统),xprintf可以正常工作。
2.将STACK映射到外部SRAM,程序崩溃,函数返回不正常。
3.修改TI DSP的CMD文件(内存映射),将除STACK以外所有和内部RAM有关的部分都映射到外部SRAM,并将STACK大小初始化成2K。现象依旧。


我觉得是跟STACK有关,但是对启动代码和PRINTF这种又不是很了解。
大家知道怎么回事或者能给小弟提供一点建议么,谢谢。

相关帖子

沙发
12864| | 2012-1-19 01:15 | 只看该作者
为什么要限定const呢?

使用特权

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

本版积分规则

122

主题

419

帖子

1

粉丝