主题中讨论的其他器件:SysConfig、 ENERGYTRACE
您好
我将 CCS10.2与 TI-RTOS 和 POSIX 配合使用。
我的程序有几个任务...我需要将其中一个任务置于睡眠状态[使用 sleep()或 Task_sleep()],但我想通过发出软件中断(从另一个任务)来唤醒它(即中止睡眠)。
有办法做到这一点吗?
谢谢
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.
您好
我将 CCS10.2与 TI-RTOS 和 POSIX 配合使用。
我的程序有几个任务...我需要将其中一个任务置于睡眠状态[使用 sleep()或 Task_sleep()],但我想通过发出软件中断(从另一个任务)来唤醒它(即中止睡眠)。
有办法做到这一点吗?
谢谢
大家好、Moshe、
您可以使用信标(或事件或邮箱)、而不是使用 SLEEP。 您的"睡眠任务"会在该信标上挂起、然后另一个任务可以发布一个信标以唤醒您的睡眠任务。
部分链接:
2. TI RTOS API 说明: https://dev.ti.com/tirex/explore/node?node=A__AHn0Jo.DdI7vNYFZsXC30g__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__LATEST&placeholder=true (为 CC1352R1选择 M4)
TI RTOS Simplelink 采集实验室: https://dev.ti.com/tirex/explore/node?node=A__AT-CyLFO6oHUzYNR33ZsVw__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST&placeholder=true
谢谢、
M·H
您好,Marie
是的,我试过了 Event_pend ()/ Event_post ()和 Semaphore_pend ()/ semaphore_post () ...两种方法都把任务放在 slumberland 中,但哪一对减少了最多的功耗?
此外、一旦所有"我的"任务都在森林中执行、我的理解是、空闲环路会被调用。 此时、CC1352是否处于任何形式的低功耗状态、或者它是否仍以全功率运行且所有外设和无线电均处于活动状态?
更新:
看看电流消耗、我是使用 Event_pend/post 还是 Semaphore_pend/post、电流消耗是 相同 ....对于两种情况,我一直等待,直到一个事件/ SEM 被布置。 因此、我必须得出一个结论:在等待时、MCU 不处于任何低功耗状态、而低功耗完全是一个独立的做法。
谢谢
莫什
大家好、Moshe、
与信标是相同的。 在等待期间、器件进入空闲状态。 如果启用了 STANDBY、器件功率级别将进入 STANDBY、也称为 SLEEP (0.7uA)。
如果您使用 SDK 中的示例应用、其中大多数都默认启用待机。 您可以通过打开 SysConfig -> TI drivers -> Power 来检查此情况、并检查使用的电源策略是 PowerCC26XX_standbyPolicy。
当您说您正在查看电流时:是否连接了调试器? 这将防止器件进入待机状态。 有关测量功耗的更多最佳实践:
https://www.ti.com/lit/swra478
谢谢、
M·H
大家好、Moshe、
您能否在 CC1352 LaunchPad 上尝试使用 EnergyTrace? 我们这里有一个指南:
谢谢、
M·H
您好,Marie
感谢这个链接。 但是、我不明白 EnergtTrace 如何确定我的电路板使用8mA 而不是1mA 的方式、位置或原因。
我在 SysConfig 中看到已启用待机策略。
我执行了一个练习、确保我的4个任务可以安全地保留在它们各自的 Semaphore_pend ()函数中的某个位置、并且传感器控制器还没有启动。 电流消耗仍然保持在8.69mA……然而、我确实注意到(在示波器上)每10ms (左右)在电流使用中就会产生大约1mA 的浪涌。
放大这个浪涌、我看到它的振铃浪涌持续大约10uS ...关于这个有什么想法吗?
你有什么建议,我应该尝试确定发生了什么?
加油打气
莫什
大家好、Moshe、
电能迹线可以提供相当准确的测量值以及随时间变化的电流消耗曲线。
您还可以使用 EnergyTrace++来查看何时为哪些电源域供电。 这可能会提示您正在消耗如此大的电流。 (请注意、使用 EnergyTrace++时、器件无法进入待机模式。)
如果您的器件确实要进入待机状态、则在电容器再充电(再充电峰值)时会出现电涌。 我链接的应用手册中进一步说明了这一点。
您能否尝试在没有更改的情况下运行其中一个 SDK 示例并测量您的电流消耗? 例如:drivers/empty 或 gpiostandby。 然后、我们可以检查该问题是否特定于您的定制应用。
谢谢、
M·H
您好,Marie
很棒的建议...我运行了 gpiostandby....interestingly、结果是我想要的-即 sub 1mA。
因此、我将重点介绍该项目与我的项目之间的差异。
我看到 gpiostandby 中的嘟嘟声,当电流消耗到9mA 时...这似乎每隔600ms 发生一次程序退出睡眠().
顺便说一下、我的项目最初是 SDK 5.20中的 rfWsnNode_CC1352R1_LAUNCHXL 项目(我仍在 SDK 5.20中运行它)、我为此进行了修改。
更新:
我对启动无线电的代码进行了注释...因此当无线电关闭时、电流消耗下降到了可以容忍的1.1mA。
因此、当我进入待机 模式时需要关闭无线电、这有点问题、因为这意味着后端服务器无法与程序通信。
我当时的印象是、袖手旁观等待 Rx 数据包、无线电的 功率级别将是最低的。
作为进一步更新:
我正在读取 SWRA486。 从这一点来看 、当我的所有任务都在它们的 Semaphore_pend 函数中时、MCU 根本就没有处于待机模式、因为无线电和 UART 外设仍然打开。 这似乎是由上述经验证实的(尽管仍不清楚什么采取了剩余的0.8mA )。
加油打气
莫什
您好,Marie
我研究了如何关闭对讲机...似乎有2个控制设置...
1) EasyLink_setctrl Link_Ctrl_Async (_45ct, the_rx_timeout );//在 RxTimeout 时间内没有任何内容,无线电将进入空闲状态
2) EasyLink_setctrl ctrl ( Link_Ctrl_Idle_Time 38t,radio_idle_timeout );//如果在这段时间内无线电空闲,它会断电
当无线电关闭时,此方法仍然有效-但 Rx 超时太短...
2 ctrl 参数使用的时间单位似乎存在差异...
对于"45V Link_Ctrl_Idle_Time 45ct",它会显示需要在 Us 中指定的超时值。 我通过将 RADIO_IDLE_TIMEOUT = 50 * 1000L * 1000将其设置为50倍、然后查看示波器、我可以看到在大约50倍的空闲时间(电流消耗0mA!)后无线电关闭。
然而,."45_ Link_Ctrl_Async time"我正在丢失,因为它没有显示这是在我们指定的,但在一些其他时间单位。
例如、我将 TH_RX_TIMEOUT 设置为 30 * 1000L * 1000L、期望30s 的超时、但我看到大约4s 后、Rx 关闭(电流下降)...我也 不知道为什么它使用4s……
您能不能给我们介绍一下
(a) 4S 来自何处。
(B) Link_Ctrl_Async 中预计有哪些时间单位 c11_intaby 时间 t enum 到 be.in。
谢谢
莫什
大家好、Moshe、
您可以在此处找到 EasyLink 的 API 文档:
Link_Ctrl_Async 451_TIME 事件的 定义如下:"从同步 Rx 开始到超时的刻度的相对时间。 值为0表示无超时"。
谢谢、
M·H
您好,Marie
是的、谢谢、我在几个小时前解决了这个问题。
在事件循环之前、我的 TaskFunction 中的解决方案如下所示...
EasyLink_init();
EasyLink_abort();
EasyLink_setctrl (EasyLink_Ctrl_async_rx_timeout、EasyLink_ms_to_radiotime (30000UL));
EasyLink_receiveASYNC (CB、0);
如果没有 EasyLink_abort(),Rx_TIMEOUT 值(已在 SysConfig 中设置)将无法更改。
我还发现、 setctrl 中使用的时间单位必须是"无线电时间节拍"、单位不是在任何位置定义的。
然而...在 setctrl 调用 枚举器 Link_Ctrl_Idle_Timeout 中使用的时间单位必须在"微秒"中!!
同样,在任何地方都没有明确说明这一点。
所以现在我所有的问题都解决了...以上是为任何人想知道。
ps...我还有另一种方法在 EasyLink_receiveAsync()之后设置一个时钟超时,并且在时钟回调中我发现,如果我 在更改 EasyLink_Ctrl_async_rx_timeout 之前调用 EasyLink_abort(),那么新的超时将在 EasyLink_receiveAsync(CB,0)随后调用时生效。
加油打气
莫什