meijjun 发表于 2012-6-20 21:03:58

【求助】keil回调传递指针时出错(STC12LE5A60S2)

.h文件中
typedef unsigned char BYTE;
typedef void (* TCPCALLBACK)(BYTE *tcpdata, BYTE SocketID)reentrant;
void TCPSetCALLBACK (TCPCALLBACK Proc);
void TCP_Handler (BYTE *tcpdata, BYTE SocketID);


.c文件中
static void TCPDefaultCallBack (BYTE *tcpdata, BYTE SocketID);
static TCPCALLBACK TCPCallback = TCPDefaultCallBack;

void TCPSetCALLBACK (TCPCALLBACK Proc) {
TCPCallback = Proc;
}

static void TCPDefaultCallBack (BYTE *tcpdata, BYTE SocketID) {

}

void TCP_Handler (BYTE *tcpdata, BYTE SocketID) {
// Invoque the CALLBACK function
TCPCallback((BYTE *)tcpdata, SocketID);
printf("---%s\n", tcpdata);
}

主文件中
//回调实现
void TCPReceive(BYTE *tcpdata, BYTE SocketID)
{
printf("\nSocket_ID:%bu\nRecv:%s\n", SocketID, tcpdata);
}

//在main中调用方法注册回调
TCPSetCALLBACK(TCPReceive);


现在遇到这样的一个问题,当调用TCP_Handler函数时,传递了一个字符数组(内容是“GPRS Demo!”)的指针进去,在其内部执行到回调函数(TCPReceive)中时,但其打印了一堆的ASCII值,为什么会这样呢,求高手帮忙分析下。
另外TCP_Handler中的printf("---%s\n", tcpdata),打印又是正常的

打印信息如下:

Socket_ID:3
Recv:32 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬
---GPRS Demo!

如果我把TCP_Handler函数改为如下:
void TCP_Handler (BYTE *tcpdata, BYTE SocketID) {
// Invoque the CALLBACK function
printf("+++%s\n", tcpdata); 1
TCPCallback((BYTE *)tcpdata, SocketID); 2
printf("---%s\n", tcpdata); 3
}
1和3两处的打印都是正确的
打印信息如下:
+++GPRS Demo!

Socket_ID:3
Recv:32 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬
---GPRS Demo!

meijjun 发表于 2012-6-20 22:23:08

自己顶,求高手帮忙

jklooo 发表于 2012-6-21 09:36:08

不会用指针的飘过。

meijjun 发表于 2012-6-21 20:25:30

求大侠们帮忙查查看问题

yurinacn 发表于 2012-6-22 01:14:41

我也遇过类似问题,还没解决。
注意一下如果程序比较大的话,可能是堆栈区过小导致的

chenerbox2 发表于 2012-6-22 08:36:50

你试试把keil 的覆盖分析去掉看看

帮助中搜 NOOVERLAY 试试
页: [1]
查看完整版本: 【求助】keil回调传递指针时出错(STC12LE5A60S2)