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.

[参考译文] PROCESSOR-SDK-J784S4:J784S4:如何在 QNX 上将 pthread 堆栈大小设置为8MB

Guru**** 2478765 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1432390/processor-sdk-j784s4-j784s4-how-to-set-pthread-stack-size-to-8mb-on-qnx

器件型号:PROCESSOR-SDK-J784S4

工具与软件:

您好、TI 专家!

打印的栈大小值  Thread_attr  将其初始化  pthread_attr_init (&thread_attr); 使用  pthread_attr_getstacksize  那么您将获得以下结果:

Linux OS:8388608 (8MB)

QNX OS:0

我们如何  在 QNX 上将 pthread 的栈大小设置为8MB、就像在 Linux 上一样?

tiovx/source/platform/os/posix/tivx_task.c

vx_status tivxTaskCreate(tivx_task *task, const tivx_task_create_params_t *params)
{
    vx_status status = (vx_status)VX_SUCCESS;

    if ((NULL != task) && (NULL != params))
    {
        tivx_task_context context;

        task->tsk_handle = NULL;

        context = (tivx_task_context)ownPosixObjectAlloc((vx_enum)TIVX_POSIX_TYPE_TASK);
        if(context == NULL)
        {
            VX_PRINT(VX_ZONE_ERROR, "Context memory allocation failed\n");
            status = (vx_status)VX_ERROR_NO_MEMORY;
        }
        else
        {
            pthread_attr_t thread_attr;

            task->stack_ptr = params->stack_ptr;
            task->stack_size = params->stack_size;
            task->core_affinity = params->core_affinity;
            task->priority = params->priority;
            task->task_func = params->task_main;
            task->app_var = params->app_var;

            status = pthread_attr_init(&thread_attr);

            if(status==0)
            {
                #if 0
                {
                    struct sched_param schedprm;
                    uint32_t pri;

                    if(task->stack_size>0)
                    {
                        status |= pthread_attr_setstacksize(&thread_attr, task->stack_size);
                    }
                    status |= pthread_attr_setschedpolicy(&thread_attr, SCHED_RR);

                    pri = PRI_MIN;
                    if(task->priority==TIVX_TASK_PRI_HIGHEST)
                    {
                        pri = PRI_MAX;
                    }
                    else
                    if(task->priority==TIVX_TASK_PRI_LOWEST)
                    {
                        pri = PRI_MIN;
                    }

                    schedprm.sched_priority = pri;
                    status |= pthread_attr_setschedparam(&thread_attr, &schedprm);
                }
                #endif

                if(status==0)
                {
                    status = pthread_create(&context->hndl, &thread_attr, tivxTaskMain, task);

此致、

Hyeonseong

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

    你好、 Hyeonseong、

    是的、您的期望是正确的、我们必须看到第一个 pthread_attr_getstacksize  返回 在期间设置的值  pthread_attr_init .

    我们将检查并返回看看为什么会得到0。

    谢谢。

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

    你好、 Hyeonseong、

    我们快速进行了检查并建议您删除第32行的"#if 0"和第57行的"#endif"来解决该问题。

    在此期间、我们在系统中提交了一个错误、以进一步分析为什么使用来设置栈大小  pthread_attr_init  无法正常工作、以及 BlackBerry QNX 提供的 API 是否存在问题。  

    谢谢。

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

    您好 Praveen、

    感谢您的确认。  我将 #if 0  #endif 按照建议删除第32行和第57行。 另外、如果 BlackBerry 对该 pthread_attr_init 功能的问题有任何答复、请随时向我通报最新情况。

    谢谢。

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

    许贤 成:

    当我们完成分析时、我们会告诉您。

    谢谢。

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

    正在解锁该线程。