工具/软件:TI-RTOS
您好!
我在 TM4C129 CPU 上的 TI-RTOS 有问题。
我创建简单任务:
#define MS_TO_TICK (x)((x)* 1000 / Clock_tickPeriod)
静态空 TestTask_Fxn (UARg arg0、UARg arg1) { while (1){ app_info ("%d\n"、Clock_getTicks()); Task_sleep (ms_TO_tick (1000)); } }
它在使用时钟模块配置时工作正常:
bios.cpufreq.lo = 120000000;
clock.tickMode = Clock.tickMode_Periodic;
clock.timerId = 0;
clock.tickSource = Clock.tickSource_timer;
在调试 UART 中、我可以看到消息:
缺省 INF:main:cpufreq.lo 120000000
默认 INF:main:Clock_tickPeriod 100000
默认 INF:TestTask_Fxn:0
默认 INF:TestTask_Fxn:10
默认 INF:TestTask_Fxn:20
默认 INF:TestTask_Fxn:30
…
默认 INF:TestTask_Fxn:1760
(笑声)
但是、如果我将模式更改为 Clock.tickMode = Clock.tickMode_dynamic;
一段时间后任务停止执行。
调试输出为:
缺省 INF:main:cpufreq.lo 120000000
默认 INF:main:Clock_tickPeriod 100000
默认 INF:TestTask_Fxn:0
默认 INF:TestTask_Fxn:10
(笑声)
默认 INF:TestTask_Fxn:340
默认 INF:TestTask_Fxn:350
默认 INF:TestTask_Fxn:707
默认 INF:TestTask_Fxn:707是我看到的最后一条消息。 在 ROV 中、我看到任务在 Task_sleep (357 (过时数据))上被阻止、但在正常运行中、它显示 Task_sleep (10 (过时数据))。
我使用以下代码添加空闲任务:
UARTprintf ("s %d\n"、Clock_getTicks());
获取调试输出:
缺省 INF:main:cpufreq.lo 120000000
默认 INF:main:Clock_tickPeriod 100000
默认 INF:TestTask_Fxn:0
S 0
S 0
(笑声)
S 9.
S 9.
默认 INF:TestTask_Fxn:10
S 10.
(笑声)
S 350
默认 INF:TestTask_Fxn:350
默认 INF:TestTask_Fxn:707
S 708
S 708
(笑声)
S 709.
(笑声)
S 1064
第707节
在我的任务停止执行后、空闲任务继续打印节拍值。 1064之后的下一个值是707、这很奇怪。
我想使用 Clock.tickMode_dynamic 模式来改善功耗、希望在空闲任务中进入睡眠状态。
在空闲状态下添加睡眠:
uint32_t start_ticks = Clock_getTicks ();
UARTprintf ("s %d\r\n"、start_ticks);
SysCtlSleep ();
uint32_t stop_ticks = Clock_getTicks ();
UARTprintf ("%d %d\r\n"、start_dtick、stop_ticks、stop_ticks);sticks
输出:
[2018-04-13 14:53:51.047]默认值 INF:main:cpufreq.lo 120000000
[2018-04-13 14:53:57.920]默认信息:main:Clock_tickPeriod 100000
[2018-04-13 14:53:57.925]默认值:TestTask_Fxn:0
[2018-04-13 14:53:57.927] s 0
[2018-04-13 14:53:57.928] 0 1
[2018-04-13 14:53:58.018] s 1.
[2018-04-13 14:53:58.018]
[2018-04-13 14:53:58.918]默认信息:TestTask_Fxn:10
[2018-04-13 14:53:58.921] s 10.
[2018-04-13 14:53:58.921] 10 20
[2018-04-13 14:53:59.918]默认信息:TestTask_Fxn:20
[2018-04-13 14:53:59.921] s 20.
…
[2018-04-13 14:54:31.923]默认信息:TestTask_Fxn:340
[2018-04-13 14:54:31.926] s 340
[2018-04-13 14:54:31.927] 340 707
[2018-04-13 14:54:32.924]默认信息:TestTask_Fxn:350
[2018-04-13 14:54:32.927]默认信息:TestTask_Fxn:707
[2018-04-13 14:54:32.929] s 708
[2018-04-13 14:54:32.930] 708 707
[2018-04-13 14:55:08.625] s 707
[2018-04-13 14:55:08.626] 707
[2018-04-13 14:55:44.418] s 707
[2018-04-13 14:55:44.418] 707
[2018-04-13 14:56:20.211] s 707
[2018-04-13 14:56:20.211] 707
您可以看到 CPU 在空闲任务中休眠并定期唤醒(我认为 time0中断是唤醒源)
但在一段时间(340 - 350个周期)后、时钟模块停止计数。
TI-RTOS 时钟模块有什么问题?
我使用 tirtos_tivac_2_16_00_08
此致、
Michael