使用zlg/ip的接收任务和UDP任务两个任务,参考zlg的资料建立UDP socket是没问题的,可以ping,UDP收发也ok。需要指出的是,zlg的资料接收缓冲用的是局部变量,如下例1的rec_buffer[1025]。在移植snmp时,因为rec_buffer要被其他snmp函数处理,所以把它定义为全局变量,如例2。rec_buffer只被一个任务使用即TaskD。
现在问题是: 采用例1 - ping,UDP服务器收发正常; 采用例2 - ping正常,用UDP测试工具(即客户端)发一个信息给服务器端, 此时就出现异常,停止AXD,程序停在: Undefined B Undefined
例1 void TaskD (void *pdata) { uint8 rec_buffer[1025]; //接收缓冲 struct sockaddr servAddr; //用于保存本机IP地址、端口号等信息 struct sockaddr from; //用于保存对方IP地址、端口号等信息 int retStatus; //1-UDP;0-TCP uint16 fromLen; //用于保存对方sockaddr长度 …… 例2 static uint8 rec_buffer[1025]; //定义为全局变量 …… void TaskD (void *pdata) { //uint8 rec_buffer[1025]; //接收缓冲 struct sockaddr servAddr; //用于保存本机IP地址、端口号等信息 struct sockaddr from; //用于保存对方IP地址、端口号等信息 int retStatus; //1-UDP;0-TCP uint16 fromLen; //用于保存对方sockaddr长度 …… |