keil回调传递指针时出错
【求助】keil回调传递指针时出错
.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: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬
---GPRS Demo!
------解决方案--------------------
你好:
1,单片机有没有申请内存空间的函数?如果有的话,buffer申请一个么。作为堆来使用。
2,printf("---%s\n", tcpdata);这个打印时把buffer中的内容作为字符串来输出。你的buffer中的内容未必就是传入的DEMO。其实看这个结果,buffer中的内容是有目的的,只要是ascii码可以表示的:1~9 a
~b都有的,会不会是在其他的地方传入的指针,指向的buffer空间已经被修改过了。
谢谢
希望可以给你帮助
------解决方案--------------------
你的BUFF中有结束符?
.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: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€亗儎厗噲墛媽崕彁憭摂晼棙櫄洔潪煚、¥ウЖ┆辈炒刀犯购患骄坷谅媚牌侨墒颂臀闲岩釉罩棕仝圮蒉哙徕沅彐玷殛腱眍镳耱篝貊鼬
---GPRS Demo!
------解决方案--------------------
你好:
1,单片机有没有申请内存空间的函数?如果有的话,buffer申请一个么。作为堆来使用。
2,printf("---%s\n", tcpdata);这个打印时把buffer中的内容作为字符串来输出。你的buffer中的内容未必就是传入的DEMO。其实看这个结果,buffer中的内容是有目的的,只要是ascii码可以表示的:1~9 a
~b都有的,会不会是在其他的地方传入的指针,指向的buffer空间已经被修改过了。
谢谢
希望可以给你帮助
------解决方案--------------------
你的BUFF中有结束符?