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/TM4C1292NCPDT:堆栈错误

Guru**** 2390755 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/651080/rtos-tm4c1292ncpdt-stack-error

器件型号:TM4C1292NCPDT

工具/软件:TI-RTOS

您好!

我已配置32位 计时器5、如下所示、

SysCtlPeripheralDisable (SYSCTL_Periph_TIMER5);

SysCtlPeripheralReset (SYSCTL_Periph_TIMER5);

SysCtlPeripheralEnable (SYSCTL_Periph_TIMER5);

SysCtlIntEnable (SYSCTL_Periph_TIMER5);

while (!SysCtlPeripheralReady (SYSCTL_Periph_TIMER5))

/*将 timer3设置为从系统时钟驱动的32位周期递增计数器*/

TimerClockSourceSet (TIMER5_base、TIMER_CLOCK _PIOSC);

TimerConfigure (TIMER5_base、TIMER_CFG_A_PERIODICY_UP);

TimerMatchSet (TIMER5_base、TIMER_A、0xFFFFFFFF);

TimerLoadSet (TIMER5_base、TIMER_A、0x4C4B400);

TimerIntRegister (TIMER5_base、timer_A、ModbusWatchdogISR);

TimerIntEnable (TIMER5_base、TIMER_TINA_TIMEOUT);

定时器使能(TIMER5_base、TIMER_A);

在 ISR 处理程序中、我已清除计时器中断。 我已在.cfg 文件中设置堆栈大小15KB。

 

program.stack = 15360;

 

打开显示堆栈超出范围的计时器后、我的程序将终止。 控制台窗口如下所示、


调试窗口如下所示、


下面随附了 ROV 中的任务详细信息、


 

请帮助我摆脱此错误。

希望您能快速回复、

 

谢谢、此致

Sandra

 

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

    [报价用户="Sandra george78"]期待您的快速回复,

    那些"期待"快速答复的人... 更有可能"期待"失望-因为如此苛刻的要求!

    "论坛中立"不应给予 所有海报"平等的获取和回应时间"?     (不仅限于要求过高(预期)的人!)

    请注意、您经常来此(请求救援)、您不应该考虑投资"您的"时间/精力"帮助他人?"    这证明 (两者)更"合理和平衡的期望"是不是?

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

    您好、Sandra、

    您不能在基于 TI-RTOS 的应用程序中调用 TimerIntRegister。 有关发生的情况的详细信息、请查看此主题上的最后一篇文章 :e2e.ti.com/.../2347913

    这是一个不同的器件、但是 driverlib 的 IntRegister()函数是相似的。

    您可以使用 TI-RTOS 内核中的计时器模块来配置计时器。 或者、如果所需的周期是时钟周期的倍数(默认情况下、器件上为1ms)、则可以使用时钟模块。

    Todd

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

    感谢 Todd 的答复。

    我在 .cfg 文件中配置了计时器模块、如下所示、

    现在、计时器正在工作。 但我需要明确 timerLoadSet()中要设置的值。 现在、我将随机值设置为 timerLoadSet 函数、并使用以下函数从用户函数启动计时器。

    TimerLoadSet (TIMER5_base、TIMER_A、0xFFFFFFFF);

    IntMasterEnable()

    TimerIntEnable (TIMER5_base、TIMER_TINA_TIMEOUT);

    定时器使能(TIMER5_base、TIMER_A);

    IntEnable (INT_TIMER5A);

    我希望将计时器的超时值设置在100ms 和65535ms 之间、以供用户编程。  我们在.cfg 文件中为周期设置的值与 timerLoadSet 函数中给出的值之间有什么关系? 您能告诉我如何计算要加载到计时器的值吗?

    此致

    Sandra

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

    您可以使用 Timer_setPeriod() API 来更改计时器的周期。 您无需使用任何 driverlib 调用。 您可以通过内核中的计时器模块执行所有操作。

    请参阅内核(SYS/BIOS) API 参考、以查看有关计时器模块的完整详细信息。

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

    您好 Todd、

    非常感谢您的回复。

    此致

    Sandra

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已将您的新问题拆分为新主题 e2e.ti.com/.../2393837

    Todd