工具/软件:TI-RTOS
这是我的问题(我以前问过):
尊敬的所有人:
当我按照用户指南(downloads.ti.com/.../index.html) 创建 OpenMP 项目时,我发现当我选择“启用对 OpenMP 3.0的支持”时,它将自动选择“假定使用多线程”(build->Advanced options -> Advanced Optimizations)。 问题是 ,选择“假定多线程”时,我无法使用 POSIX 线程。 该工程可以正确编译、但在运行时它将会在_c_int00 ()中裸片。 您能告诉我问题的解决方案吗?
谢谢、致以诚挚的问候。
/*********
@专家EricStotzer 的回答:
您好 QQ、
OpenMP 运行时不是在 POSIX 线程之上构建的。 事实上,OpenMP 运行时的默认配置不会启动 BIOS 运行。 您必须修改启动代码以启动 BIOS、然后在 BIOS 任务或 pthread 中的各自内核上运行主线程和工作线程。 例如、请参阅以下文件:
此外、每个 DSP 内核都运行自己的 BIOS 版本。 它不是所有内核上的 SMP。 OpenMP 运行时管理不同内核间线程的同步。 因此、不要指望 pthread API 在不同内核上运行的线程之间工作。
使用--openmp 开关时,默认情况下,编译器包括 RTS 库的多线程版本。
当我通过 POSIX = xdc.useModule('ti.sysbios.posix.Settings'在配置文件中启用 POSIX 支持时)、我看到了您报告的相同崩溃。 其中一个 RTS 文件中存在错误。 我在此处附上了固定版本:
您需要修改链接器命令文件(或使用此新文件重建 RTS 库)、以将此文件中的.far 段放置在 L2SRAM 中。
.localfar:
{
"* rts*。lib"(.far)
"* rts*。lib"(.fardata)
"*_mutex.*"(.far)
"*_mutex.*"(.fardata)
"ti.drv.qmss*.ae66"(.far:local)
"OMP_CONFIG_PE66.oe66"(.far)
"OMP_CONFIG_PE66.oe66"(.fardata)
}> L2SRAM
此外,在调用 args_main()之前 OpenMP 运行时调用 getenv 时出现问题(它将在 pthread 之外发生)。 您可以通过禁用 getenv()例程来解决该问题:
我将针对这些问题提交错误报告。 我希望这些信息能够帮助您的项目正常运行。
此致、Eric
/*********
我只想知道错误是否已修复,如果已修复,在哪个版本中。
谢谢! 此致!