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-AM335X:将 POSIX 移植到 RTOS

Guru**** 2539500 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/883351/processor-sdk-am335x-porting-posix-to-rtos

器件型号:PROCESSOR-SDK-AM335X
Thread 中讨论的其他器件:SYSBIOS

GoodMorning、

我写信给您、因为我需要将使用 POSIX 线程的 Linux 应用移植到 RTOS 系统中。 我有以下疑问:

  1.  在 am335x_app_bbbam335x.cfg 中,如所示,我添加了以下内容:
    /*加载 POSIX 软件包*/
    VAR 设置= xdc.useModule('ti.posix.tirtos.Settings');
    settings.enableMutexPriority = true;
    此外、我必须更改 Task.enableIdleTask = true;否则、我会遇到错误、它是否正确?
  2. 在 Linux 中、我使用了 clock_nanosepec (&ts、NULL);其中 ts 是 timespec staruct。 在 POSIX 的 RTOS 实现中、我是否必须使用 unistd.h 中包含的 sleep (int usec)?
  3. 在 Linux 中、我使用了 clock_gettime (clock_monotonic、&ts);我可以在 RTOS 实现中使用它、对吧? 我是否只需要在初始化 clock_settime (clock_realtime、&ts)中调用;要将时间设置为0?
  4. 尽管包含了这些内容
    #include
    #include
    在 pthread.h 文件中、由于某些 ifdef、许多函数被排除。 为了避免这个问题,我必须定义一些常数_posix_thread 和 _posix_thread_priority_scheduling,如下所示。 这是正常的吗?
  5. RTOS 任务和 POSIX 线程能否在同一程序内共存?

感谢你的帮助。

此致、

Davide Brunelli

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

    您好、Davide、

    TI-POSIX 在此处进行了介绍: \docs\tiposix\Users_Guide.html。

    有一个在 AM335x 上执行的 POSIX 演示、如以下文档所述: http://software-dl.ti.com/processor-sdk-rtos/esd/docs/06_01_00_08/rtos/index_examples_demos.html?highlight=posix#posix-smp-demo

    我正在与同事寻求有关这些问题的进一步帮助。

    谢谢、此致、
    弗兰克

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

    尊敬的 David:

    1.$trees/tiposx/tiposix-1.31.00.09/packages/ti/posix/tirtos/Settings.xs 中存在这种情况:

       /*

        * BIOS POSIX 使用空闲任务清理分离的 pthread

        * 已退出。  检查空闲任务是否已启用。

        *

       if (Task.enableIdleTask == false){

           抛出新的 XDC.global.Error ("Task.enableIdleTask 必须设置为 true);

       }

    但是、这与 Settings.enableMutexPriority 设置无关(不确定您是否暗示了该设置)。

    tirtos POSIX 中有 clock_nanosleep(),但其函数原型与您使用的函数不同。  tirtos POSIX 中也有 nanosleep(),它具有与 clock_nanosleep()的 Linux 用法相同的函数原型参数。

    请看一下 /packages/ti/posix/ccs/time.h

     

    3.是的、您可以在 TI-RTOS 中使用 clock_gettime (clock_monotonic、&ts)。

    除非要建立新的时基,否则不需要调用 clock_settime()。

    4. 您应该在工具链 include 之前*的 include 路径上有 TI-POSIX include 文件夹。 包含 pthread.h 时、它将包含 TI-POSIX 版本、该版本随后将包含工具链版本。 类似如下:

    -I /.../ti/posix/gcc

    此外(如果是)、您不应使用–std=gnu99编译器。 使用 gnu99将包括 GNU POSIX 实现、它与 TI-POSIX 实现相冲突。 使用 c99或 c++98将关闭 GNU POSIX。

    5.是的。 实际上、POSIX 线程是作为 TI-RTOS 任务实现的。

    PS:最好知道您使用的是什么 SYSBIOS/tiposix 版本。 这些解决方案基于最近的 tiposix 版本。

    Kevin

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

    尊敬的 Kevin:

    感谢您的回答。 关于您的答案:

    1. 嗯、由于您清楚地解释了这个原因、我要求我解释设置 Task.enableIdleTask = true 的错误。 所以没关系。
    2. 我已经检查过、好的
    3. 我已经检查过、好的
    4. 根据您的建议、我将 GNU 编译器命令更改为"${CG_TOOL_GCC}"-c -std=c99、所有 POSIX 符号都显示为已定义。 显然、除了示例工程的默认 include 之外、我不需要包含任何额外的目录。
    5. 好的、我正在使用的 SDK 版本是 ti-processor-sdk-rtos-AM335x-evm-06.01.00.08-Windows-x86-64安装

    感谢您的支持。

    如果我需要进一步怀疑、我将再次写信。

    此致、

    Davide