TMS320F28377S: 内置函数和内在函数有可重入性吗

Part Number: TMS320F28377S

Built-In Functions包括abs()  fabsf()  sqrt()

Intrinsics包括__sat()  __fsat()  __divf32()

这些函数有可重入性吗,比如在主循环执行__fsat()时,触发中断并在中断内执行__fsat() ,两次执行都会返回正确值吗

  • 您好:

    在讨论TMS320F28377S(一种TI的C2000系列DSP处理器)上的内置函数(Built-In Functions)和内在函数(Intrinsics)的可重入性时,我们需要理解几个关键点。

    内置函数(Built-In Functions)

    内置函数,如abs(), fabsf(), sqrt()等,在大多数编译器(包括用于TI DSP的编译器)中,都是设计为线程安全或可重入的,但这里的“线程”概念在嵌入式系统中可能不直接适用,因为嵌入式系统通常不运行多线程操作系统。然而,在中断上下文中,可重入性是一个重要的考虑因素。

    • 可重入性:这些内置函数通常不会使用静态或全局变量来存储中间结果,因此它们在中断服务例程(ISR)中被调用时,可以安全地与主循环或其他中断中的调用并行执行。即,在中断中调用这些函数时,它们应该能够返回正确的结果,前提是它们不依赖于被中断时主循环或其他中断可能修改的状态。

    内在函数(Intrinsics)

    内在函数,如__sat(), __fsat(), __divf32()等,是编译器提供的特殊函数,用于直接映射到硬件指令或实现特定的硬件加速功能。它们的可重入性取决于它们的具体实现和使用的资源。

    • 可重入性:对于大多数内在函数,特别是那些不涉及复杂状态管理或共享资源的函数(如__fsat()用于浮点数饱和),它们很可能是可重入的。然而,如果内在函数依赖于特定的硬件寄存器或资源,而这些资源可能在中断处理中被修改,则它们可能不是完全可重入的。

    注意事项

    • 硬件资源:在DSP中,某些操作(如除法)可能依赖于特定的硬件单元,这些单元可能在多个上下文中被共享。虽然编译器和硬件通常设计为在中断发生时正确处理这种情况,但在极端情况下,这可能会影响函数的可重入性。
    • 中断优先级:如果中断优先级设计得当,高优先级的中断可以打断低优先级的任务(包括主循环中的任务),而不会导致数据损坏或不一致。然而,这要求程序员仔细设计中断处理逻辑,以确保在中断服务例程中正确保护共享资源。

    结论

    在TMS320F28377S上,内置函数(如abs(), fabsf(), sqrt())和大多数内在函数(如__fsat())在大多数情况下都应该是可重入的,前提是它们不依赖于可能被中断修改的全局或静态状态。