zoukankan      html  css  js  c++  java
  • WINCE重新启动

    因为要在WINCE上面开发一个系统,监测数据。长时间运行下去容易导致死机。所以设定定时重启。认真分析与查阅相关资料后,发现下面几种方法:

    一、使用SetSystemPowerState,通过测试后发现该方法重启的效果并不理想,有点像WINDOWS的注销而不是断电重启。

    #ifndef POWER_STATE_RESET
    #define POWER_STATE_RESET DWORD(0x00800000)
    #endif
    
    typedef BOOL (*SetSystemPowerState)(   
    									LPCWSTR psState,
    									DWORD StateFlags,
    									DWORD Options
                                        );
    
    
    
    //在函数中调用如下:
    HINSTANCE hModule = LoadLibrary(_T("Coredll.dll"));
    SetSystemPowerState f = (SetSystemPowerState)::GetProcAddress(hModule, TEXT("SetSystemPowerState"));
    f(NULL, POWER_STATE_RESET, 0);
    ::FreeLibrary(hModule);
    

    二、使用看门狗,因为看门狗必须定时喂食,所以我在调用时不给它喂食就会造成系统重启。我用的EMD9263的板子,重启代码如下:

    #define AT91SAM9263_ENABLE_WATCHDOG			2400
    #define AT91SAM9263_DISABLE_WATCHDOG		2401
    #define AT91SAM9263_CLEAR_WATCHDOG			2402
    #define FILE_DEVICE_DATALINK            0x00000005
    #define METHOD_BUFFERED                 0
    #define FILE_WRITE_ACCESS         ( 0x0002 )    // file & pipe
    #define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
    	((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
    	)
    
    #define IOCTL_ENABLE_WATCHDOG CTL_CODE(FILE_DEVICE_DATALINK, AT91SAM9263_ENABLE_WATCHDOG, METHOD_BUFFERED, FILE_WRITE_ACCESS)
    #define IOCTL_DISABLE_WATCHDOG CTL_CODE(FILE_DEVICE_DATALINK, AT91SAM9263_DISABLE_WATCHDOG, METHOD_BUFFERED, FILE_WRITE_ACCESS)
    #define IOCTL_CLEAR_WATCHDOG CTL_CODE(FILE_DEVICE_DATALINK, AT91SAM9263_CLEAR_WATCHDOG, METHOD_BUFFERED, FILE_WRITE_ACCESS)
    
    
    //调用如下:
     HANDLE  hFileWatchdog= CreateFile(_T("DOG1:"), 
    		                               GENERIC_READ | GENERIC_WRITE,
    		                                0,
    										NULL, 
    										OPEN_EXISTING,
    										FILE_ATTRIBUTE_NORMAL,
    										NULL);
    	if (hFileWatchdog != INVALID_HANDLE_VALUE)
    	{
    		DWORD dwReturn;
    		BOOL ret=::DeviceIoControl(hFileWatchdog,IOCTL_ENABLE_WATCHDOG,NULL,0,NULL,0,&dwReturn,NULL);
    		if(ret!=TRUE)
    		{
    			::CloseHandle(hFileWatchdog);
    		}
    	}	
    

    在实际运用中,我用的是第二种方法。第一种方法可以适当使用。

    @written by .cpp

    http://www.cnblogs.com/dotcpp

    http://hi.baidu.com/anglecloudy

  • 相关阅读:
    shFlags简介
    ubuntu下mediawiki的使用
    保护眼睛(ubuntu 和 chrome)
    ubuntu14.04下安装ngnix,mediawiki,nodebb,everything,gitlab
    JavaScript之闭包就是个子公司
    第三次作业——个人作业——软件产品案例分析
    第二次作业——结对项目之需求分析与原型设计
    《软件工程实践》第一次作业
    2016的软件工程开始啦
    Spring-Boot-应用可视化监控
  • 原文地址:https://www.cnblogs.com/yubaolee/p/1797112.html
Copyright © 2011-2022 走看看