在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 4195|回复: 3

[讨论] stm32上装uclinux,运行应用程序死机

[复制链接]
发表于 2014-2-12 10:35:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我在stm32F4上装了uclinux,运行了一个tcp的通讯程序,大概2、3小时后,
在超级终端上按Ctrl+c没反应,只能reset

请问谁知道什么原因吗?
发表于 2014-2-12 21:26:10 | 显示全部楼层
你问的太简单了...没有代码,也没有现象...也没有初步断定是硬件问题还是软件问题...就一句在超级终端上按CTRL+C无反应,只能reset...
初步断定你的代码肯定有死循环.....仔细检查里面的while代码段...看看死在哪里了....
 楼主| 发表于 2014-2-13 09:10:37 | 显示全部楼层
上代码:

int  main(int argc, char *argv[])
{
        int res;
        pthread_t p_socket[MAX_CHAN_NUM];
        void *thread_result;
        int ret ,stacksize;   //2k
        int port_num=0;
        int sockfds[MAX_CHAN_NUM];
        struct timeval waitd;   
        fd_set read_flags,write_flags;
        int err;
        int n;
    char buf[2];

        printf("process id =%d\n",getpid());

        for (int i = 0; i < MAX_CHAN_NUM; i++)
        {
                port_num = START_PORTNUM + i;
                sockfds[i] = init_tcp("192.168.0.5",port_num);
                printf("socket %d inited\n",sockfds[i]);
        }

       
    printf("all sockets created!\n");

   
        pthread_t thread_test;
        res = pthread_create(&thread_test,NULL,void_func, NULL);
        if (res !=0)
        {
                perror("Thread create fail.\n");
                exit(1);
        }

        blnwatch_mem =true;
       
    timeval tvstart,tvend;

        memset(send_text,0,sizeof(send_text));

        srand((int)time(0));
        for(int i=0;i<MAX_SEND_LENS -3;i++)
        {
                char buf[2];
                int num;
                num = (int) (9.0*rand() / (RAND_MAX + 1.0));
                sprintf(buf,"%d",num);
                strcat(send_text,buf);
        }

    try
    {
                while (1)
                {
                        waitd.tv_sec = 1;     // Make select wait up to 1 second for data  
                        waitd.tv_usec = 0;    // and 0 milliseconds.  
                       
                        FD_ZERO(&read_flags); // Zero the flags ready for using  
                        FD_ZERO(&write_flags);

                        for (int i = 0; i < MAX_CHAN_NUM; i++)
                        {
                                FD_SET(sockfds[i],&read_flags);       
                                FD_SET(sockfds[i],&write_flags);
                        }

                        err=select(MAX_CHAN_NUM, &read_flags,&write_flags,  
                                (fd_set*)0,&waitd);

                        if(err < 0) continue;  

                        for (int i = 0; i < MAX_CHAN_NUM; i++)
                        {
                                if(!IsConnected(sockfds[i]))
                                {
                                        printf("reconnect.\n");
                                        sockfds[i] = init_tcp("192.168.0.5",START_PORTNUM + i);
                                }
                                if(FD_ISSET(sockfds[i], &read_flags)) { //Socket ready for reading  
                                        FD_CLR(sockfds[i], &read_flags);
                                       
                                        n = socket_read(sockfds[i], &buff, sizeof(buff));
                                        if(n >0)
                                        {
                                               
                                                printf("read ok.\n");
                                               
                                                strncpy(send_text,buff,n);
                                                sprintf(buf,"%d",sockfds[i]);
                                                strncpy(send_text,buf,2);

                                                printf("copy ok.\n");
                                        }
                                        else if(n == 0)
                                        {
                                                printf("reconnect.\n");
                                                sockfds[i] = init_tcp("192.168.0.5",START_PORTNUM + i);
                                        }
                                        else
                                        {
                                                printf("read error.\n");
                                        }
                                }  

                                if(FD_ISSET(sockfds[i], &write_flags)) { //Socket ready for writing  
                                        FD_CLR(sockfds[i], &write_flags);  

                                        n = socket_write(sockfds[i], &send_text, sizeof(send_text));
                                        if (n < 0)
                                        {
                                                printf("write error, errno %d \n",errno);
                                                //break;
                                        }
                                        else
                                        {
                                                printf("write ok\n");
                                                //memset(send_text,0,sizeof(send_text));
                                        }
                                         
                                }  
                        }
                        printf("no data\n");

                        memset(send_text,0,sizeof(send_text));

                        srand((int)time(0));
                        for(int i=0;i<MAX_SEND_LENS -3;i++)
                        {
                                char buf[2];
                                int num;
                                num = (int) (9.0*rand() / (RAND_MAX + 1.0));
                                sprintf(buf,"%d",num);
                                strcat(send_text,buf);
                        }
                }
        }
    catch (...)
    {
                printf("catch error,errno %d \n",errno);
    }
        printf("exit while\n");

        for (int i = 0; i < MAX_CHAN_NUM; i++)
        {
                close_tcp(sockfds[i]);
        }

       
        debug("prot ok\n");

        //close_tcp(socket_fd);
       
}
发表于 2018-12-16 13:02:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 23:38 , Processed in 0.019085 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表