如何以可编程方式唤醒Android手机从睡眠状态(暂停到mem)?我不想获得任何唤醒锁,这意味着手机在禁用cpu的情况下进入"真正的"睡眠状态.我想我可以使用某种RTC(实时时钟)机制?
有没有人有任何例子?
谢谢.
我正在编程STM32L051R8并有下一个问题.我大部分时间都在尝试使用待机模式,有时通过RTC唤醒,这是一个自动唤醒.如果我在没有睡觉的情况下工作 - 一切正常,我每次都会得到一个RTC中断,但是当我使用待机时 - 不要.
如果我使用待机,我的第一个周期很好:
但是第二个和下一个周期在进入待机状态后立即唤醒(3).
我正在尝试在STM32F469I-DISCO板上初始化RTC。由于我仍在学习,所以我尝试使用HAL API,使我可以完成一些项目,直到我对这种微控制器有了足够的了解,可以直接与寄存器一起使用。
无论如何,我的代码使用了CubeF4的STM32F469I-DISCO模板,该模板允许直接加载HAL层和系统时钟(通过8 MHz HSE振荡器获得180 MHz)。
为了初始化RTC,我遵循了UM1725中给出的说明:STM32F4 HAL和LL驱动程序说明。在页面715,第55.2.4节中,您具有使用HAL_RTC API的说明。
第一点说,有必要启用“ RTC域访问”。在上一节(55.2.3,同一页)中解释了这一点。
我做了要求做的事情。这是我的代码(简化后,我只允许RTC Init部分和系统时钟配置):
#include "main.h"
RTC_HandleTypeDef rtcHandle;
RTC_InitTypeDef rtcInit;
RTC_TimeTypeDef rtcTime;
RTC_DateTypeDef rtcDate;
static void SystemClock_Config(void);
static void Error_Handler(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
////////////////// RTC
HAL_PWR_EnableBkUpAccess();
__HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE);
__HAL_RCC_RTC_ENABLE();
rtcInit.HourFormat = RTC_HOURFORMAT_24;
rtcInit.AsynchPrediv = 0x7F;
rtcInit.SynchPrediv = 0xFF;
rtcInit.OutPut = RTC_OUTPUT_DISABLE;
rtcInit.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
rtcInit.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
rtcHandle.Instance = RTC;
rtcHandle.Init = rtcInit;
HAL_RTC_Init(&rtcHandle);
rtcTime.Hours = 12;
rtcTime.Minutes = 30;
rtcTime.Seconds = 40;
rtcDate.WeekDay = RTC_WEEKDAY_WEDNESDAY; …
Run Code Online (Sandbox Code Playgroud) 实时时钟/ dev/rtc可以使用hwclock -r 读取,但只能以root身份读取.
>hwclock -r --debug hwclock from util-linux 2.23.2 hwclock: cannot open /dev/rtc: Permission denied No usable clock interface found. hwclock: Cannot access the Hardware Clock via any known method. >sudo hwclock -r [sudo] password for xxx: Wed 26 Apr 2017 12:44:01 BST -0.281946 seconds
我想不出有任何理由阻止任何用户阅读时钟.那么,为什么在这里需要根接取?
我唯一的想法是它必须与低级查询有关,可以某种方式与系统接口.也许如果你不断阅读/ dev/rtc,你可以阻止它足够长时间来扰乱内核?
上下文:我现在负责从/ dev/rtc读取的应用程序.因此,它必须以root身份运行,但没有真正的理由它不能成为用户空间应用程序.我怀疑它需要使用实时时钟,但我的问题仍然存在.
我通过端口 0x70 和 0x71 直接读取/写入 RTC。根据手册,工作日字节将保存星期几,Sunday=1,值范围从 1 到 7。当我读取今天得到的字节 4 时,即星期三。而当我阅读 RTC 信息时,hwclock -r
日期是星期四,这是正确的。
将日期设置hwclock
为其他日期并使用我的代码读取它不会反映工作日字节的变化。
此问题在所有系统中都存在。可能是什么问题?
在此讨论中,据说 Windows 大约每小时重新读取 CMOS RTC。Windows 中是否有 API 可以立即从 CMOS RTC 重新读取日期/时间?
换句话说:运行多操作系统机器时,需要指示Windows:“CMOS 内容已更改(被同一台机器上并行运行的另一个操作系统更改)。请重新读取时间”。有标准的 API 吗?
这是在 RTOS-32 中完成工作的函数。
在 GNU/Linux 中,等效的操作是:hwclock --hctosys
在 QNX Neutrino 中,命令是:rtc hw
我正在寻找一种在 Windows 下运行时从主板查询当前 RTC 的方法。我正在寻找一个简单的未更改时间,因为它存储在硬件时钟中(没有漂移补偿,没有 NTP 时间同步,不是使用性能计数器继续使用的旧时间戳,...)。
我查看了Windows调用GetSystemTime、GetSystemTimeAdjustment、QueryInterruptTime、QueryPerformanceCounter、GetTickCount/GetTickCount64、GetLocalTime。我读到了有关 Windows 时间服务(并且我可以将其关闭)的信息,查看是否有一种方法可以使用旧的 DOS 方式(端口 70/71、INT 21h、INT 1Ah)访问 BIOS,查看了 WMI课程,...但我已经没有主意了。
据我了解,Windows会不时查询硬件时钟,并在偏差超过60秒时相应调整系统时间。这是没有 NTP 的情况。我发现的文档没有说明读取硬件时钟后会发生什么。必须使用另一个计时器来执行硬件读取之间的微计时。
由于我想得出有关时钟源漂移的结论,因此在向窗口询问“本地时间”并将其进度与任何高分辨率计时器(多媒体计时器、时间戳计数器...)进行比较时,这将击败所有推理。
有谁知道如何在 Windows 下运行时尽可能原始地获取当前存储在硬件时钟(RTC)中的时间?
我的 MacBook 在风扇活动频繁的情况下自发地从睡眠模式中唤醒。
我想在 RTC 或电源设置中对此进行调查吗?或者通过跟踪进程等(使用一些进程/内核魔法!)。
提示:它可能由“rtcwake”管理。
我什至不确定这是计划任务,还是来自 WiFi 唤醒,或其他什么。
我不想猜测通常在 Mojave 等中导致这种情况的原因。相反:我需要在我的 MacOS (Mojave) 上对此进行系统调查。与 Linux 相关的答案也很受欢迎。
这是关于系统待机、睡眠模式、暂停模式。(请注意,这与独立进程的启动和唤醒无关。整个笔记本电脑会自动开启。)
我在带有FreeRTOS的stm32L476上的RTC上有一个奇怪的行为。
它仅在RUN模式下第一次读取,RTC正在工作,因为从运行到运行,它保存了内部寄存器的值并且一直在上升。
另外,如果我在583行的stm32l4xx_hal_rtc.c处放置断点时进行调试,则:
tmpreg = (uint32_t)(hrtc->Instance->TR & RTC_TR_RESERVED_MASK);
*breakpoint* sTime->Hours = (uint8_t)((tmpreg & (RTC_TR_HT | RTC_TR_HU)) >> 16);
Run Code Online (Sandbox Code Playgroud)
我可以看到tmpreg和TR寄存器如何更新,然后单击跳转到下一个断点时,显示的内容也相同。
那么,为什么在正常运行时它不起作用?
初始化代码(生成多维数据集MX):
void MX_RTC_Init(void)
{
RTC_TimeTypeDef sTime;
RTC_DateTypeDef sDate;
/**Initialize RTC Only
*/
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Initialize RTC and set the Time and Date
*/
if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){
sTime.Hours = 0; …
Run Code Online (Sandbox Code Playgroud)