ERROR: Power Handler function yield to low priority thread.
我的机器在suspend==>resume的过程中出现唤不醒的情况。
串口信息是:
BSPPowerOn
PCF: HW_PowerUp
Backlight SET OK!
:: BACKLIGHT ON !
[HSMMC0] Power Up the HSMMC Host Controller
ERROR: Power Handler function yield to low priority thread.
[HSMMC0] Card is Inserted!
网上有一些帖子说到:
You can't make a system call of any kind in a power handler routine. You
could implement this requirement by making the driver power manager aware
and performing the operation when the PM tells you to change state.
在power handler routine中不能调用系统函数,比如sleep()
我这样做了,问题依然存在。应该是对问题理解不够,请明白的哥们帮忙指点下,谢谢。
我之前也是这个问题。后来真找到时power handler routine里调用了系统函数RegOpenKeyEx。把那个函数替换掉就OK了!
你没有这样做,否则不会出现这个error的。
对于这个问题的解决,在所有的powerdown或者up里面不能有任何的系统调用,不仅仅是sleep,还有EnterCriticalSection等都会造成这个结果的。只要有系统调用就很可能会产生这个问题。
教你个方法,把那些最可能调用了系统函数的驱动不编进NK,一个一个的试,很快就找到原因的。
[HSMMC0] Power Up the HSMMC Host Controller
ERROR: Power Handler function yield to low priority thread.
[HSMMC0] Card is Inserted!
是不是我的HSMMC驱动的问题
引用: 引用 5 楼 dwall_blue 的回复:
[HSMMC0] Power Up the HSMMC Host Controller
ERROR: Power Handler function yield to low priority thread.
[HSMMC0] Card is Inserted!
是不是我的HSMMC驱动的问题
不一定,HSMMC0] Card is Inserted!是IST打印出来的话,而Power Up the HSMMC Host Controller是系统还在单线程的时候打印出来的话,中间差了好多时间
原因肯定是调用api
上次跟你出现了相同的问题,加了sleep()函数,错误信息也是完全一样,呵呵,郁闷了很久
肯定是摸个powerhandle除了问题,挨个找一下就可以了,呵呵,很快
不能唤醒应该不是因为ERROR: Power Handler function yield to low priority thread.
我们的机器关机的时候也有这条信息,但是可以唤醒,楼上几位的说法我去查下,似乎powerdown函数里边是有些东西
引用: 引用 7 楼 veabol 的回复:
不能唤醒应该不是因为ERROR: Power Handler function yield to low priority thread.
我们的机器关机的时候也有这条信息,但是可以唤醒,楼上几位的说法我去查下,似乎powerdown函数里边是有些东西
应该是的,我把一个一个试着不加载,也是一样存在着问题。我的另外一款机器,打印信息一样提示这个错误,可是可以起来。硬件上有个主要的区别是:内存本来是64M的现在是128M。
另外一个系统(BSP相近的)启动信息:
[HSMMC0] Power Up the HSMMC Host Controller
ERROR: Power Handler function yield to low priority thread.
[HSMMC0] Card is Removed!
HcdPdd_InitiatePowerUp
[A_HW] IOControl(IOCTL_POWER_SET) : D4 => D0
[A_HW] IOControl : Turning Codec On
Init Audio!!!
Backlight SET OK!
是不是HcdPdd_InitiatePowerUp这个地方出了问题?
引用: 引用 10 楼 dwall_blue 的回复:
问题出现在USB身上,谢谢大家
USB出了什么问题,能够与大家共享一下?
USB问题多多啊,我的关机闹钟在插USB的情况下就有问题。
引用: 引用 12 楼 veabol 的回复:
USB问题多多啊,我的关机闹钟在插USB的情况下就有问题。
呵呵
BOOL HW_USBClocks(CEDEVICE_POWER_STATE cpsNew)
{
if (cpsNew == D0) //power on
{
USBFN_MSG( (TEXT("HW_USBClocks::D0 \r\n")));
//if(pIOPregs->GPFDAT & (1<<2)) //check cable connection, for powerconsumption
{
// Set the Normal mode
pIOPregs->GPHCON = (pIOPregs->GPHCON & ~(0x3<<28)) | (0x1<<28);
pIOPregs->GPHUDP = (pIOPregs->GPHUDP & ~(0x3<<28));
pIOPregs->GPHDAT = (pIOPregs->GPHDAT & ~(0x1<<14)) | (0x1<<14);
pIOPregs->MISCCR &= ~(1<<12);
// Enable the PHY Power
pCLKPWR->PWRCFG |= (1<<4);
// First USB PHY has to be reset, and after 10us, func and host has to be reset.
pCLKPWR->USB_CLKCON = (0<<31)|(1<<2)|(0<<1)|(0<<0); //pullup disable
pCLKPWR->USB_RSTCON = (0<<2)|(0<<1)|(1<<0);
Sleep(2);
pCLKPWR->USB_RSTCON = (1<<2)|(0<<1)|(0<<0);
Sleep(2);
pCLKPWR->USB_RSTCON = (0<<2)|(0<<1)|(0<<0);