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.

[参考译文] TMS320F28388D:CM SYS/BIOS 和 driverlib_cm

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1121630/tms320f28388d-cm-sys-bios-and-driverlib_cm

器件型号:TMS320F28388D

大家好、

我尝试在 F28388D CM 上使用 SYS/BIOS、同时使用 driverlib_cm 库、但似乎存在冲突。

首次构建应用程序时、我遇到链接器错误:

#10010 errors encountered during linking; "cm_app.out" not built	cm_app		 	C/C++ Problem
<a href="file:/C:/ti/ccs1100/ccs/tools/compiler/dmed/HTML/10234.html">#10234-D</a>  unresolved symbols remain	cm_app		 	C/C++ Problem
gmake: *** [all] Error 2	cm_app		 	C/C++ Problem
gmake[1]: *** [cm_app.out] Error 1	cm_app		 	C/C++ Problem
unresolved symbol vectorTableFlash, first referenced in ./device/cm.obj	cm_app		 	C/C++ Problem

然后我#define USE_RTOS、这样矢量表闪存部分将不会在 driverlib_cm/interrupt.c 中定义 但是、我遇到了编译错误、因为 interrupt.h 中仍然使用了 vectorTableRAM 和 Interrupt_DefaultHandler 我的 driverlib_cm.h 中始终包含 interrupt.h (#include 的所有 driverlib_cm *。h 文件)。

#20 identifier "Interrupt_defaultHandler" is undefined	interrupt.h	/cm_app/device/driverlib_cm/driverlib_cm	line 463	C/C++ Problem
#20 identifier "vectorTableRAM" is undefined	interrupt.h	/cm_app/device/driverlib_cm/driverlib_cm	line 463	C/C++ Problem

是否可以简单地不包含"interrupt.h"? 还是从 interrupt.h 中禁用/删除 Interrupt_unregisterHandler()函数? 通常、在使用 SYS/BIOS 时、不应使用哪些 driverlib_cm 函数?

在我看来、我应该能够在 CM 应用程序中同时使用 SYS/BIOS 和 driverlib_cm、但是看起来某些 driverlib_cm 代码仍然缺少"ifndef use_rtos"条件。 我是对的吗?

另一个问题:
当使用 SYS/BIOS 时、我是否仍然需要在初始化代码中执行这一行代码、或者 SYS/BIOS 是否处理这行代码?

memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);

谢谢、此致、
Arjan

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

    SYS/BIOS 应该在其 Hwi 模块中具有等效函数、以涵盖 DriverLib 中断模块中的所有内容、因此您不需要它。 我认为、中断是唯一您绝对不应该使用的中断、但还有一些其他潜在冲突需要注意。 例如、您可以使用 DriverLib 中的计时器函数、但需要确保 SYS/BIOS 尚未将该计时器实例用于某项任务(如计时器、时钟或时间戳)。 引导模块还包含闪存和 PLL 配置选项、这些选项可能与一些 DriverLib 函数相冲突。 您可以使用这两种方法中的任何一种,只需确保您已删除了未使用的配置/函数调用。

    您仍然需要在代码中为 ramfuncs 执行 memcpy、是的。

    惠特尼

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

    尊敬的惠特尼:

    感谢您的回复。 我主要使用 driverlib_cm 函数来访问以太网、CAN 和 UART 等接口外设。 例如、我将替换此调用
     Interrupt_registerHandler( INT_UART0, &UART_ISR );
    致电Hwi_create(),对吧?

    但是在 driverlib 函数中,也可以对中断寄存器进行“隐藏”访问,如UART_enableInterrupt()。 在将它与 SYS/BIOS 一起使用时、这是否会导致任何冲突?

    我只是有点担心、我可能会在不知情的情况下使用 driverlib_cm 函数、这会使 SYS/BIOS 执行混乱。 这就是为什么我希望"use_rtos"定义能保护我免受这种影响的原因。

    此致、
    Arjan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="461120" URL" url="μ C/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1121630/tms320f28388d-cm-sys-bios-and-driverlib_cm/4159563#4159563]I 将替换此调用
     Interrupt_registerHandler( INT_UART0, &UART_ISR );
    致电Hwi_create(),更正?[/quot]

    是的、没错。

    [引用 userid="461120" URL"~//support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forume/1121630/tms320f28388d-cm-sys-bios-and-driverlib_cm/4159563#4159563)]但在 driverlib 函数中也可以进行"隐藏"中断"访问UART_enableInterrupt()。 与 SYS/BIOS 一起使用时、这是否会导致任何冲突?[/QUERP]

    如果看一下 UART_enableInterrupt()的代码,它只会写入外设级中断使能,这是正常且必要的。 它主要是您需要查找的 NVIC 和矢量表函数。 您可以仔细检查源代码、以确保您怀疑某个函数可能正在执行此操作、但从我看到的情况来看、它通常只是寄存器/注销函数(例如  UART_registerInterrupt)执行此操作。

    惠特尼

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

    感谢 Whitney、我们将做到这一点。

    此致、
    Arjan