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.

[参考译文] RTOS/EK-TM4C1294XL:CCS 声明在.cfg 脚本中静态配置的计时器句柄的未定义标识符

Guru**** 2465890 points
Other Parts Discussed in Thread: EK-TM4C1294XL, SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/658456/rtos-ek-tm4c1294xl-ccs-claims-undefined-identifier-for-a-timer-handle-that-was-statically-configured-in-cfg-script

器件型号:EK-TM4C1294XL
Thread 中讨论的其他器件: SYSBIOS

工具/软件:TI-RTOS

平台:使用 TI-RTOS 2.16.1.14和 XDCtools 3.32.00.06的 EK-tm4c1294xl

CCS 版本:7.3

使用 GUI、我添加了一个一次性计时器、我希望在触发硬件中断时在函数中手动启动该计时器。 当我对 Timer_start ()执行一个调用、然后构建项目时、CCS 声称标识符是未定义的、即使定时器的句柄出现在.cfg 脚本中、并且当我在主.c 文件的句柄上"打开声明"时也是如此。 一次性计时器应运行5秒、然后调用 sigWatchTimerISR。 这是代码。 如果您需要更多信息、请告诉我、并感谢您的帮助。

由于 GUI 配置、.cfg 脚本代码自动处理:

timer0Params.instance.name ="sigWatchTimer";
timer0Params.period = 5000000;
timer0Params.startMode = xdc.module ("ti.sysbios.interfaces.ITimer").StartMode_USER;
timer0Params.runMode = XDC.MODULE ("ti.sysbios.interfaces.ITimer").RunMode_ONESHOT;
program.global.sigWatchTimer = Timer.create (-1、"&sigWatchTimerISR"、timer0Params);

引发错误的 main.c 代码:

Timer_start (sigWatchTimer);

错误:

说明   资源   路径   位置   类型
#20标识符"sigWatchTimer"未定义   empty.c   /gpioSigWatch   第82行   C/C++问题

为了充分理解(我不熟悉 RTOS),我按照下面显示的帮助部分中列出的 Timer_start()函数的指令进行了操作。 注意:我尚未添加线程保护。

timer_start ()  // 实例
索引 URL

重新加载并启动计时器

c  概要 目标域
void  Timer_start (Timer_handle );
 

参数
句柄 — 先前创建 的计时器 实例对象的句柄

详细信息
在使用 启动   和停止 API 时、必须遵守线程安全、以避免可能的计时器配置错误和意外行为。 为了防止可重入性、用 Hwi_disable() 和 Hwi_restore() 调用围绕启动/停止调用:
//如果中断可能导致
//对 Timer_start()的另一个调用,则禁用中断。
键= Hwi_disable();
Timer_stop ();
...
Timer_start ();
Hwi_restore (key);

副作用
启用定时器的中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外:我确实添加了这个 include 指令,该指令在与 Timer_start()函数详细说明的帮助页面中列出了一个:

    #include
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    更新:当在 ti.sysbios.family.arm.lm4.Timer.h 下定义 Timer_start 函数调用时、我意识到我在 ti.sysbios.hal.计时 器模块下的 GUI 中创建了计时器、因此我删除了该计时器、将其重新创建为 arm.lm4器件特定计时器并更改了 Timer_start 调用中的参数。 这没用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    阿尔贝托

    您是否具有以下命令来引入在.cfg 文件中创建的变量
    #include

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

    谢谢、这解决了问题。 但是,我创建了第二个与第一个计时器非常相似的计时器(在 GUI 中为单次触发、用户启动),然后在调用 Timer_start()激活计时器时得到完全相同的错误。 我肯定包含了 global.h。 它不会在第一个计时器上进行平衡、而是在第二个计时器上进行平衡。 我确认通过的句柄是正确的。 有什么想法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否发布生成第二个代码的.cfg 代码以及对 Timer_start 的调用? 此外、请确认在开始构建过程中、当处理.cfg 以构建内核时、没有警告。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我假设这已经解决了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我相信确实如此。 如果我能正确地回忆一下、这是一个在点击"build"后消失的幽灵错误。 我们现在正朝着不同的方向移动、我的回忆并不是100%。 我将指定问题是否已解决。