搜索
bottom↓
回复: 0

程序跑进rt_timer_check函数中出不来了

[复制链接]

出0入0汤圆

发表于 2016-2-3 09:07:06 | 显示全部楼层 |阅读模式
做了个程序用来接收TCP数据然后通过DMA发送出去,但是跑个一两天,程序就会进入rt_timer_check中出不来。导致无法正常接收TCP发来的数据。
我看了下while (!rt_list_isempty(&rt_timer_list[RT_TIMER_SKIP_LIST_LEVEL-1]))这个判断导致的。
在这个循环中一直判断if ((current_tick - t->timeout_tick) < RT_TICK_MAX/2) 然后stop timer。
我没太研究过这个函数是做什么的,我想知道造成这样问题的原因是什么,如何解决。
附接收TCP数据函数
             while(1)
            {
                /* accept any icoming connection */
                netconn_accept(tcpconn, &newconn);
               
                if(newconn)
                {
                    struct netbuf *inbuf;
                    char *buf;
                    u16_t buflen;
                    while(netconn_err(newconn) == ERR_OK)
                    {
                        ad9789_read_block_num_temp = ad9789_read_block_num>>(10-AD9789_CONVERT_MOVE);   
                        ad9789_read_block_num_temp &= 0x3f;
                        ad9789_write_block_num = ad9789_write_add>>10;                  
                        if((ad9789_write_block_num != ad9789_read_block_num_temp)&&(ad9789_write_block_num != ((ad9789_read_block_num_temp-1)&0x3f))&&(ad9789_write_block_num != ((ad9789_read_block_num_temp-2)&0x3f)))
                        {
                            /* Read the data from the port, blocking if nothing yet there.
                            We assume the request (the part we care about) is in one netbuf */
                            err = netconn_recv(newconn, &inbuf);

                            if(inbuf != NULL)
                            {
                                netbuf_data(inbuf, (void**)&buf, &buflen);     
                                
                                if(((unsigned long)(ad9789_write_add) + buflen) > 0xffff)
                                {
                                    memcpy(&udp_receive_buffer1_2[ad9789_write_add], buf, (0xffff-ad9789_write_add+1));
                                                                        
                                    memcpy(udp_receive_buffer1_2, &buf[(0xffff-ad9789_write_add+1)], buflen-(0xffff-ad9789_write_add+1));
                                    ad9789_write_add = buflen-(0xffff-ad9789_write_add+1);
                                }
                                else
                                {
                                    memcpy(&udp_receive_buffer1_2[ad9789_write_add], buf, buflen);
                                    ad9789_write_add += buflen;
                                }
                                
                                /* Delete the buffer (netconn_recv gives us ownership,
                                so we have to make sure to deallocate the buffer) */
                                netbuf_delete(inbuf);
                            }
                        }
                        else
                        {
                            delay_ms(5);
                        }
                    }
                    /* Close the connection (server closes in HTTP) */
                    netconn_close(newconn);
                    
                    /* delete connection */
                    netconn_delete(newconn);
                }
            }
是接收TCP数据然后通过DMA向AD9789发送的函数,我在想是不是因为netconn_recv没有设置超时等待时间导致的……请各位指导。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 01:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表