This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320DM368:警报服务器创建线程失败、错误代码为11

Guru**** 2616675 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/577830/tms320dm368-alarm-server-create-thread-fail-with-error-code-11

器件型号:TMS320DM368

您好!

我目前在基于 DM368视频处理器的项目中工作。 我将 IPNC_RDK_DM36x_5.1_dm368用于该平台。 我目前面临一个问题(仅在漫长的过程中、即2或3天后)。  我遇到以下错误:

错误:报警服务器 creat 线程失败  

错误代码11

我们已安排 SD 录像并启用运动检测。

经过2-3天的长时间运行后、我们将得到上述误差。

是否有人可以建议出现此问题的原因?

请帮助

提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我将通知 IPNC 团队研究此问题。
    遇到此错误时、您能否共享日志。

    此致、
    Anuj
    Pathpartner Technology Pvt Ltd.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我正在附加日志文件。

    e2e.ti.com/.../alarmissue.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否有更新?

    注:

    在获取线程创建失败错误后、计划的记录会开始、并且在一段时间后会终止 system_server 进程、从而触发看门狗。

    请在该问题上提供帮助。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能不能共享您的用例代码、以便我们可以在我们的一侧重现相同的错误。

    此致

    Anuj

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Anuj:

    我们目前使用 的是 IPNC_RDK_DM36x_5.1_dm368。 我们从以下文件的代码片段中得到错误。

    文件名:ipnc_app/sys_server/src/alarm_main.c

    其功能为:

    int alarm_main_loop (int qid、int audqid、SemHandl_t hAlarmSem)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    即使仅单独启用 SD 卡记录或运动检测、我们也发现了此问题。 代码片段如下所示。

    当我们使用 pthread_join 更改 pthread_detach 时、我们更早地得到了该问题。 在 pthread_detach 的情况下 、我们在两天之后观察到了该问题、但对于 pthread_join、我们在1天后得到了该问题。

    pElemment =(AlarmParam_t*) malloc (sizeof (AlarmParam_t)+ 32);

    if (p环境= NULL){
    printf ("错误:警报服务器需要更多内存\n");
    中断;

    pEc环境-> msg_id = qid;
    pEc环境-> audMsg_id = audQid;
    pEc环境->hAlarmSem = hAlarmSem;

    memcpy (&pEvetment -> msgbuf、&msgbuf、sizeof (msgbuf));

    if ((ret = pthread_create (&thread、NULL、ProcAlarmThread、p环境))!= 0){

    printf ("线程失败返回 val %d\n"、ret);

    FREE (环境);

    printf ("\n 错误:警报服务器创建线程失败\n");

    中断;

    pthread_detach (线程);

    //pthread_join (线程、空);

    请在该问题上提供帮助。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    以下是代码片段。

    在 本例中、我们通过添加属性(pthread_create_detached)进行了测试。 仍然存在错误代码11的相同问题。

    int alarm_main_loop(int qid, int audQid, SemHandl_t hAlarmSem)
    {
        ALARM_MSG_BUF msgbuf;
        int msg_size, ret = 0;
        int event_index, sch_index;
        AlarmParam_t* pEvironment;
        pthread_t thread;
        pthread_attr_t attr;
    
        pAlarmSysInfo = GetSysInfo();
        if((hGIOSem = MakeSem()) == NULL){
                return -1;
        }
    /* ADDED TO SEND SCHEDULE INFO TO SCHEDULE MANAGER */
      for (event_index = 0; event_index < MAX_NO_OF_EVENTS; event_index++) {
     for (sch_index = 0; sch_index < MAX_SCHEDULES; sch_index++) {
         Set_Event_Schedule(pAlarmSysInfo>event_details[event_index].event_schedule[sch_index], event_index, sch_index, 0);
                }
        }
        while(1){
                /* Get Message */
    msg_size = msgrcv( qid, &msgbuf, sizeof(msgbuf) - sizeof(long), MSG_TYPE_MSG1, 0);
                if( msg_size < 0 ){
                        printf("Alarm Receive msg fail \n");
                        ret = -1;
                        break;
                } else if(msgbuf.src == MSG_TYPE_MSG1 || msgbuf.src < 0){
                        printf("Got Error message\n");
                        ret = -1;
                        break;
                } else if(msgbuf.event == ALARM_EVENT_QUIT){
                        printf("Recieved Quit event\n");
                        break;
                } else if(IsRestart()){
                        // If already restart flag is set then ignore the messages
                    continue;
                } else {
                        /* Process alarm event */
               pEvironment =  (AlarmParam_t*)malloc(sizeof(AlarmParam_t));
               if(pEvironment == NULL){
               printf("Error: More memory need for Alarm server\n");
               break;
               }
                 pEvironment -> msg_id    = qid;
                 pEvironment -> audMsg_id = audQid;
                 pEvironment->hAlarmSem   = hAlarmSem;
                 memcpy(&pEvironment -> msg_buf, &msgbuf, sizeof(msgbuf));
                 pthread_attr_init(&attr);
                 pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); 
                 if((ret = pthread_create(&thread, &attr, ProcAlarmThread,pEvironment)) != 0){
                      free(pEvironment);
                      printf("Error: Alarm server creat thread fail with error no %d\n", ret);
                      break;
                  }
                  pthread_attr_destroy(&attr);
                  pthread_detach(thread);
          }
        }
        DestroySem(hGIOSem);
        return ret;
    }

    Could you please help on this issue?

    Thanks