wince6.0 重启不好用

时间:2022-12-19 17:36:35
使用了SetSystemPowerState(NULL,POWER_STATE_RESET,POWER_FORCE);一点反应没有!

使用了KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL ); 机器关掉了,重启一半卡死不动了!

看 了相关资料说要底层支持,但是没有找到OEMSWReset 函数,是不是需要内核增加组件?
这个函数应该在哪个路径下,芯片SBC8530.


看门狗 重启该怎么用呢?不知道creatfile 看门狗的文件名去哪里找?

请各位指教!

19 个解决方案

#1


OEMSWReset 在 BSP 里面找不到的话,你试试自己重载这个函数看看(我没试过,哈哈,不知道是否能成功!)~!!~!

看门狗重启是可以用的,你在驱动里面自己启动看门狗寄存器,
然后 while(1) 一直等待看门狗溢出即可~!

#2


顶一下 我也不知道这个重启是怎么实现的。。

#3


这些函数,需要 OEM 厂家来实现。即 BSP 中需要增加功能,不是组件的问题。

因为 CE 电源管理部分是没有标准的。

#4



看门狗重启是可以用的,你在驱动里面自己启动看门狗寄存器,
然后 while(1) 一直等待看门狗溢出即可~!


驱动里面自己启动看门狗寄存器
这个在哪里启动?怎么启动?初拉乍到请多指教啊!

#5


引用 1 楼 dengchonglin 的回复:
OEMSWReset 在 BSP 里面找不到的话,你试试自己重载这个函数看看(我没试过,哈哈,不知道是否能成功!)~!!~!

看门狗重启是可以用的,你在驱动里面自己启动看门狗寄存器,
然后 while(1) 一直等待看门狗溢出即可~!



驱动里面自己启动看门狗寄存器
这个在哪里启动?怎么启动?初拉乍到请多指教啊!

#6


得地层程序支持才行

#7


引用 6 楼 jonsenwu 的回复:
得地层程序支持才行


这个知道啊  但是需要怎么支持不知道啊  求教啊

#8


软重启的话,是需要看门狗支持的,因为这个是对CPU的软复位。

软重启在系统层已经拥有了接口,那么需要实现的是:如何在接收到reboot命令时对
CPU进行软复位和RAM等外围器件的复位操作。这部分都在底层实现

#9


引用 7 楼 zsj959800 的回复:
Quote: 引用 6 楼 jonsenwu 的回复:

得地层程序支持才行


这个知道啊  但是需要怎么支持不知道啊  求教啊

比如在驱动或oal里面留一个接口,你调用接口就可以控制,机器重启

#10


http://blog.csdn.net/LoongEmbedded/article/details/5942326

BOOL OALIoCtlHalReboot(
    UINT32 code, 
    VOID *pInpBuffer, 
    UINT32 inpSize, 
    VOID *pOutBuffer,
    UINT32 outSize, 
    UINT32 *pOutSize
    )
{    
     BOOL    bPowerOn = FALSE;

     UNREFERENCED_PARAMETER(inpSize);
     UNREFERENCED_PARAMETER(pInpBuffer);
     UNREFERENCED_PARAMETER(code);
     UNREFERENCED_PARAMETER(pOutSize);
     UNREFERENCED_PARAMETER(outSize);
     UNREFERENCED_PARAMETER(pOutBuffer);

    OALMSG(OAL_IOCTL&&OAL_FUNC, (L"+OALIoCtlHalReboot\r\n"));

    // Perform a global SW reset
    OALMSG(TRUE, (L"*** RESET ***\r\n"));

    // Disable KITL
// #if (_WINCEOSVER<600)
    // OALKitlPowerOff();
// #else    
    // KITLIoctl(IOCTL_KITL_POWER_CALL, &bPowerOn, sizeof(bPowerOn), NULL, 0, NULL);    
// #endif

    // Clear context registers//
    // OUTREG32(&g_pContextRestore->BOOT_CONFIG_ADDR, 0);
    // OUTREG32(&g_pContextRestore->PUBLIC_RESTORE_ADDR, 0);
    // OUTREG32(&g_pContextRestore->SECURE_SRAM_RESTORE_ADDR, 0);
    // OUTREG32(&g_pContextRestore->SDRC_MODULE_SEMAPHORE, 0);
    // OUTREG32(&g_pContextRestore->PRCM_BLOCK_OFFSET, 0);
    // OUTREG32(&g_pContextRestore->SDRC_BLOCK_OFFSET, 0);
    // OUTREG32(&g_pContextRestore->OEM_CPU_INFO_DATA_PA, 0);
    // OUTREG32(&g_pContextRestore->OEM_CPU_INFO_DATA_VA, 0);

    // Flush the cache
//    OEMCacheRangeFlush( NULL, 0, CACHE_SYNC_ALL );

    // Do warm reset
//    PrcmGlobalReset();

    // Should never get to this point...
    OALMSG(OAL_IOCTL&&OAL_FUNC, (L"-OALIoCtlHalReboot\r\n"));
    OALCPUPowerReset();//我在这里增加了函数,可是编译不过???????

    return TRUE;
}

#11


错误是  :warning treated as error - no 'object' file generated

#12


OALCPUPowerReset()函数需要你的BSP包实现的

#13


引用 12 楼 LoongEmbedded 的回复:
OALCPUPowerReset()函数需要你的BSP包实现的


wince6.0 重启不好用
首先非常感谢你能来帮助我,感激不尽

那么
OALCPUPowerReset()函数需要你的BSP包实现的
这个具体要怎么实现  比如要打包什么进去   还是要写个驱动之类的   我是新手  请多包涵了

#14


实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();

#15


引用 14 楼 LoongEmbedded 的回复:
实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();


没太懂 wince6.0 重启不好用
是在 reboot.C 头文件那里 写上这句话吗?

#16


引用 14 楼 LoongEmbedded 的回复:
实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();


大侠  汇编部分出现的未定义的错误  怎么定义   在哪定义啊   离成功越来越近啦现在
error A0051: unknown opcode: PhysicalStart
 error A0051: unknown opcode: b1
 error A0051: unknown opcode: b1
 error A0051: unknown opcode: b1
 error A0034: undefined symbol: SLEEPDATA_BASE_VIRTUAL
 error A0034: undefined symbol: PhysicalStart
error A0034: undefined symbol: DCACHE_LINES_PER_SET
 error A0034: undefined symbol: DCACHE_NUM_SETS
error A0034: undefined symbol: DCACHE_SET_INDEX_BIT
 error A0034: undefined symbol: DCACHE_LINE_SIZE

#17


引用 14 楼 LoongEmbedded 的回复:
实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();



大侠  能否现身 继续帮忙一下呢  目前只有
error A0034: undefined symbol: SLEEPDATA_BASE_VIRTUAL
error A0034: undefined symbol: DCACHE_LINES_PER_SET
 error A0034: undefined symbol: DCACHE_NUM_SETS
error A0034: undefined symbol: DCACHE_SET_INDEX_BIT
 error A0034: undefined symbol: DCACHE_LINE_SIZE
这几个错误   我在整个WINCE600中都没有搜到定义, 是不是要自己定义呢   这几个变量都是什么含义  能说一下嘛 

#18


引用 17 楼 zsj959800 的回复:
Quote: 引用 14 楼 LoongEmbedded 的回复:

实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();



大侠  能否现身 继续帮忙一下呢  目前只有
error A0034: undefined symbol: SLEEPDATA_BASE_VIRTUAL
error A0034: undefined symbol: DCACHE_LINES_PER_SET
 error A0034: undefined symbol: DCACHE_NUM_SETS
error A0034: undefined symbol: DCACHE_SET_INDEX_BIT
 error A0034: undefined symbol: DCACHE_LINE_SIZE
这几个错误   我在整个WINCE600中都没有搜到定义, 是不是要自己定义呢   这几个变量都是什么含义  能说一下嘛 

我的QQ是597038165,你加我,我明天发给你

#19


非常感谢大家的帮助,特别感谢LoongEmbedded!!祝大家好人一生平安!!

#1


OEMSWReset 在 BSP 里面找不到的话,你试试自己重载这个函数看看(我没试过,哈哈,不知道是否能成功!)~!!~!

看门狗重启是可以用的,你在驱动里面自己启动看门狗寄存器,
然后 while(1) 一直等待看门狗溢出即可~!

#2


顶一下 我也不知道这个重启是怎么实现的。。

#3


这些函数,需要 OEM 厂家来实现。即 BSP 中需要增加功能,不是组件的问题。

因为 CE 电源管理部分是没有标准的。

#4



看门狗重启是可以用的,你在驱动里面自己启动看门狗寄存器,
然后 while(1) 一直等待看门狗溢出即可~!


驱动里面自己启动看门狗寄存器
这个在哪里启动?怎么启动?初拉乍到请多指教啊!

#5


引用 1 楼 dengchonglin 的回复:
OEMSWReset 在 BSP 里面找不到的话,你试试自己重载这个函数看看(我没试过,哈哈,不知道是否能成功!)~!!~!

看门狗重启是可以用的,你在驱动里面自己启动看门狗寄存器,
然后 while(1) 一直等待看门狗溢出即可~!



驱动里面自己启动看门狗寄存器
这个在哪里启动?怎么启动?初拉乍到请多指教啊!

#6


得地层程序支持才行

#7


引用 6 楼 jonsenwu 的回复:
得地层程序支持才行


这个知道啊  但是需要怎么支持不知道啊  求教啊

#8


软重启的话,是需要看门狗支持的,因为这个是对CPU的软复位。

软重启在系统层已经拥有了接口,那么需要实现的是:如何在接收到reboot命令时对
CPU进行软复位和RAM等外围器件的复位操作。这部分都在底层实现

#9


引用 7 楼 zsj959800 的回复:
Quote: 引用 6 楼 jonsenwu 的回复:

得地层程序支持才行


这个知道啊  但是需要怎么支持不知道啊  求教啊

比如在驱动或oal里面留一个接口,你调用接口就可以控制,机器重启

#10


http://blog.csdn.net/LoongEmbedded/article/details/5942326

BOOL OALIoCtlHalReboot(
    UINT32 code, 
    VOID *pInpBuffer, 
    UINT32 inpSize, 
    VOID *pOutBuffer,
    UINT32 outSize, 
    UINT32 *pOutSize
    )
{    
     BOOL    bPowerOn = FALSE;

     UNREFERENCED_PARAMETER(inpSize);
     UNREFERENCED_PARAMETER(pInpBuffer);
     UNREFERENCED_PARAMETER(code);
     UNREFERENCED_PARAMETER(pOutSize);
     UNREFERENCED_PARAMETER(outSize);
     UNREFERENCED_PARAMETER(pOutBuffer);

    OALMSG(OAL_IOCTL&&OAL_FUNC, (L"+OALIoCtlHalReboot\r\n"));

    // Perform a global SW reset
    OALMSG(TRUE, (L"*** RESET ***\r\n"));

    // Disable KITL
// #if (_WINCEOSVER<600)
    // OALKitlPowerOff();
// #else    
    // KITLIoctl(IOCTL_KITL_POWER_CALL, &bPowerOn, sizeof(bPowerOn), NULL, 0, NULL);    
// #endif

    // Clear context registers//
    // OUTREG32(&g_pContextRestore->BOOT_CONFIG_ADDR, 0);
    // OUTREG32(&g_pContextRestore->PUBLIC_RESTORE_ADDR, 0);
    // OUTREG32(&g_pContextRestore->SECURE_SRAM_RESTORE_ADDR, 0);
    // OUTREG32(&g_pContextRestore->SDRC_MODULE_SEMAPHORE, 0);
    // OUTREG32(&g_pContextRestore->PRCM_BLOCK_OFFSET, 0);
    // OUTREG32(&g_pContextRestore->SDRC_BLOCK_OFFSET, 0);
    // OUTREG32(&g_pContextRestore->OEM_CPU_INFO_DATA_PA, 0);
    // OUTREG32(&g_pContextRestore->OEM_CPU_INFO_DATA_VA, 0);

    // Flush the cache
//    OEMCacheRangeFlush( NULL, 0, CACHE_SYNC_ALL );

    // Do warm reset
//    PrcmGlobalReset();

    // Should never get to this point...
    OALMSG(OAL_IOCTL&&OAL_FUNC, (L"-OALIoCtlHalReboot\r\n"));
    OALCPUPowerReset();//我在这里增加了函数,可是编译不过???????

    return TRUE;
}

#11


错误是  :warning treated as error - no 'object' file generated

#12


OALCPUPowerReset()函数需要你的BSP包实现的

#13


引用 12 楼 LoongEmbedded 的回复:
OALCPUPowerReset()函数需要你的BSP包实现的


wince6.0 重启不好用
首先非常感谢你能来帮助我,感激不尽

那么
OALCPUPowerReset()函数需要你的BSP包实现的
这个具体要怎么实现  比如要打包什么进去   还是要写个驱动之类的   我是新手  请多包涵了

#14


实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();

#15


引用 14 楼 LoongEmbedded 的回复:
实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();


没太懂 wince6.0 重启不好用
是在 reboot.C 头文件那里 写上这句话吗?

#16


引用 14 楼 LoongEmbedded 的回复:
实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();


大侠  汇编部分出现的未定义的错误  怎么定义   在哪定义啊   离成功越来越近啦现在
error A0051: unknown opcode: PhysicalStart
 error A0051: unknown opcode: b1
 error A0051: unknown opcode: b1
 error A0051: unknown opcode: b1
 error A0034: undefined symbol: SLEEPDATA_BASE_VIRTUAL
 error A0034: undefined symbol: PhysicalStart
error A0034: undefined symbol: DCACHE_LINES_PER_SET
 error A0034: undefined symbol: DCACHE_NUM_SETS
error A0034: undefined symbol: DCACHE_SET_INDEX_BIT
 error A0034: undefined symbol: DCACHE_LINE_SIZE

#17


引用 14 楼 LoongEmbedded 的回复:
实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();



大侠  能否现身 继续帮忙一下呢  目前只有
error A0034: undefined symbol: SLEEPDATA_BASE_VIRTUAL
error A0034: undefined symbol: DCACHE_LINES_PER_SET
 error A0034: undefined symbol: DCACHE_NUM_SETS
error A0034: undefined symbol: DCACHE_SET_INDEX_BIT
 error A0034: undefined symbol: DCACHE_LINE_SIZE
这几个错误   我在整个WINCE600中都没有搜到定义, 是不是要自己定义呢   这几个变量都是什么含义  能说一下嘛 

#18


引用 17 楼 zsj959800 的回复:
Quote: 引用 14 楼 LoongEmbedded 的回复:

实现OALIoCtlHalReboot的文件下面要包含extern void   OALCPUPowerReset();



大侠  能否现身 继续帮忙一下呢  目前只有
error A0034: undefined symbol: SLEEPDATA_BASE_VIRTUAL
error A0034: undefined symbol: DCACHE_LINES_PER_SET
 error A0034: undefined symbol: DCACHE_NUM_SETS
error A0034: undefined symbol: DCACHE_SET_INDEX_BIT
 error A0034: undefined symbol: DCACHE_LINE_SIZE
这几个错误   我在整个WINCE600中都没有搜到定义, 是不是要自己定义呢   这几个变量都是什么含义  能说一下嘛 

我的QQ是597038165,你加我,我明天发给你

#19


非常感谢大家的帮助,特别感谢LoongEmbedded!!祝大家好人一生平安!!

#20