打印
[ZLG-ARM]

移植SNMP到zlg/ip时遇到的问题

[复制链接]
1406|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suiting|  楼主 | 2007-9-9 20:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用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长度
……
        

相关帖子

沙发
suiting|  楼主 | 2007-9-11 07:13 | 只看该作者

修改后可以访问SNMP代理了

但是奇怪哦,如果把TaskD的堆栈修改为500以上或300以下就可以了,原来它的堆栈是400。

使用特权

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

本版积分规则

5

主题

9

帖子

1

粉丝