当前位置:必发365电子游戏 > 操作系统 > 通过测试后发现该方法重启的效果并不理想,C盘的根目录下产生一个WINCE600的目录
通过测试后发现该方法重启的效果并不理想,C盘的根目录下产生一个WINCE600的目录
2019-12-19

必发365游戏官方网址,     在介绍S3C2410的WinCE6.0移植从前,大家先熟知一下WINCE600的目录组织和PQOAL的有关概念。

因为要在WINCE上边开辟一个系统,监测数据。长日子运作下去轻松产生死机。所以设定依期重启。认真解析与查阅有关材质后,开掘下边两种方法:

       这里差不离说一下WinCE6.0支付情状的搭建。WinCE6.0的支出条件是Platform Builder6.0,但与Platform Builder 5.0不及的是,它看成VS2006的贰个插件来用。所以,大家供给先安装VS二零零六,何况安装相应的SP1。PB6.0近些日子应当是不支持VS2010的。然后挨门逐户安装PB6.0、PB6.0的SP1、 Haval2。固然微软尚未严苛申明,但依然提出将这个软件都默许安装到C盘,避防出现意外的状态。当然,这需求C盘丰硕大,起码得有10G的可用空间,防止安装的长河中出错。

风流倜傥、使用SetSystemPowerState,通过测量试验后发掘该措施重启的功用并不完美,有一些像WINDOWS的吊销并非断电重启。

       安装实现后, C盘的根目录下爆发贰个WINCE600的目录,这里富含WinCE6.0的源代码、BSP和部分编译WinCE时要求使用的工具和库文件。别的还发生一个C:Program FilesMicrosoft Platform Builder6.00的目录,这里根本回顾PB6.0的费用景况工具、扶植文件和其他一些花销时用到的工具。

#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);

       上面大家看一下WINCE600的目录组织。      

 

目录

说明

CRC

存放了一个PB6.0安装时用到的校验文件crc.ini

OSDesigns

用来存放PB的工程,对应PB5.0中的PBWORKSPACES

OTHERS

存放了一些运行库、用于编译操作系统的二进制文件、注册表文件、批处理文件

PLATFORM

存放了和硬件平台相关的BSP及MCU相关的代码和其他一些文件

PRIVATE

存放了WinCE6.0开放的源代码

PUBLIC

存放了WinCE6.0的相关组件,这里应该是纯软件的代码和库

SDK

存放了用于编译WinCE6.0的相关工具和DLL文件

二、使用看门狗,因为看门狗必得准期喂食,所以本人在调用时不给它喂食就能够引致系统重启。笔者用的EMD9263的板子,重启代码如下:

更详实的目录组织认证请参见MSDN 。

#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);
        }
    }   

日常的话,在移植BSP的历程中,我们只会校正PLATFORM下的相关目录和文书,而此外的除OSDesigns之外的目录,最佳都毫不涂改,避防出错。PLATFORM目录下除了COMMON目录外,别的都是特定硬件平台的BSP,而COMMON目录中则饱含了差别系统构造的有关代码(ARM、X86、MIPS、SHX卡塔尔(英语:State of Qatar)、与平台非亲非故的代码(COMMON卡塔尔和SOC的相关代码(SOC),这一个代码都不可能直接改变,如果急需改正,应该先CLONE出来,再做订正。

 

PQOAL这几个概念在WinCE5.0中就引进了,全名为Production Quality OAL,成品级的OAL。它的大旨原则如下:

在实质上运用中,作者用的是第二种方式。第大器晚成种方法能够适度使用。

现在比不上过去微芯片或片上系统的代码必需抽离开来;

 

BSP中的代码应该是组件化的同一时间有逻辑的团体在一齐;

@written by .cpp

集成电路级代码、片上系统的代码和板级支持包(BSP卡塔尔国中的代码都应有是高素质的,以便于代码重用。

PQOAL实际不是一个硬性的分明,你能够依据自身的主张来组织BSP的目录及相关文书。但小编依然提出尽量固守PQOAL的原则来组织,那会给中期的调治、移植和发布带给比异常的大的便利。那是前人成功的阅世,未有理由并不是。

上边就从PQOAL的角度深入分析PLATFORM的目录组织。

PLATFORMCOMMON:这里存放了富有可接收的代码。那豆蔻年华部分代码将要BSP早前编写翻译。

PLATFORMCOMMONSRCCOMMON:这里存放了被BSP中选定的通用代码,那大器晚成都部队分代码是跟硬件平台毫无干系的。比方经常的IOCTL管理函数、与基本交互作用的集体的间歇程序等等,其它还包涵一下库文件,如OAL_IOCTL.lib、oal_intr.lib、oal_log.lib、kitl_log.lib等等。这意气风发某些代码由微软提供,日常不能够改改。

PLATFROMCOMMONSRC<CPU>:CPU代表MCU的不及种类布局,如ARM、MIPS、SH和X86。这么些目录分别存放了各系统构造的MCU的相关代码,如CACHE相关代码、物理地址和虚构地址转变的代码等等。这某些代码只针对MCU的基本,不涉及具体的微芯片。那意气风发部分代码也由微软提供,不建议改善。

PLATFORMCOMMONSRCSOC:该目录下存放了差异的MCU对应的代码,跟BSP对应,这里可看做是CSP(CHIPSET SUPPORT PACKAGE卡塔尔。那意气风发有的的代码通常的话不能够一向退换,假若急需移植相像平台的BSP,应该复制多个,重命名后再做矫正。这里的目录和中间链接后的库文件的命名也遵守一定的平整(微电路名称_厂家名称_版本号卡塔尔(قطر‎。这里要求当心的是SOC目录下dirs文件要求包涵系统构造的表明,如PLATFORM通过测试后发现该方法重启的效果并不理想,C盘的根目录下产生一个WINCE600的目录。COMMONSRCSOCPXA27X_MS_V1中的dirs文件以DIRS_ARM= 超过。那与BSP中的平时的DI凯雷德S文件不一致。小编在移植BSP的时候,并不曾在那地做此外改变,只是将内部有关的文件拷贝到小编要好的BSP目录下,那样便于BSP的宣布。

PLATFORMBSPName:这里存放了跟开采板对应的连带代码。在编写翻译WinCE操作系统时,它在PLATFORMCOMMON的目录之后编写翻译。大家在针对意气风发款新的硬件平台移植WinCE6.0时尽管在此地做相应的充足和更动。

WinCE6.0中BSP的目录组织如下:

目录

说明

CATALOG

存放BSP的CATALOG file

CESYSGEN

编译的过程中,bib和reg文件将被拷贝到这

FILES

存放BSP的bib、reg、dat等配置文件和无须编译的二进制文件

SRC

存放BSP的所有源代码

SRCBOOTLOADER

存放BOOTLOADER的源代码

SRCCOMMON

存放共享代码,链接后的库可被BOOTLOADER、OAL和驱动使用

SRCDRIVERS

存放设备驱动的代码

SRCINC

存放相关头文件

SRCKITL

存放KITL的相关代码

SRCOALOALEXE

链接OAL.lib和其他一些库,生成OAL.exe

SRCOALOALLIB

存放OAL的源代码,编译生成OAL.lib

正文深入分析了WINCE600的目录组织,并从PQOAL的角度解析了PLATFORM目录。文中如有疏漏,请你斧正!谢谢。

上一篇:没有了
下一篇:没有了